
Security News
New Website “Is It Really FOSS?” Tracks Transparency in Open Source Distribution Models
A new site reviews software projects to reveal if they’re truly FOSS, making complex licensing and distribution models easy to understand.
Create beautiful JavaScript charts with one line of Ruby. No more fighting with charting libraries!
:fire: For admin charts and dashboards, check out Blazer
:two_hearts: A perfect companion to Groupdate, Hightop, and ActiveMedian
Have a minute? Take the 2019 Chartkick Survey
Add this line to your application's Gemfile:
gem "chartkick"
In application.js
, add:
//= require Chart.bundle
//= require chartkick
This sets up Chartkick with Chart.js. For other charting libraries, see detailed instructions.
Line chart
<%= line_chart User.group_by_day(:created_at).count %>
Pie chart
<%= pie_chart Goal.group(:name).count %>
Column chart
<%= column_chart Task.group_by_hour_of_day(:created_at, format: "%l %P").count %>
Bar chart
<%= bar_chart Shirt.group(:size).sum(:price) %>
Area chart
<%= area_chart Visit.group_by_minute(:created_at).maximum(:load_time) %>
Scatter chart
<%= scatter_chart City.pluck(:size, :population) %>
Geo chart - Google Charts
<%= geo_chart Medal.group(:country).count %>
Timeline - Google Charts
<%= timeline [
["Washington", "1789-04-29", "1797-03-03"],
["Adams", "1797-03-03", "1801-03-03"],
["Jefferson", "1801-03-03", "1809-03-03"]
] %>
Multiple series
<%= line_chart @goals.map { |goal|
{name: goal.name, data: goal.feats.group_by_week(:created_at).count}
} %>
or
<%= line_chart Feat.group(:goal_id).group_by_week(:created_at).count %>
Make your pages load super fast and stop worrying about timeouts. Give each chart its own endpoint.
<%= line_chart completed_tasks_charts_path %>
And in your controller, pass the data as JSON.
class ChartsController < ApplicationController
def completed_tasks
render json: Task.group_by_day(:completed_at).count
end
end
For multiple series, add chart_json
at the end.
render json: Task.group(:goal_id).group_by_day(:completed_at).count.chart_json
Id, width, and height
<%= line_chart data, id: "users-chart", width: "800px", height: "500px" %>
Min and max values
<%= line_chart data, min: 1000, max: 5000 %>
min
defaults to 0 for charts with non-negative values. Use nil
to let the charting library decide.
Colors
<%= line_chart data, colors: ["#b00", "#666"] %>
Stacked columns or bars
<%= column_chart data, stacked: true %>
Discrete axis
<%= line_chart data, discrete: true %>
Label (for single series)
<%= line_chart data, label: "Value" %>
Axis titles
<%= line_chart data, xtitle: "Time", ytitle: "Population" %>
Straight lines between points instead of a curve
<%= line_chart data, curve: false %>
Hide points
<%= line_chart data, points: false %>
Show or hide legend
<%= line_chart data, legend: false %>
Specify legend position
<%= line_chart data, legend: "bottom" %>
Defer chart creation until after the page loads
<%= line_chart data, defer: true %>
Donut chart
<%= pie_chart data, donut: true %>
Prefix, useful for currency - Chart.js, Highcharts
<%= line_chart data, prefix: "$" %>
Suffix, useful for percentages - Chart.js, Highcharts
<%= line_chart data, suffix: "%" %>
Set a thousands separator - Chart.js, Highcharts
<%= line_chart data, thousands: "," %>
Set a decimal separator - Chart.js, Highcharts
<%= line_chart data, decimal: "," %>
Show a message when data is empty
<%= line_chart data, messages: {empty: "No data"} %>
Refresh data from a remote source every n
seconds
<%= line_chart url, refresh: 60 %>
You can pass options directly to the charting library with:
<%= line_chart data, library: {backgroundColor: "#eee"} %>
See the documentation for Chart.js, Google Charts, and Highcharts for more info.
To customize datasets in Chart.js, use:
<%= line_chart data, dataset: {borderWidth: 10} %>
You can pass this option to individual series as well.
To set options for all of your charts, create an initializer config/initializers/chartkick.rb
with:
Chartkick.options = {
height: "400px",
colors: ["#b00", "#666"]
}
Customize the html
Chartkick.options[:html] = '<div id="%{id}" style="height: %{height};">Loading...</div>'
You capture the JavaScript in a content block with:
Chartkick.options[:content_for] = :charts_js
Then, in your layout:
<%= yield :charts_js %> <!-- Rails -->
<%= yield_content :charts_js %> <!-- Padrino -->
This is great for including all of your JavaScript at the bottom of the page.
Pass data as a Hash or Array
<%= pie_chart({"Football" => 10, "Basketball" => 5}) %>
<%= pie_chart [["Football", 10], ["Basketball", 5]] %>
For multiple series, use the format
<%= line_chart [
{name: "Series A", data: series_a},
{name: "Series B", data: series_b}
] %>
Times can be a time or a string (strings are parsed)
<%= line_chart({20.day.ago => 5, "2013-05-07 00:00:00 UTC" => 7}) %>
You can pass a few options with a series:
name
data
color
dataset
- Chart.js onlypoints
- Chart.js onlycurve
- Chart.js onlyIf you want to use the charting library directly, get the code with:
<%= line_chart data, code: true %>
The code will be logged to the JavaScript console.
Note: JavaScript functions cannot be logged, so it may not be identical.
Chart.js only
Give users the ability to download charts. It all happens in the browser - no server-side code needed.
<%= line_chart data, download: true %>
Note: Safari will open the image in a new window instead of downloading.
Set the filename
<%= line_chart data, download: {filename: "boom"} %>
Set the background color
<%= line_chart data, download: {background: "#ffffff"} %>
Set title
<%= line_chart data, title: "Awesome chart" %>
Add this line to your application's Gemfile:
gem "chartkick"
Next, choose your charting library.
Note: In the instructions below, application.js
must be included before the charts in your views, unless using the :content_for
option.
In application.js
, add:
//= require Chart.bundle
//= require chartkick
In application.js
, add:
//= require chartkick
In your views, before application.js
, add:
<%= javascript_include_tag "https://www.gstatic.com/charts/loader.js" %>
Download highcharts.js into vendor/assets/javascripts
(or use yarn add highcharts
in Rails 5.1+).
In application.js
, add:
//= require highcharts
//= require chartkick
Works with Highcharts 2.1+
For Webpacker, use Yarn to install the JavaScript libraries:
yarn add chartkick chart.js # or highcharts
Then include them in your pack.
import Chartkick from "chartkick";
window.Chartkick = Chartkick;
// for Chart.js
import Chart from "chart.js";
Chartkick.addAdapter(Chart);
// for Highcharts
import Highcharts from "highcharts";
Chartkick.addAdapter(Highcharts);
// for Google Charts
// just include https://www.gstatic.com/charts/loader.js in your views
You pack must be included before the charts in your views, unless using the :content_for
option.
You must include chartkick.js
manually. Download it here
<script src="chartkick.js"></script>
To specify a language for Google Charts, add:
Chartkick.configure({language: "de"});
after the JavaScript files and before your charts.
If more than one charting library is loaded, choose between them with:
<%= line_chart data, adapter: "google" %> <!-- or highcharts or chartjs -->
Access a chart with:
var chart = Chartkick.charts["chart-id"]
Get the underlying chart object with:
chart.getChartObject()
You can also use:
chart.getElement()
chart.getData()
chart.getOptions()
chart.getAdapter()
Update the data with:
chart.updateData(newData)
You can also specify new options:
chart.setOptions(newOptions)
// or
chart.updateData(newData, newOptions)
Refresh the data from a remote source:
chart.refreshData()
Redraw the chart with:
chart.redraw()
Loop over charts with:
Chartkick.eachChart( function(chart) {
// do something
})
Check out how to configure CSP
Check out chartkick.js
Breaking changes
xtype
option - numeric axes are automatically detectedwindow.Chartkick = {...}
way to set config - use Chartkick.configure
insteadBreaking changes
discrete: true
Chartkick uses iso8601.js to parse dates and times.
View the changelog
Chartkick follows Semantic Versioning
Everyone is encouraged to help improve this project. Here are a few ways you can help:
FAQs
Unknown package
We found that chartkickm demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
A new site reviews software projects to reveal if they’re truly FOSS, making complex licensing and distribution models easy to understand.
Security News
Astral unveils pyx, a Python-native package registry in beta, designed to speed installs, enhance security, and integrate deeply with uv.
Security News
The Latio podcast explores how static and runtime reachability help teams prioritize exploitable vulnerabilities and streamline AppSec workflows.