使用sql中的数据在django应用程序上呈现plotly图形

g2ieeal7  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(441)

我正试图按照这里的说明将plotly散点图集成到django应用程序中:在django模板中嵌入plotly图表。
我想在plotly graph上呈现的数据来自应用程序的sql数据库,但我不知道如何在不从数据集中删除值的情况下查询数据。
下面是views.py文件:

release_dates = list(models.Film.objects.values_list('release_date', flat=True).distinct())
gross = list(models.Film.objects.values_list('gross', flat=True).distinct())
title = list(models.Film.objects.values_list('title', flat=True).distinct())

class Graph(TemplateView):
    template_name = 'graph.html'

    def get_context_data(self,**kwargs):
        context = super(Graph, self).get_context_data(**kwargs)

        trace1 = go.Scatter(x=release_dates, y=gross, marker={'color': 'red'}, hovertext = title,
                            mode="markers+text",  name='1st Trace')
        data=go.Data([trace1])
        layout=go.Layout(title="Films by Gross", xaxis= {'title':'Year'}, yaxis={'title':'Gross'})
        figure=go.Figure(data=data,layout=layout)
        div = opy.plot(figure, auto_open=False, output_type='div')

        context['graph'] = div

        return context

问题是,当情节图呈现在网页上时,数据会变得杂乱无章,以至于影片的片名与上映日期和总票房不符。
我认为问题是数据库中缺少或“null”值,因此当我调用“release\u date”、“gross”和“title”值列表上的list函数时,数据会变得不对齐(我已经检查了网站后端的模型,数据是好的(当数据被查询时问题就出现了)。
有没有更好的方法来呈现这些数据,而不是像我上面所做的那样使用list函数,或者有更好的方法来处理这个问题。
谢谢!

cygmwpex

cygmwpex1#

我通过使用 Model.object.values_list 具有三个输入的函数-在一个列表中返回所需的x和y坐标以及hovertext值,然后我可以在其中循环:

import plotly.offline as opy
import plotly.graph_objs as go
from home.models import Film

model_data = Film.objects.values_list('release_date', 'gross','title')
x_value_list = []
y_value_list = []
z_value_list = []
for values in model_data:
    x_value_list.append(values[0])
    y_value_list.append(values[1])
    z_value_list.append(values[2])

class Graph(TemplateView):
    template_name = 'graph.html'

    def get_context_data(self,**kwargs):
        context = super(Graph, self).get_context_data(**kwargs)

        trace1 = go.Scatter(x=x_value_list, y=y_value_list, marker={'color': 'red'}, hovertext = z_value_list,
                            mode="markers+text", name='1st Trace')
        data=go.Data([trace1])
        layout=go.Layout(title="Films by Gross", xaxis= {'title':'Year'}, yaxis={'title':'Gross'})
        figure=go.Figure(data=data,layout=layout)
        div = opy.plot(figure, auto_open=False, output_type='div')

        context['graph'] = div

        return context
8ehkhllq

8ehkhllq2#

也许会迟到,但如果有人看到这一点,一个更简单的方法就是使用Pandas(甚至不是那样)

import pandas a pd
df = pd.DataFrame(Film.objects.values('release_date', 'gross','title'))
...
def get_context_data(self,**kwargs):
        context = super(Graph, self).get_context_data(**kwargs)

        trace1 = go.Scatter(
                     x=df.realese_date, 
                     y=df.gross, marker={'color': 'red'}, 
                     hovertext=df.title,
                     mode="markers+text", name='1st Trace')

        ...

相关问题