如何强制Matplotlib缩放图像?解决长条形图像显示挤压问题
解决Python Notebook中长条形图像显示挤压的问题
嘿,我完全懂你这个困扰——这种高度远大于宽度的长条形图像,默认设置下确实会被挤得不成样子,哪怕调大figsize也没用。咱们来搞定它:
问题根源
你设置的figsize=(20,20)是正方形画布,但你的图像是[714,180](高度714,宽度180),而plt.imshow()默认的aspect='equal'参数会强制每个像素的宽高比例一致,这就导致图像在正方形画布上被横向压缩,看起来特别窄。
两种有效解决方案
1. 匹配图像比例设置画布尺寸 + 自适应像素比例
先计算图像的真实宽高比(宽度/高度),然后按照这个比例设置figsize,再把imshow的aspect设为'auto'让图像自适应画布:
evidence = hough_forests(edges) # 计算图像宽高比:列数(宽度)/ 行数(高度) aspect_ratio = evidence.shape[1] / evidence.shape[0] # 按比例设置画布,比如固定高度为20,宽度自动匹配比例 fig = plt.figure(figsize=(20 * aspect_ratio, 20)) # 设置aspect为auto,让图像自适应画布比例 plt.imshow(evidence, cmap="gray", aspect='auto') plt.show()
2. 固定像素比例,让画布自动适配
如果你想保持每个像素的真实比例,只需要把aspect设为图像的宽高比,画布尺寸可以按需调整:
evidence = hough_forests(edges) aspect_ratio = evidence.shape[1] / evidence.shape[0] fig = plt.figure(figsize=(8, 30)) # 这里可以根据显示需求调整画布大小 plt.imshow(evidence, cmap="gray", aspect=aspect_ratio) plt.show()
额外小技巧
如果已经创建了画布,也可以通过修改当前坐标轴的比例来调整:
plt.imshow(evidence, cmap="gray") plt.gca().set_aspect(aspect_ratio) # gca()获取当前坐标轴对象 plt.show()
这样调整后,你的长条形图像就能正常显示,不会再被挤压啦!
内容的提问来源于stack exchange,提问作者Kong
相关产品推荐
相关产品推荐

