如何在Databricks中保存并加载Seaborn jointplot以用于子图?
解决Databricks中Seaborn JointPlot保存后加载为子图的问题
错误原因
你遇到的Jointgrid does not have an attribute imread错误,是因为误将Seaborn返回的JointGrid对象(即代码中的fig)当成了matplotlib.pyplot模块调用imread方法。imread是matplotlib.pyplot的内置方法,并非JointGrid对象的属性。
解决步骤
1. 正确保存JointPlot到DBFS
Seaborn的jointplot返回的JointGrid对象自带savefig方法,直接使用该方法将图像保存到DBFS,注意路径要使用/dbfs/前缀的本地格式(Databricks Python环境支持通过该路径直接访问DBFS):
import seaborn as sns import matplotlib.pyplot as plt # 生成JointPlot fig = sns.jointplot(x=[1,2,3,4], y=[4,3,2,1]) # 保存到DBFS指定路径 save_path = '/dbfs/tmp/jointplot_demo.png' fig.savefig(save_path, dpi=100, bbox_inches='tight') # dpi和bbox_inches可选,优化图像显示 plt.close(fig) # 关闭图像释放内存
2. 加载图像并绘制子图
使用matplotlib.pyplot.imread加载保存的图像,再通过子图对象的imshow方法显示:
import matplotlib.pyplot as plt # 从DBFS加载图像 img = plt.imread('/dbfs/tmp/jointplot_demo.png') # 创建子图并加载图像 fig, ax = plt.subplots(figsize=(8, 6)) ax.imshow(img) ax.axis('off') # 可选,隐藏坐标轴让图像更整洁 # 在Databricks中显示最终子图 display(fig)
注意事项
- 访问DBFS时必须使用
/dbfs/前缀,不能直接用dbfs:/格式,否则matplotlib无法识别路径。 - 保存图像后建议调用
plt.close(fig)释放内存,避免Databricks环境中出现内存占用过高的问题。
内容的提问来源于stack exchange,提问作者hellyeah
相关产品推荐
相关产品推荐

