如何将python图直接输出到html网页中

新手上路,请多包涵

我正在使用 pandas 和 numpy 等不同的库来生成数据框,最终生成一个图形。

现在,我需要将此图显示到一个简单的 HTML 网页中。

注意:我也愿意在 HTML 页面中从用户那里获取 2-3 个输入,然后将该数据传递到我的 python 文件。之后,python 文件根据给定的数据(来自 HTML 页面)生成一个图形,我需要将该图形传递给 HTML 页面。

 df[[main_data]].plot()

这里,main_data 是变量,其值来自 HTML 页面。我正在 SPYDER 中编写 python 代码。 而且我没有使用任何框架。

原文由 Jay Desai 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

这在某种程度上取决于您将图形显示为 html 的意思。我可以看到几种方法,第一种也是最简单的方法是将图形保存为 PNG,然后在 html 中提供文件的路径:

蟒蛇代码:

 import pandas as pd
import matplotlib.pyplot as plt

s = pd.Series([1, 2, 3])
fig, ax = plt.subplots()
s.plot.bar()
fig.savefig('my_plot.png')

HTML:

 <img src='my_plot.png'/>

第二种方法是将图形编码为 base64。这具有可移植性的优点,以及制作非常笨重的 html 文件的缺点。我不是网络程序员,所以可能还有其他我不知道的注意事项。

Python:

 import io
import base64

def fig_to_base64(fig):
    img = io.BytesIO()
    fig.savefig(img, format='png',
                bbox_inches='tight')
    img.seek(0)

    return base64.b64encode(img.getvalue())

encoded = fig_to_base64(fig)
my_html = '<img src="data:image/png;base64, {}">'.format(encoded.decode('utf-8'))

my_html 可以传递给你的html文件,或者你可以用jinja2或你使用的任何东西注入它。这是关于在 html https://stackoverflow.com/a/8499716/3639023 中查看 base64 并将图像编码为 base64 如何将 PIL Image.image 对象转换为 base64 字符串的 SO 帖子?

原文由 johnchase 发布,翻译遵循 CC BY-SA 4.0 许可协议

将 matplotlib 图表导出到 Web 浏览器的最佳方法是使用 mpld3 库。 这是例子。

 import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import mpld3
from mpld3 import plugins
np.random.seed(9615)

# generate df
N = 100
df = pd.DataFrame((.1 * (np.random.random((N, 5)) - .5)).cumsum(0),
                  columns=['a', 'b', 'c', 'd', 'e'],)

# plot line + confidence interval
fig, ax = plt.subplots()
ax.grid(True, alpha=0.3)

for key, val in df.iteritems():
    l, = ax.plot(val.index, val.values, label=key)
    ax.fill_between(val.index,
                    val.values * .5, val.values * 1.5,
                    color=l.get_color(), alpha=.4)

# define interactive legend

handles, labels = ax.get_legend_handles_labels() # return lines and labels
interactive_legend = plugins.InteractiveLegendPlugin(zip(handles,
                                                         ax.collections),
                                                     labels,
                                                     alpha_unsel=0.5,
                                                     alpha_over=1.5,
                                                     start_visible=True)
plugins.connect(fig, interactive_legend)

ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_title('Interactive legend', size=20)

mpld3.show()

https://mpld3.github.io/quickstart.html

原文由 Noor Ameen 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题