Plotly + Python: Простейший вариант настройки графика Plotly в шаблоне Django
Я хочу показать несколько графиков Plotly на странице Django. У меня уже есть списки 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/, где код сильно отличается от "моего", и я не могу его адаптировать (может быть, есть способ, но я пробовал разные варианты безрезультатно).
А код по умолчанию из Plotly (например, https://plotly.com/python/figure-structure/) не предназначен для использования внутри Django, и я также не знаю, как адаптировать его к Django.
Я все еще изучаю Python, так что, возможно, есть очевидное решение, которое я упускаю.
Любые советы, идеи или ссылки будут оценены по достоинству. Спасибо!
Если вы хотите показать несколько графиков Plotly на одной странице Django, вы можете использовать следующий код в файле views.py для вашего приложения Django
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, однако вы можете также дважды проверить content="width=device-width, initial-scale=1">
в вашем файле hello/graphs.html.