Trực quan hóa dữ liệu thống kê trong rails với gem Chartkick và custom chart

Tram Ho

1. Chartkick là gì?

Chartkick là một bộ thư viện giúp chúng ta trực quan hóa các dữ liệu thống kê một cách dễ dàng. Nó có các framework hỗ trợ nhiều ngôn ngữ lập trình khác nhau như:

  • Ruby on rails
  • Python
  • Javascript

Đồng thời có thể sử dụng các thư viện adapter khác nhau như: Chart.js, highcharts hoặc googlechart.

2. Hướng dẫn cài đặt

2.1. Thêm gem "chartkick" vào Gemfile sau đó bundle

2.2. Cài đặt các thư viện JS cần thiết để vẽ biểu đồ

Cài đặt với ChartJS

  • Với Rails 6/ Webpacker:

chạy lệnh sau để download các thư việc cần thiết về thư mục:

yarn add chartkick chart.js và trong file app/javascript/packs/application.js thêm vào các dòng sau:

  • Với Rails 5:

Thêm các dòng sau vào app/assets/javascripts/application.js:

Cài đặt với GoogleChart

Thêm asset tag này vào trong layout:

  • Với Rails 6/Webpacker, ta thêm:

Ta chạy yarn add chartkick để cài chartkick và trong file app/javascript/packs/application.js ta thêm:

  • Với Rails 5:

Bổ sung vào file app/assets/javascripts/application.js :

Chú ý: Để config ngôn ngữ hay ggmap API cho googlechart thì chỉ cần thêm dòng này trước khi sử dụng chart:

Cài đặt với highcharts

  • Với Rails 6/ Webpacker:

chạy lệnh sau để download các thư việc cần thiết về thư mục:

yarn add chartkick chart.js và trong file app/javascript/packs/application.js thêm vào các dòng sau:

  • Với Rails 5 Ta cần phải download highcharts.js về trong thư mục vendor/assets/javascripts . Nếu sử dụng Rails 5.1+ thì có thể sử dụng lệnh sau để cài đặt yarn add highcharts .
    Thêm các dòng sau vào app/assets/javascripts/application.js:

2.3. Cài đặt các tool cần thiết cho database phục vụ việc thống kê

Có một số thứ cần thiết cho việc thống kê của chúng ta ví dụ như: GroupDate, HightopActiveMedian

Việc cài đặt các bạn hãy follow theo các link trên.

Sau khi đã hoàn tất các bước cơ bản các bạn có thể vẽ.

3. Vẽ các biểu đồ đặc trưng

Chú ý: Nếu sử dụng nhiều thư viện biểu đồ một lúc. Thì phải thêm tùy chọn sau(tùy chọn thự viện):

Các loại biều đồ đơn (Chỉ có 1 loạiiểu đồ trong một biểu đồ)

Cú pháp chung:

Data sẽ là một hash hoặc array:

Ví dụ:

Các loại biểu đồ:

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) %>

Các tùy chọn:

Id, width, and height

Min and max values

min defaults to 0 for charts with non-negative values. Use nil to let the charting library decide.

Min and max for x-axis – Chart.js

Colors

Stacked columns or bars

Discrete axis

Label (for single series)

Axis titles

Straight lines between points instead of a curve

Hide points

Show or hide legend

Specify legend position

Defer chart creation until after the page loads

Donut chart

Prefix, useful for currency – Chart.js, Highcharts

Suffix, useful for percentages – Chart.js, Highcharts

Set a thousands separator – Chart.js, Highcharts

Set a decimal separator – Chart.js, Highcharts

Set significant digits – Chart.js, Highcharts

Set rounding – Chart.js, Highcharts

Show insignificant zeros, useful for currency – Chart.js, Highcharts

Friendly byte sizes – Chart.js 2.8+

Show a message when data is empty

Refresh data from a remote source every n seconds

You can pass options directly to the charting library with:

Tối ưu performance với biểu đồ đơn
Làm cho các trang của bạn tải siêu nhanh và không lo ngại về thời gian chờ. Ta sử dụng url cho riêng nó và load dữ liệu về.

Tạo controller

**Nếu dùng để vẽ nhiều dạng cùng kiều thì như sau: **

Vẽ biểu đồ
Ví dụ kiều biều đồ đường:

4. Custom một số biểu đồ theo ý muốn

4.1. Vẽ biều đồ kết hợp dạng server side rendering

Chúng ta sẽ kết hợp nhiều loại biểu đồ trong 1 biểu đồ phía client.

  • Ưu điểm:
    • Triển khai nhanh
    • Đơn giản
  • Nhược điểm:
    • Thời gian load trang chậm do phải tổng hợp dữ liệu

Ví dụ:

Lúc này biểu đồ, sẽ có 1 line và cột.

4.2. Vẽ biểu đồ kết hợp dạng client side rendering

Code demo

Tài liệu tham khảo

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo