如何在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
相关产品推荐
相关产品推荐

