Imshow方面效果不佳

时间:2014-04-10 12:16:15

标签: python matplotlib aspect-ratio imshow

我进行数值模拟并且我的图表有问题...我的模拟区域为6x35µm,分辨率为640x1024px。 当我想使用imshow绘制我的模拟数据,并设置纵横比:aspect=6/35时,那么绘图的高度是正确的,但它要长得多吗?我做错了什么?

图片中:

top:模拟蒙版,所有绘图都应具有相同的宽高比。

middle:aspect设置为手动设置为模拟蒙版的方面(6/35)

bottom:aspect设置为1

enter image description here

这是我的代码

fig = pl.figure(num=None, figsize=(10, 10))
ax = fig.add_subplot(1,1,1)
img = ax.imshow(data, aspect=6./35)

3 个答案:

答案 0 :(得分:3)

您还需要考虑两个轴的分辨率差异。对于y轴,您有640个数据点,6微米,x轴,1024个数据点,35微米。 Matplotlib假设两者都是平等的。

data = np.random.rand(640,1024)

fig, axs = plt.subplots(2,1, figsize=(10, 4))

aspect = 6 / 35

axs[0].set_title('aspect: %1.2f' % aspect)
axs[0].imshow(data, aspect=aspect, interpolation='none')

aspect = (6/35.) * (1024 / 640)

axs[1].set_title('aspect: %1.2f' % aspect)
axs[1].imshow(data, aspect=aspect, interpolation='none')

enter image description here

答案 1 :(得分:0)

您需要做的是:

img = ax.imshow(data, aspect = 6/35.)

或换句话说,制作分母的浮点数。 6/35等于零。 6/35.不是。

希望有所帮助

答案 2 :(得分:0)

我在论坛中找到了答案...... How can I set the aspect ratio in matplotlib?

def forceAspect(ax,aspect=1):
    im = ax.get_images()
    extent =  im[0].get_extent()
    ax.set_aspect(abs((extent[1]-extent[0])/(extent[3]-extent[2]))/aspect)