如何设置imshow规模

时间:2014-09-21 15:27:01

标签: python matplotlib

我厌倦了使用matplotlib,因为在指定尺寸下绘制图像非常困难。

我有两张32 * 32,20 * 20尺寸的图像。我只想将它们绘制成原始大小,或者与原始大小成比例。

在SO阅读了不少帖子后,我现在使用的代码是

plt.autoscale(False)
plt.subplot(1, 2, 1); 
plt.imshow(img_blob[0, 0, :, :], cmap='gray',
           interpolation='nearest', extent=[0, 32, 0, 32])
plt.subplot(1, 2, 2); 
plt.imshow(output_blob[0, 0, :, :], cmap='gray',
           interpolation='nearest', extent=[0, 20, 0, 20])
plt.show()

但这两张图片仍然以相同的尺寸显示。

enter image description here

我尝试过figsize

plt.subplot(1, 2, 2, figsize=(2.0, 2.0)); 

但显然没有figsize属性。

是否可以制作不同大小的两个子图?

2 个答案:

答案 0 :(得分:1)

您可以使用GridSpec执行不同大小的绘图。 由于GridSpec需要从原始图形矩形创建大小相等的网格单元格,因此您必须自己计算比例,然后指定单元格跨度以填充正确的空间。

对于您的具体示例:

import matplotlib.pyplot as plt
ax1 = plt.subplot2grid((3,6), (0,0), colspan=3, rowspan=3)
ax2 = plt.subplot2grid((3,6), (0,3), colspan=2, rowspan=2)

如果你现在使用ax1和ax2绘图,它应该保持相对宽高比正确(给出正确的图形大小)。不过,应该可以编写一种自动执行这些计算的方法。

答案 1 :(得分:1)

如果图像比例非常重要,还可以使用imshow的替代方法......有一些名为figimage的内容会向您的图形显示完全未重新采样的图像。使用它有点苦心 - 它在幕后并没有太多让你的生活更轻松 - 但它对某些情况很有用。以下是使用您的示例

的内容
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0,1,20)
z1 = x[:,np.newaxis] * x
y = np.linspace(0,1,32)
z2 = y[:,np.newaxis] * y

fig = plt.figure(figsize=(2,1))
plt.figimage(z1, 25, 25, cmap='gray') # X, Y offsets are in pixels
plt.figimage(z2, 75, 25, cmap='gray')

plt.show()