我有一系列代表空间物理区域的图像,即它们是物体的图像。它们没有均匀数量的像素,但在每种情况下,沿y轴的分辨率对于每个图像都是相同的,并且沿x轴的长度是相同的(具体地说:像素总是在150微米之间) y维度和图像在x维度上始终为11mm。
我想生成一系列图,其大小准确反映了对象相对于彼此的空间大小,因此具有更多行的图像对应于在空间上的y维度更大,但每个无论该维度中有多少像素,图像在x维度上的大小都相同(因为x中的分辨率不是常数)。
为此,我的脚本以空间单位计算x和y尺寸(例如,11mm x 4.2 mm或11 mm x 4.5 mm),然后使用{{1}强制plt.imshow
中的纵横比设置为y轴大小与x轴大小的比率。
由于某种原因,这不起作用。此外,设置图形大小不起作用。这是我的代码和图片:
对于垫子中的f: #将文件名与扩展名分开 name,ext = os.path.splitext(f)
aspect
在我看来,这应该可行,并且我已经验证此脚本正确计算每个图像的空间尺寸,以及每个图像应具有的纵横比。我应该指出,第三幅图像在x方向上是110像素,而其他两幅图像只有55.
此外,如果有人就如何更有力地放置蜱虫提出建议,那将是非常好听的。
答案 0 :(得分:4)
至少有一种相当强大的方法是使用extent
关键字进行图像缩放。
ax.imshow(image, extent=[0, 10.4, 0, 4.2], aspect=1)
这应该可以处理您需要的一切。 (当然,将10.4和4.2改为任何物理尺寸)。应该注意的是,在这种情况下,aspect=1
不一定是正方形像素,而是强制两个轴上的单位在规模上相等 - 这似乎是你想要的。
就像一个小例子:
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111)
ax.imshow(np.random.random((20, 20)), extent=(0, 10.5, 2, 4.7), aspect=1, interpolation='nearest')
这给出了: