如何通过matplotlib在服务器上制作的Django中绘制图?

时间:2019-07-18 14:43:51

标签: python django matplotlib

我正在开发一个Django应用程序,我希望该应用程序能够呈现一个在用户选中/取消选中复选框输入时更新的图形。我无法将数据从表单传递到服务器端逻辑,然后在视图中呈现图(通过matplotlib创建的直方图)。

数据来自Django预包装的sqlite数据库中的SQL查询。我已验证SQL查询返回正确的数据,并且具有将创建正确的直方图的脚本。但是,由于有许多不同的选项供用户单击以生成直方图,因此我不想将每个潜在的直方图另存为要提供的静态文件。理想情况下,当用户切换复选框时,直方图将更新。

我不反对使用JavaScript /另一个绘图框架来绘制直方图,但是我不确定如何将其连接到数据库或视图。

任何帮助将不胜感激!

示例更新

复选框是用户在直方图中包含/排除的选项。启用和禁用它们将创建SQL查询返回的完整数据集的子集。这是一个示例:

如果对首选的冰淇淋口味和浇头进行了调查,则查询返回这样的数据框(除了提供更多口味和浇头外):

import pandas as pd
# Query from DB creates this via pd.read_sql_query(), but I'll just create by hand
df = pd.DataFrame({
    'id': [1, 2, 3, 4, 5],
    'flavor': ['chocolate', 'strawberry', 'vanilla', 'pineapple', 'chocolate'],
    'topping': ['fudge', 'sprinkles', 'fruit', 'cookies', 'sprinkles']
})

复选框创建了已检查冰淇淋口味的子集,直方图显示了首选浇头的分布。因此,如果检查了巧克力和草莓,我们将得到:

sub = df[df['flavor'].isin(['chocolate', 'strawberry'])]

sub,我可以计算每个浇头的响应百分比。我有逻辑来处理这个问题,所以我将直接指向用于制作直方图的final数据框:

final = pd.DataFrame({
    'topping': ['fudge', 'sprinkles'],
    'pct_liked': [.333, .666]
})

最后,我绘制了直方图:

import matplotlib.pyplot as plt

ax = final['pct_liked'].plot(
    kind = 'bar',
    title = f'Ice Cream Toppings by Chocolate and Strawberry Lovers',
    width = 1.0
)

ax.figure

是我要在Django视图中显示的直方图。我已验证脚本中的此工作流程正常运行。

将存储响应的数据库是Django随附的sqlite数据库,但是我不确定如何选中用户单击的风味的复选框并将其通过此过程,然后如何进行{{ 1}},并在Django视图中呈现。

0 个答案:

没有答案