Рендеринг графика Plotly в приложении Django с использованием данных из SQL - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь интегрировать график разброса Plotly в свое приложение Django, следуя инструкциям, изложенным здесь: Встраивание графика Plotly в шаблон Django .

данные, которые я хочу отобразить на графике Plotly, взяты из базы данных приложения SQL, но я не могу понять, как запросить данные, не удаляя значения из набора данных.

Ниже представлен файл views.py: 1007 * Я думаю, что проблема в том, что в базе данных отсутствуют или «нулевые» значения, поэтому, когда я вызываю функцию списка в «release_date», «брутто» и «title» values_list, данные становятся смещенными. (Я проверил модели на бэкэнде сайта, и данные в порядке - проблема возникает при запросе данных).

Есть ли лучший способ визуализации этих данных, чем использование функции списка, такой как я сделали выше или лучший способ решить эту проблему вместе.

Спасибо!

1 Ответ

0 голосов
/ 14 июля 2020

Я понял это, запросив базу данных с помощью функции Model.object.values_list с тремя входами, которая вернула мои желаемые координаты x и y и значения hovertext в списке, которые я мог затем l oop через:

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
...