我进行数值模拟并且我的图表有问题...我的模拟区域为6x35µm
,分辨率为640x1024px
。
当我想使用imshow
绘制我的模拟数据,并设置纵横比:aspect=6/35
时,那么绘图的高度是正确的,但它要长得多吗?我做错了什么?
图片中:
top
:模拟蒙版,所有绘图都应具有相同的宽高比。
middle
:aspect设置为手动设置为模拟蒙版的方面(6/35)
bottom
:aspect设置为1
这是我的代码
fig = pl.figure(num=None, figsize=(10, 10))
ax = fig.add_subplot(1,1,1)
img = ax.imshow(data, aspect=6./35)
答案 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')
答案 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)