Plotly + Python:在Django模板中自定义Plotly图的最简单选项



我想在Django页面上展示几个Plotly图形。我已经有了包含我想要包含在图中的数据的Python列表。

我发现了一个可以工作的代码,但显然它是旧的或奇怪的(我看到的所有其他Plotly代码片段都非常不同),我不能真正自定义它(试图使用来自"官方"的行/概念)。代码片段不能与这些旧的/奇怪的代码一起工作)。

我的代码是:

from plotly.offline import plot
from plotly.graph_objs import Scatter

plot_scatter = plot([Scatter(x=x_data, y=y_data,
mode='lines', name='test',
opacity=0.8, marker_color='green')],
output_type='div')
context = {
'plot_scatter' : plot_scatter,
OTHER STUFF
}
return render(request, 'hello/graphs.html', context)

这是有效的,但是然后我想减少空白,例如,我找到了一些例子,如https://plotly.com/python/setting-graph-size/,其中的代码与"mine"非常不同。我无法适应它(也许有办法,但我尝试了不同的选择,没有任何运气)。

Plotly的默认代码(例如https://plotly.com/python/figure-structure/)不是为Django内部使用而设计的,我也不知道如何将其适应Django。

我还在学习Python,所以也许有一个明显的解决方案,我错过了。

任何提示,想法或链接将不胜感激。谢谢!

如果你想在一个Django页面上显示多个Plotly图表,你可以在你的Django应用程序的views.py文件中使用以下代码

def plot1():
x_data = [0,1,2,3]
y_data = [x**2 for x in x_data]
plot_div = plot([Scatter(x=x_data, y=y_data,
mode='lines+markers', name='test',
opacity=0.8, marker_color='green',)],
output_type='div')
return plot_div
def plot2():
random_x = [100, 2000, 550]
names = ['A', 'B', 'C']
fig = px.pie(values=random_x, names=names)
fig.update_layout(margin=dict(l=20, r=20, t=20, b=20), paper_bgcolor="LightSteelBlue")
plot_div2 = plot(fig, output_type='div')
return plot_div2
def index(request):
plots = [
plot1(),
plot2(),
]
return render(request, "hello/graphs.html", context={"plots": plots})

你可以使用fig.update来更新布局和进一步定制。

在你的hello/graphs.html页面中,你可以使用for循环来显示每个图表,这样你就可以在Django

中在一个页面上显示多个图表
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
{% autoescape off %}
{% for plot in plots %}
{{plot}}

{% endfor %}
{% endautoescape %}
</body>

图形大小应该使用Plotly自定义,但是您可能还需要再次检查hello/graphs.html文件中的content="width=device-width, initial-scale=1">

最新更新