简答
你可能想打电话:
ax.imshow(..., aspect='auto')
默认情况下,imshow会在调用轴时将轴的纵横比设置为1.这将覆盖您在创建轴时指定的任何方面.
但是,这是matplotlib中常见的混淆源.让我备份并详细解释正在发生的事情.
Matplotlib的布局模型
matplotlib中的aspect是指数据坐标中xscale和yscale的比率.它不直接控制轴的宽度和高度的比率.
有三件事可以控制matplotlib轴的“外框”的大小和形状:
>图的大小/形状(下图中以红色显示)
>图坐标中轴的指定范围(例如子图位置,如下图中的绿色所示)
> Axes用于适应固定宽高比(可调参数)的机制.
换句话说,轴总是放在图形坐标中,它们的形状/大小始终是图形的形状/大小的比例. (注意:诸如axes_grid之类的东西会在绘制时改变它以绕过这个限制.)
但是,给定轴的范围(从其子图位置或显式设置范围)不一定是它将占用的大小.根据方面和可调参数,轴将在给定范围内缩小.
为了理解一切如何相互作用,让我们在很多不同的情况下绘制一个圆圈.
没有固定方面
在基本情况下(没有为轴设置固定的纵横比),轴将填充图形坐标中分配给它的整个空间(由绿色框显示).
x和y刻度(由方面设置)可以独立更改,扭曲圆圈:
当我们调整图形的大小(交互式或图形创建)时,轴将“挤压”它:
固定纵横比,可调=’框’
但是,如果设置了绘图的纵横比(默认情况下,imshow将强制纵横比为