Chart.js数据/标签比例

时间:2016-07-27 12:45:09

标签: javascript ruby-on-rails charts label chart.js

我想为我公司的实习项目创建一个线图。在yAxis我想要订单。在xAxis我想要月(1月 - 12月)。因此xAxis上有12个标签。我的问题是只有前12个订单从数据中挑选出来:我怎样才能解决这个问题 ?同样的问题是一个月。我在这里放了一个链接来说明。 http://imgur.com/a/VJBvj 这是我的代码:

 <canvas id="orderChartCurrentMonth" width="400" height="400"></canvas>
<script>
  <%= foo = ((Date.today).beginning_of_month) %>
  var ctx = document.getElementById("orderChartCurrentMonth");
  var orderChartCurrentMonth = new Chart(ctx, {
    type: 'line',
    data: {
      labels: [
        "<%=foo %>", "<%=foo + 1.week%>", "<%=foo + 2.week %>","<%=foo + 3.week%>", "<%=foo + 4.week%>"
      ], //x-Achse
      datasets: [{
        label: 'Graph Orders last week',
        data: <%= (foo..foo.end_of_month).map { |date| Company.graph_order(date).to_f}.inspect  %> //y-Achse
      }]},
    options:{
      legend:{
        display: false
      },
      scales: {
        xAxes: [{
          ticks: {
            stepSize: 10
      }}]}}})
</script>

问候

1 个答案:

答案 0 :(得分:0)

您应该使用提供按月(或周)分组的汇总数据的查询。虽然您可以使用数据库的日期函数来完成,但我建议使用Groupdate gem,它会在您经常需要的情况下简化流程。你可以做类似的事情。

# this should probably be done in a controller action
<% @data = Order.where(date: 1.years.ago.beginning_of_month..Time.now).group_by_month(:date).count %>


# get an array of monthly labels in js file
...
labels: <%= @data.map{ |month, order_count| month } %>
...

# get the values for those months
...
data: <%= @data.map{ |month, order_count| order_count } %>
...

毋庸置疑,此示例仅显示每月订单数量。如果您需要其他值,则必须调整查询。此外,Groupdate提供了许多选项来对这些数据进行分组。请务必阅读文档:https://github.com/ankane/groupdate