如何在Django视图中生成直方图(从Pandas DF)并传递到模板?

2024-09-29 00:21:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个脚本,当在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)。实际数据包括每天(三个月内)每项活动花费的小时数。在

我想画一个直方图,看起来像这样: Desired histogram type

我必须以某种方式将直方图返回到视图中,这样它就可以传递到相应的模板中,并显示在网页上。在

我尝试了以下方法:

^{pr2}$

但它只是生成一个空白文件。在

然而,我也怀疑这是一个好方法还是有更好的方法。有什么想法吗?在


Tags: 数据方法脚本视图mainrequestscriptresult
1条回答
网友
1楼 · 发布于 2024-09-29 00:21:57

我发现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

在模板中:

^{pr2}$

相关问题 更多 >