使用Python从Plotly获取<script>和<div>标签

时间:2016-06-07 15:12:24

标签: python html plotly

我想知道是否有人知道一个好方法(最好是内置方法,但我当然愿意写自己的方法)来获取&lt; script&gt; &lt来自Plotly离线客户端HTML输出的; div&gt; 标签。

&#xA;&#xA;

我已经熟悉散景并非常喜欢将其用于2D可视化,但是我真的很想整合Plotly的3D可视化功能。

&#xA;&#xA;

如果您需要有关该项目的任何其他详细信息,请与我们联系。

&#xA;

3 个答案:

答案 0 :(得分:17)

如果你打电话:

plotly.offline.plot(data, filename='file.html')

它会创建一个名为file.html的文件,并在您的网络浏览器中将其打开。但是,如果你这样做:

plotly.offline.plot(data, include_plotlyjs=False, output_type='div')

调用将返回一个字符串,其中只包含创建图表所需的div,您可以将其存储在您想要的任何变量中(而不是存储在磁盘中)。

我刚刚尝试了它并且它返回了,对于我正在做的给定图表:

<div id="82072c0d-ba8d-4e86-b000-0892be065ca8" style="height: 100%; width: 100%;" class="plotly-graph-div"></div>
<script type="text/javascript">window.PLOTLYENV=window.PLOTLYENV || {};window.PLOTLYENV.BASE_URL="https://plot.ly";Plotly.newPlot("82072c0d-ba8d-4e86-b000-0892be065ca8", 
[{"y": ..bunch of data..., "x": ..lots of data.., {"showlegend": true, "title": "the title", "xaxis": {"zeroline": true, "showline": true}, 
"yaxis": {"zeroline": true, "showline": true, "range": [0, 22.63852380952382]}}, {"linkText": "Export to plot.ly", "showLink": true})</script>

请注意,它只是你应该嵌入更大页面的html的一小部分。为此,我使用像Jinga2这样的标准模板引擎。

有了这个,您可以创建一个html页面,其中包含按您想要的方式排列的多个图表,甚至可以将其作为服务器响应ajax调用返回,非常可爱。

<强>更新

请记住,您需要包含所有这些图表的plotly js文件才能工作。

你可以在放入div之前加入<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>。如果你将这个js放在页面的底部,那么图表就不会起作用。

答案 1 :(得分:2)

道歉的回答很想向留下的费明·席尔瓦(https://stackoverflow.com/a/38033016/2805700)添加评论-但是长期以来的潜伏声誉阻碍了我。

无论如何,我也有类似的需求,并遇到了一个问题,即2.2.2情节

plotly.offline.plot(data, include_plotlyjs=False, output_type='div')

输出到div时,include_plotlyjs参数被忽略。根据上面的评论,我找到了一种解决方法。基本上让它以图形方式绘制到文件中,该文件确实遵守include_plotlyjs参数。装入漂亮的汤中,并在CDN上注入指向最新的plotly.js的链接。

import plotly
import bs4

# return as html fragment
# the include_plotlyjs argument seems to be 
# ignored as it's included regardless when outputting to div
# found an open issue on here - https://github.com/plotly/plotly.py/issues/1043
plotly.offline.plot(
    plot_output, 
    filename = filename,
    config = plot_config,
    include_plotlyjs = False,
    auto_open = False,
)

# load the file
with open(filename) as inf:
    txt = inf.read()
    soup = bs4.BeautifulSoup(txt)

# add in the latest plot-ly js as per https://stackoverflow.com/a/38033016/2805700
js_src = soup.new_tag("script", src="https://cdn.plot.ly/plotly-latest.min.js")
# insert it into the document
soup.head.insert(0, js_src)

# save the file again
with open(filename, "w") as outf:
    outf.write(str(soup))

欢呼

答案 2 :(得分:1)

对于Plotly 4,请使用x[i:i+N]

plotly.io.to_html

参考:https://plotly.com/python-api-reference/generated/plotly.io.to_html.html