You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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>'

额外注意事项

  1. 确保你的Web服务器已经配置好支持Python CGI(比如Apache需要开启mod_cgi,设置好CGI目录)
  2. 确认服务器上的Python环境已经安装了所有依赖包:pip install matplotlib pandas mpld3 numpy
  3. 如果还是有权限问题,检查CGI脚本的执行权限(需要设置为chmod +x your_script.py)

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:45:58