python - 使用来自 SQL 的数据将 Plotly 图渲染到 Django 应用程序
问题描述
我正在尝试按照此处列出的说明将 Plotly 散点图集成到我的 Django 应用程序中:Embedding a Plotly chart in a Django template。
我想在 Plotly 图上呈现的数据来自应用程序的 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
问题是,当 Plotly Graph 在网页上呈现时,数据会变得混乱,以至于电影的标题与它们的发行日期和总票房不匹配。
我认为问题在于数据库中存在缺失值或“空”值,因此当我在“release_date”、“gross”和“title”values_list 上调用列表函数时,数据会错位。(我已经检查了网站后端的模型,数据很好 - 查询数据时出现问题)。
有没有比使用我上面所做的列表函数更好的方法来呈现这些数据,或者有更好的方法一起解决这个问题。
谢谢!
解决方案
我通过使用具有三个输入的函数查询数据库来解决这个问题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
推荐阅读
- java - 缩放捏合camera2api
- r - 如何在我的情绪分析应用程序中显示缺失值
- iis - .Net 核心和 IIS 10.0 给出 HTTP 错误 500.19 - 内部服务器错误
- node.js - 如何在 ubuntu 中修复 Listen EADDRINUSE
- asp.net-mvc - Microsoft.Web.Redis.RedisSessionStateProvider 是否支持与 redis 存储的 tls 1.2 连接?
- scikit-learn - Tfidf 矢量化器
- python - NodeJS:在 conda 环境中运行 python 脚本
- html - 虽然我没有显示图像悬停效果。我也可以在图像上使用叠加层
- vertex - 3ds max 不会焊接由形状制成的多边形的顶点
- scala - 从 Scala 中的 Spark 获取位于 GCS 存储桶中的所有文件的路径的最佳方法是什么?