Есть ли способ построить график plotly на внутреннем сервере и отправить интерактивные результаты на webapp?

Итак, я фактически делаю все вычисления в бэкенде, генерирую график в (.png), сохраняю его в pathfile, и передаю через AJAX ссылку на это вновь сгенерированное изображение. Однако такой процесс позволяет мне передать только изображение. По сути, я конвертирую график в изображение.

Интересно, есть ли способ передать весь вывод plotly, как интерактивный график через AJAX.

import yfinance as yf
import plotly.graph_objects as go

aapl = yf.Ticker('AAPL')
ainfo = aapl.history(start=datemin, end=datemax)

#Plot the Chart
fig = go.Figure(data=go.Scatter(x=ainfo.index,y=ainfo.Close, mode='lines'),)

#DB inject plot
fig.write_image("/Users/Xlibidish/Desktop/Django/static/"+tickerZ+rx+".png")


#And then communicate the path through AJAX etc.

Я хочу отправить в Webapp вывод plotly. У меня есть несколько подсказок:

  1. Генерировать график в моем Webapp непосредственно в JS, так что бэкенд отправляет только данные из yfinance и директиву для его генерации. (Довольно сложно, особенно зная, что у меня есть различные типы графиков, которые все генерируются в python, поэтому Webappp получает только Images в это время, не дифференцируя их).
  2. Создать iframe, направляющий на порты вывода plotly, но не уверен в этом! И еще, мне нужно сохранить результаты построения графика в DB.

попробуйте fig.to_html()

Честно говоря, я даже не знаю, что такое AJAX. Поэтому я не использую AJAX, но мне все равно удается отобразить весь интерактивный график на моем "сайте".

Возможно, это даст вам некоторое руководство, и вы сможете разобраться с частью AJAX самостоятельно.

def _give_fig():
    data = # input your data here
    layout = # input your layout here
    fig = go.Figure(data=data, layout=layout)  # build your figure with data and layout
    fig.update_layout(template='simple_white')  # modify your fig until ready
return fig.to_html(config={'displaylogo': False}, include_plotlyjs=False, default_width=790, default_height=600)

# returns chart as html
# displaylogo False to hide the plotly logo in chart
# default width and hight self explanatory
# include_plotlyjs --> important!


def your_view(request):
    context = {"your_plot": _give_fig()}
    return render(request, 'app/your_template.html', context)

Читайте больше о include_plotlyjs здесь. Вы можете установить его в True, и тогда он будет напрямую включать javascript. По-моему, он занимает около 3 мб. Я лично использую CDN. Так что взгляните на мой шаблон:

your_template.html:

{% extends 'base.html' %}

{% block styles %}
  <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
{% endblock %}

{% block content %}
{% autoescape off %}
{{ your_plot }}
{% endautoescape %}
{% endblock %}

Да, это работает без AJAX. Удачи вам в попытках его применить.

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