Есть ли способ построить график 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. У меня есть несколько подсказок:
- Генерировать график в моем Webapp непосредственно в JS, так что бэкенд отправляет только данные из yfinance и директиву для его генерации. (Довольно сложно, особенно зная, что у меня есть различные типы графиков, которые все генерируются в python, поэтому Webappp получает только Images в это время, не дифференцируя их).
- Создать 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. Удачи вам в попытках его применить.