javascript - 如何使用烧瓶为chart.js创建时间序列数组?
问题描述
我有一些 python 代码成功地将两个数组传递给我的 html 模板
@app.route('/line')
def line():
df= av_query(av_start_date,av_end_date,'44201')
df['dt']=pd.to_datetime(df['Date'])
df['RawValue']=np.where(df['Units']=='007',df['RawValue']*1000,df['RawValue'] )
temp_df=df[df['Site']=='SM']
dates = temp_df['dt']
values = temp_df['RawValue']
return render_template('line.html', title='Ozone Data',dates=dates[:5], values=values[:5], max_n=100)
在我的 html 模板中,我测试了这个绘图代码
<center>
<h1>{{ title }}</h1>
<canvas id="myChart" width="600" height="400"></canvas>
<script>
var s1 = {
label: 's1',
borderColor: 'blue',
data: [
{ x: '2017-01-06 18:39:30', y: 100 },
{ x: '2017-01-07 18:39:28', y: 101 },
]
};
var s2 = {
label: 's2',
borderColor: 'red',
data: [
{ x: '2017-01-07 18:00:00', y: 90 },
{ x: '2017-01-08 18:00:00', y: 105 },
]
};
var ctx = document.getElementById('myChart').getContext('2d');
var chart = new Chart(ctx, {
type: 'line',
data: { datasets: [s1, s2] },
options: {
scales: {
xAxes: [{
type: 'time'
}]
}
}
});
</script>
</center>
如何用我的数据替换虚拟s1
数据s2
?
我试图将每一行推送到数据集,但这似乎不起作用。
var s1 = {
label: 's1',
borderColor: 'blue',
dates=dates
values=values
data: []
for (i=0; i<=dates.length; i++){
data.push({x:dates[i], y:values[i]})
}
};
解决方案
我发现最简单的方法是使用模板在页面中呈现一个变量。
如果您的数据在数组或字典中,请确保在将其传递给模板之前将其转换为 json,然后在模板呈现如下时将其传递给 javascript:
<script>
const data = {{ data|safe }};
</script>
JSON 将本机呈现为 Javascript,你可以用它做你想做的事。
确保将其通过safe
过滤器,否则它将被转义。
推荐阅读
- windows - 在 Windows 的 Git bash 中全局运行 shell 脚本
- python - 文件粉碎无法正常工作(粉碎后的文件与原始文件大小不同)
- swift - corewlan:使用保存的系统凭据与网络关联(无沙箱)
- php - 登录表格:提交密码+在服务器中保存密码
- python - 名称错误:名称'
' 没有定义 - gitlab - 如何在 GitLab CE 中使用自定义代码气候配置?
- kubernetes - 有什么方法可以在 kubernetes 中查看 entrypont 命令
- github - 如何在我的主页上删除其他人的 repo?
- reactjs - 如何在 React-Bootstrap 中调整表单控件的宽度
- laravel - 如何在 Laravel 动态路由中使用 str_replace