Google Charts xAxis必须包含日期时间

时间:2014-01-07 14:10:33

标签: java datetime charts google-visualization

我需要使用Google Chart创建一个图表,其中xAxis表示日期时间,yAxis表示传感器的温度。

我将它与Java结合起来

这是我的代码:

<script type="text/javascript">
      google.load("visualization", "1", {packages:["corechart"]});
      google.setOnLoadCallback(drawChart);
      function drawChart() {
          var data = new google.visualization.DataTable();
            data.addColumn('datetime', 'Date');
            data.addColumn('number', 'Temperature');

        <%
          for ( MyDateTimeFormat key : hm.keySet() ) {
              out.print("data.addRow([new Date("+key.year+","+key.month+","+key.day+","+key.hour+","+key.minute+","+key.second+"), "+hm.get(key)+"]);"); 
          }%>

        var options = {
          title: '<% out.print(((ConfigItemTemperatureSensor)item).getId()+" P"+((ConfigItemTemperatureSensor)item).getPort()+((ConfigItemTemperatureSensor)item).getPin()+" "+((ConfigItemTemperatureSensor)item).getName()); %>'
        };

        var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
        chart.draw(data, options);
      }
    </script>

MyDateTimeFormat的值如下所示:

MyDateTimeFormat [year=2014, month=01, day=07, hour=17, minute=05, second=56]
MyDateTimeFormat [year=2014, month=01, day=07, hour=17, minute=06, second=01]
MyDateTimeFormat [year=2014, month=01, day=07, hour=17, minute=06, second=06]
MyDateTimeFormat [year=2014, month=01, day=07, hour=17, minute=06, second=11]
MyDateTimeFormat [year=2014, month=01, day=07, hour=17, minute=06, second=16]
MyDateTimeFormat [year=2014, month=01, day=07, hour=17, minute=06, second=21]

结果完全错了: enter image description here

2 个答案:

答案 0 :(得分:1)

查看填充图表数据的循环:

for ( MyDateTimeFormat key : hm.keySet() ) {
          out.print("data.addRow([new Date("+key.year+","+key.month+","+key.day+","+key.hour+","+key.minute+","+key.second+"), "+hm.get(key)+"]);"); 
      }%>

如果变量 hm 是一个散列图,那么这将是无序的,这可能解释了为什么图表看起来像它那样。

您可以在填充var 数据

之前将图表更改为散点图或对键集进行排序

答案 1 :(得分:0)

David Hodgson先前的回答解释了我的问题的原因。

要知道像HashMap这样的集合中元素的插入顺序是不可能的。如果您想知道此订单,可以使用LinkedHashMap。就我而言,这个课程解决了这个问题。

LinkedHashMap类似于HashMap,它们之间的唯一区别是LinkedHashMap知道插入顺序。

谢谢David Hodgson!