使用jinja2将Np.datatime64发送到Flask中的Chart.js图表

时间:2018-03-10 15:20:48

标签: json numpy flask jinja2

我正在读取数据时间对象,并希望将它们作为x轴发送到chart.js图表​​。这些是np.datatime64对象。发送它的最佳方式是什么? 在我的页面中我得到了:

@app.route('/chart')
def chart():
    x = [str(d) for d in dataframe["Date"].values] # these are datetimes - here I just do str()
    y = [v for v in dataframe["Value"].values] # these are floats

    return render_template('chart.html', labels=x, values=y)

chart.html

<body>
    <script type="text/javascript">
      {% include "mychart.js" %}
    </script>
</head>
<body>
    <div class="container">
        <canvas id="myChart" width="1500" height="500"></canvas>
    </div>
</body>

mychart.js

window.onload = function() {
var chartData = {
  labels : [{% for d in labels %} new Date("{{d}}"), {% endfor %}],  // or {{d|tojson }}
  datasets : [{
      fill: true,
      lineTension: 0.1,
      backgroundColor: "rgba(75,192,192,0.4)",
      borderColor: "rgba(75,192,192,1)",
      data : [{% for item in values %} {{item}},{% endfor %}],
      spanGaps: false
  }]
}

var ctx = document.getElementById("myChart").getContext("2d");

var myChart = new Chart(ctx, {
  type: 'line',
  data: chartData,
});
}

并且json.dump或jsonfy不会序列化np.datetime64对象。

我无法做到

x = [json.dump(d) for d in dataframe["Date"].values]

因为它引发了无法序列化的异常

  

TypeError:'datetime64'类型的对象不是JSON可序列化的

我认为这些对象没有“isoformat()”方法,所以唯一的方法就是让它们成为字符串?

0 个答案:

没有答案