如何在HTML页面(Python-CGI)中嵌入Matplotlib堆叠图?
解决Python-CGI中Matplotlib堆叠图嵌入HTML的问题
我来帮你排查下问题,你的代码里有几个关键问题导致图表无法正常嵌入页面,咱们一步步修正:
问题分析&修正点
- 语法错误:
figsize= . (16,18)里多了个多余的点,正确写法是figsize=(16,18) - 对象类型错误:
mpld3.fig_to_html()需要接收Matplotlib的Figure对象,但你传入的grap是pandas返回的Axes实例,得换成当前的Figure对象(比如plt.gcf()或者grap.figure) - 未输出图表HTML:你调用了
mpld3.fig_to_html()但没有把生成的HTML代码打印出来,这样页面里不会显示图表 - CGI环境后端设置:CGI运行环境没有GUI,需要指定Matplotlib使用非交互式后端
Agg,否则会报错 - 重复导入:代码里重复导入了
matplotlib.pyplot as plt,可以删除冗余的那一行
修正后的完整代码
#!/usr/bin/python print "Content-type:text/html\r\n\r\n" print '<html>' print '<head>' print '<title>Hello Word - First CGI Program</title>' print '</head>' print '<body>' # 导入依赖并设置后端 import matplotlib.pyplot as plt plt.switch_backend('Agg') # CGI环境必须设置非交互式后端 import numpy as np import pandas as pd import mpld3 # 数据准备 data = {'title1': {'SA':20, 'TA':10}, 'title2':{'FA':10, 'MA':20, 'NA':30}} # 修复figsize的语法错误,获取Axes对象 grap = pd.DataFrame(data).T.plot(kind='bar', stacked=True, figsize=(16,18)) # 获取Figure对象并转为HTML,然后打印输出 chart_html = mpld3.fig_to_html(grap.figure) print chart_html print '</body>' print '</html>'
额外注意事项
- 确保你的Web服务器已经配置好支持Python CGI(比如Apache需要开启mod_cgi,设置好CGI目录)
- 确认服务器上的Python环境已经安装了所有依赖包:
pip install matplotlib pandas mpld3 numpy - 如果还是有权限问题,检查CGI脚本的执行权限(需要设置为
chmod +x your_script.py)
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

