django 有没有一种方法可以在后端服务器上绘制一个图表,并将交互式结果发送到一个Web应用程序上?

new9mtju  于 2023-01-31  发布在  Go
关注(0)|答案(1)|浏览(86)

所以,我实际上是在后台进行所有的计算,生成一个.png格式的图表,将其保存到一个路径文件中,并通过 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。我有一些提示:
1.在我的Webapp中直接用JS生成绘图,所以后端只发送来自yfinance的数据和一个生成它的指令。(相当复杂,尤其是我有各种类型的绘图,它们都是用python生成的,所以Webapp此时只接收图像,而不区分它们)。
1.创建一个指向绘图输出端口的iframe,但不确定这个!另外,我需要将绘图结果保存在数据库中。
只是澄清一下:

#in the previous example:
fig.view()
# will be very different from 
fig.write_image()

#One will be a png file, the other a pretty cool interactive chart.
8oomwypt

8oomwypt1#

试试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_plotlyjshere的信息。你可以把它设置为True,然后它会直接包含javascript。我想它大约是3mb。我个人使用CDN。所以看看我的模板:
您的模板.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 也能用。祝你好运。

相关问题