Офлайн-шаблонизатор - это возможно? - PullRequest
0 голосов
/ 16 марта 2020

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

Просмотр:

from django.shortcuts import render
from plotly.offline import plot
from plotly.graph_objs import Scatter

def index(request):
    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', name='test',
                        opacity=0.8, marker_color='green')],
               output_type='div')
    return render(request, "index.html", context={'plot_div': plot_div})

Шаблон:

<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>test</title>
</head>
<body>
  {% autoescape off %}
  {{ plot_div }}
  {% endautoescape %}
</body>
</html>

Эти строки кода генерируют простой график разброса и будут показывать его клиентскому шаблону, теперь я хочу использовать другой шаблон темы, как сообщается в Документы ( ЗДЕСЬ ), у Plotly есть множество готовых к использованию шаблонов по умолчанию, но я не могу понять, как их использовать в моем рендерере представлений в автономном режиме. как я могу использовать шаблон plotly_white в моих графиках?

1 Ответ

0 голосов
/ 16 марта 2020

Хорошо, поэтому после многих попыток я нашел решение.

По сути, нам нужно:

  • Построить объекты осей
  • Создайте макет с объектом template, который определяет словарь осей и шаблон для использования
  • Создайте объект фигуры, который содержит график с осями и пользовательский макет
  • Постройте диаграмму для контейнер div

Вот фрагмент кода, который я использовал:

import numpy as np
import plotly.graph_objs as go
from plotly.offline import plot



def plot1d():
    x_data = np.arange(0, 120, 0.1)
    trace1 = go.Scatter(
        x=x_data,
        y=np.sin(x_data),
    )
    trace2 = go.Scatter(
        x=x_data,
        y=np.cos(x_data),
    )

    data = [trace1, trace2]
    layout = go.Layout(
        # autosize=False,
        # width=900,
        # height=500,
        template='plotly_dark',
        xaxis=dict(
            autorange=True
        ),
        yaxis=dict(
            autorange=True
        )
    )
    fig = go.Figure(data=data, layout=layout)
    plot_div = plot(fig, output_type='div', include_plotlyjs=False)
    return plot_div

И вот окончательный результат:

Chart Result

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...