用python绘制图形并用HTML显示

2024-05-29 08:18:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用plotly构建一个离线应用程序来显示图形。我在后端使用python(flask),前端使用HTML(javascript)。目前,我可以通过将图形数据作为JSON对象发送到前端并在前端使用plotly.js构建图形来绘制图形。但我真正想要的是在服务器端(后端ie python)构建图表,然后用HTML显示数据。我已经看过了用python构建图形的绘图文档,但是我不知道如何将构建图形发送到前端进行显示:( 有人能帮我吗? PS:我想构建一个离线应用程序 更新的代码

$(window).resize(function() {
         var divheight = $("#section").height();
         var divwidth = $("#section").width();
         var update = {
                  width:divwidth,  // or any new width
                  height:divheight // " "
                };

          var arr = $('#section > div').get();
          alert(arr[1]);
        Plotly.relayout(arr[0], update);
            }).resize();
         });

Tags: 数据应用程序图形varhtmlupdatesectionplotly
1条回答
网友
1楼 · 发布于 2024-05-29 08:18:08

我的建议是使用plotly.offline模块,它为您创建一个离线版本的绘图。他们网站上绘声绘色的API是可怕的(我们实际上不想知道每个函数采用什么参数,是不是??),所以最好转向Github上的源代码。

如果您查看了绘图源代码,您可以看到offline.plot函数对output_type采用了kwarg,即'file''div'

https://github.com/plotly/plotly.py/blob/master/plotly/offline/offline.py

所以你可以:

from plotly.offline import plot
from plotly.graph_objs import Scatter

my_plot_div = plot([Scatter(x=[1, 2, 3], y=[3, 1, 6])], output_type='div')

这将为您提供直接插入HTML的代码(包装在<div>标记中)。也许不是最有效的解决方案(因为我很确定它也嵌入了相关的d3代码,这些代码可能只是为了重复请求而缓存的),但是它是自包含的。

要使用Flask将div插入到html代码中,需要做一些事情。

在结果页的html模板文件中,为绘图代码创建一个占位符。Flask使用Jinja模板引擎,因此看起来像:

<body>
....some html...

{{ div_placeholder }}

...more html...
</body>

在Flask views.py文件中,需要使用插入到div_placeholder变量中的绘图代码呈现模板:

from plotly.offline import plot
from plotly.graph_objs import Scatter
from flask import Markup
...other imports....

@app.route('/results', methods=['GET', 'POST'])
def results():
    error = None
    if request.method == 'POST':
        my_plot_div = plot([Scatter(x=[1, 2, 3], y=[3, 1, 6])], output_type='div')
        return render_template('results.html',
                               div_placeholder=Markup(my_plot_div)
                              )
    # If user tries to get to page directly, redirect to submission page
    elif request.method == "GET":
        return redirect(url_for('submission', error=error))

显然是YMMV,但这应该说明基本原则。请注意,您可能会收到一个用户请求,使用POST数据创建绘图仪时需要处理这些数据。

相关问题 更多 >

    热门问题