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.

Вернуться на верх