我有一个在Django中调用以下视图函数时执行的脚本:
def CalScriptResultsView(request):
all_activities = models.CalEvents.objects.filter(user=request.user)
activities = ['Undefined',]
for activity in all_activities:
activities.append(activity.activity_code)
script_result = gCalScriptMain.main(activities)
return render(request, 'gCalData/gCalData_result.html', {'script_result': script_result})
脚本gCalScriptMain.main()
读取Google日历中的事件并构建Pandas数据框。数据框的标题(列)是用户定义的活动,索引(行)由日期类型日期组成(例如2017-10-02)。实际数据包括每天每项活动花费的小时数(在三个月内)。
我希望能够绘制一个如下所示的直方图:
我必须以某种方式将直方图返回到视图,然后将其传递到相应的模板并显示在网页上。
我尝试的是以下内容:
import matplotlib.pyplot as plt
df.hist()
plt.savefig('path/to/hist.png')
但它只是生成一个空白文件。
然而,我也怀疑这是一种好方法还是有更好的方法。有任何想法吗?
答案 0 :(得分:0)
我发现pygal是我想要完成的好工具。我正在创建.svg文件并从模板中调用它。
line_chart = pygal.Line()
line_chart.title = 'Hours spent in each activity during the specified
period ({} to {})'.format(input_start,input_end)
line_chart.x_labels = map(lambda d: d.strftime('%Y-%m-%d'),
list(df.index.values))
for activity in act_hours:
line_chart.add(activity, df[activity])
static_path = 'images/charts/line_chart_{}.svg'.format(user.id)
line_chart.render_to_file('static/' + static_path)
activities['static_path'] = static_path
在模板中:
<div class="container">
{% with chart_path=script_result.static_path %}
<object type="image/svg+xml" data="{% static chart_path %}">
Error: Your browser doesn't support SVG files
</object>
{% endwith %}
</div>