使用Seaborn与Matplotlib为CVGA散点图添加背景图显示异常如何解决
问题根源
显示异常有两个核心原因:
ax.imshow()默认使用图片的像素坐标作为绘图坐标轴范围,会直接覆盖之前设置的xlim和ylim,导致散点坐标和背景坐标完全不匹配- 未设置背景图的显示比例和层级,导致图片变形、遮挡散点
解决方案
调整imshow的参数,让背景图完全适配你指定的坐标轴范围,修改后代码如下:
import matplotlib.pyplot as plt import seaborn as sns img = plt.imread('CVGA.png') fig, ax = plt.subplots(figsize = (12,6)) sns.scatterplot( data=min_max_day, x=min_max_day['Glucose Value (mg/dL)']['amin'], y=min_max_day['Glucose Value (mg/dL)']['amax'], zorder=2 ) # 先设置你需要的坐标轴范围 plt.xlim(110,40) plt.ylim(110,400) # 插入适配坐标轴的背景图 ax.imshow( img, # extent参数格式为[坐标轴左端点x值, 坐标轴右端点x值, 坐标轴底端y值, 坐标轴顶端y值],和上面设置的lim完全对应 extent=[110, 40, 110, 400], aspect='auto', # 自动适配坐标轴比例,避免图片拉伸变形 zorder=1 # 确保背景在散点图层下方 ) plt.show()
补充优化建议
如果需要保证背景图内的网格为正方形(即x、y轴每1mg/dL的显示长度一致,网格和血糖值对应关系更准确),可做如下调整:
- 将
aspect参数值改为1 - 按x、y轴的数值范围比例调整
figsize:你的x轴数值跨度为70(40110),y轴数值跨度为290(110400),因此figsize可设置为等比例的(7, 29)或缩放后的(5, 20.7)即可。
内容的提问来源于stack exchange,提问作者walker967
相关产品推荐
相关产品推荐

