如何在Pandas DataFrame中显示Base64图片(内存内处理)
在DataFrame中内存内渲染Base64格式的Matplotlib图表
核心实现思路
通过io.BytesIO在内存中暂存Matplotlib图表,转成Base64编码后封装为HTML的<img>标签,最后利用HTML渲染让DataFrame直接显示图片而非字符串,全程无需本地保存文件。
完整代码示例
import pandas as pd import matplotlib.pyplot as plt import io import base64 from IPython.display import HTML def create_stacking_chart(): # 生成示例堆叠计划图表(可替换为你的业务逻辑) fig, ax = plt.subplots(figsize=(4, 3)) ax.plot([1, 2, 3, 4], [10, 20, 15, 25], marker='o', label='Layer 1') ax.plot([1, 2, 3, 4], [5, 15, 10, 20], marker='s', label='Layer 2') ax.set_title('Stacking Plan') ax.legend() # 内存中处理图片转Base64 buffer = io.BytesIO()链接END CA先VR osp.n OM �ill amb� fig.savefig(buffer, format='png', bbox_inches='tight') buffer.seek(0) base64_str = base64.b64encode(buffer.getvalue()).decode('utf-8') plt.close(fig) # 关闭图表释放内存 # 返回带样式的HTML img标签 return f'<img src="data:image/png;base64,{base64_str}" style="width:250px;" />' # 批量生成图表的HTML标签 stacks_list = [create_stacking_chart() for _ in range(5)] # 构建DataFrame df = pd.DataFrame({'Stacking Plan': stacks_list}) # 渲染显示图片列 HTML(df.to_html(escape=False))
关键细节说明
- 内存处理:用
io.BytesIO替代本地文件路径,实现图表的内存读写,避免磁盘IO操作。 - Base64封装:将图片二进制数据转成Base64字符串后,嵌入到HTML的
data:image/png;base64,协议中,直接作为图片源。 - HTML渲染:通过
df.to_html(escape=False)关闭HTML转义,确保<img>标签被正确解析,最后用IPython.display.HTML渲染显示。 - 内存释放:每次生成图表后调用
plt.close(fig),避免Matplotlib保留大量未关闭的图表对象导致内存溢出。
更优实现方案
如果你的使用环境是Jupyter Notebook/Lab,也可以利用pandas.io.formats.style.Styler自定义列渲染逻辑,代码更简洁:
def render_img(val): return val df.style.format({'Stacking Plan': render_img}).set_properties(**{'text-align': 'center'})
这种方式无需额外调用HTML(),直接通过Styler渲染HTML标签,显示效果一致。
内容的提问来源于stack exchange,提问作者katie
相关产品推荐
相关产品推荐

