我试图制作一个正方形图(使用imshow),即宽高比为1:1,但我不能。这些都不起作用:
import matplotlib.pyplot as plt
ax = fig.add_subplot(111,aspect='equal')
ax = fig.add_subplot(111,aspect=1.0)
ax.set_aspect('equal')
plt.axes().set_aspect('equal')
看起来这些调用只是被忽略了(我在使用matplotlib时经常遇到这个问题)。
我试图制作一个正方形图(使用imshow),即宽高比为1:1,但我不能。这些都不起作用:
import matplotlib.pyplot as plt
ax = fig.add_subplot(111,aspect='equal')
ax = fig.add_subplot(111,aspect=1.0)
ax.set_aspect('equal')
plt.axes().set_aspect('equal')
看起来这些调用只是被忽略了(我在使用matplotlib时经常遇到这个问题)。
7条答案
按热度按时间tv6aics11#
一个简单的选项,使用plt.gca()获取当前轴并设置方位角
代替你的最后一句
r6vfmomb2#
第三次的魅力。我的猜测是,这是一个错误和Zhenya的答案表明,它是固定的最新版本。我有版本0.99.1.1和我已经创建了以下解决方案:
这是'force.png':
下面是我的失败,但希望信息的尝试。
我下面的“原始答案”是矫枉过正的,因为它做了类似于
axes.set_aspect()
的事情。我认为你想使用axes.set_aspect('auto')
。我不明白为什么会这样,但它为我生成了一个正方形图像图,例如这个脚本:生成具有“相等”宽高比
和“自动”宽高比
的图像图
下面在“原始答案”中提供的代码为显式控制的长宽比提供了一个起点,但一旦调用imshow,它似乎就被忽略了。
原始答案:
下面是一个例程的示例,该例程将调整子图参数,以便您获得所需的纵横比:
这将产生如下图形:
我可以想象,如果你在图中有多个子图,你会想包括y和x子图的数量作为关键字参数(默认为1)提供的例程。然后使用这些数字和
hspace
和wspace
关键字,你可以使所有的子图都有正确的长宽比。xggvc2p63#
你运行的
matplotlib
版本是什么?我最近不得不升级到1.1.0
,有了它,add_subplot(111,aspect='equal')
对我来说很好用。0lvr5msh4#
经过多年的成功与上述答案,我发现这不工作了-但我确实找到了一个工作的解决方案,为子情节在
https://jdhao.github.io/2017/06/03/change-aspect-ratio-in-mpl
当然,完全归功于上面的作者(他可能更愿意在这里发帖),相关的行是:
该链接还清晰地解释了matplotlib使用的不同坐标系。
感谢所有伟大的回答收到-特别是@扬的,这将仍然是赢家。
twh00eeo5#
在我的情况下,以下设置效果最好:
其中(16,9)是您的地块纵横比。
jtw3ybtb6#
你应该尝试使用figaspect。它对我很有效。从文档:
创建一个具有指定长宽比的图形。如果 arg 是一个数字,则使用该长宽比。>如果 arg 是一个数组,则figaspect将确定一个图形的宽度和高度,该图形将适合保留长宽比的数组。返回图形的宽度和高度(以英寸为单位)。确保创建一个具有等于和高度的轴,例如
示例用法:
编辑:我不确定你在找什么。上面的代码改变了画布(图的大小)。如果你想改变matplotlib窗口的大小,图的大小,那么用途:
这确实产生了5 × 1(wxh)的窗口。
u7up0aaq7#
这个答案是基于Yann的答案。它将设置线性或对数-对数图的纵横比。我已经使用了https://stackoverflow.com/a/16290035/2966723的附加信息来测试轴是否是对数标度。
显然,你可以使用任何你想要的
log
版本,我用过scipy
,但numpy
或math
应该没问题。