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

如何在Python中保存Plotly图表并嵌入HTML邮件发送(含x轴旋转)

解决方案:将Matplotlib图表嵌入HTML邮件(非附件)

核心问题分析

你遇到的空白/显示错误,本质是没有将图表转为HTML可直接解析的Base64格式,或是保存时丢失了图表渲染信息(比如旋转的x轴标签被截断),导致邮件客户端无法正确加载图表。


步骤1:将图表转为Base64编码(关键)

不要将图表保存为本地文件,而是用内存流直接转为Base64字符串,这样可以直接嵌入HTML的img标签中,无需依赖外部文件。

步骤2:确保x轴旋转效果正常渲染

添加plt.tight_layout()避免旋转后的x轴标签被截断,且必须在保存图表前完成所有绘图配置。

步骤3:构建可嵌入的HTML内容

用Data URI格式将Base64字符串嵌入img标签,邮件客户端可直接解析显示。


完整代码示例

import pandas as pd
import matplotlib.pyplot as plt
import io
import base64

# 假设你的DataFrame已定义
df = pd.DataFrame({'example_1': [1,2,3,4,5], 'example_2': [12,25,18,30,22]})

# 绘图配置
fig = plt.figure()
plt.plot(df['example_1'], df['example_2'])
plt.xticks(rotation=45)
plt.tight_layout()  # 防止x轴标签被截断

# 将图表转为Base64编码
buf = io.BytesIO()
plt.savefig(buf, format='png', dpi=100)  # dpi控制图表清晰度
buf.seek(0)
img_base64 = base64.b64encode(buf.getvalue()).decode('utf-8')
plt.close(fig)  # 释放内存资源

# 构建HTML邮件内容
html_content = f"""
<html>
    <body>
        <h3>示例趋势图表</h3>
        <img src="data:image/png;base64,{img_base64}" alt="Example Trend Chart" style="max-width: 100%;">
    </body>
</html>
"""

# 后续可将html_content用于邮件发送(需配合smtplib、email库设置邮件为HTML格式)

额外注意事项

  • 若使用Seaborn、Plotly等其他绘图库,核心逻辑一致:将图表转为图片流后编码为Base64。
  • 发送邮件时需将邮件的Content-Type设置为text/html,确保客户端识别HTML内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:01:05