显示图像而不缩放

时间:2017-06-03 16:17:49

标签: python matplotlib

鉴于500x500像素的图像,我想在屏幕上以1:1的形式显示该图像。另外我想要一个x和y轴。

  • plt.imshow()会自动将轴添加到我的图像中,并将图像置于窗口中心,但图像会缩放,而不会在屏幕上显示为500x500像素。
  • fig.figimage()在屏幕上以1:1显示图像,但不添加轴,并在窗口的左下角显示图像。特别是最大化窗口/调整窗口大小不会改变图像的大小。

现在我需要的是两者的组合 - 像fig.figshow一样覆盖图像1:1,添加plt.imshow()添加的轴并显示像plt.imshow()那样居中的图像。

我该怎么做? 或者换句话说:如何告诉plt.imshow()显示像fig.figimage()这样未缩放的im图像?

演示问题的示例代码:

import matplotlib.pyplot as plt
import numpy as np

width=500;
height=500;

# using plt.imshow()
dummyImage = np.zeros((width, height))
plt.imshow(dummyImage)
plt.show()

# using fig.figimage()
fig = plt.figure(figsize=(width, height))
fig.figimage(dummyImage)
plt.show()

结果:

使用plt.imshow():不完全是500x500像素,实际尺寸取决于窗口的大小。 enter image description here

使用fig.figimage():恰好500x500像素,与窗口大小无关

enter image description here

1 个答案:

答案 0 :(得分:1)

您需要自己做一些计算。 比如,你想要所有边上都有50像素边距,并且你的dpi为100,那么你可以计算出数字大小为figsize=((width+2*margin)/dpi, (height+2*margin)/dpi)英寸。然后,您需要计算边框,例如左边界将是边距除以dpi除以图宽度。您可以将计算出的数字大小(figsize的{​​{1}}参数)和边框(使用plt.figure())设置为您的数字。

subplots_adjust

enter image description here

请注意,要获得尺寸宽度为import matplotlib.pyplot as plt import numpy as np width=500 # pixels height=150 margin=50 # pixels dpi=100. # dots per inch figsize=((width+2*margin)/dpi, (height+2*margin)/dpi) # inches left = margin/dpi/figsize[0] #axes ratio bottom = margin/dpi/figsize[1] fig = plt.figure(figsize=figsize, dpi=dpi) fig.subplots_adjust(left=left, bottom=bottom, right=1.-left, top=1.-bottom) dummyImage = np.zeros((height, width)) plt.imshow(dummyImage) plt.show() 和高度为width的图像,您需要一个数组height,而不是反面。

为了确保图形保持原始尺寸,可以添加以下代码,每次尝试更改图形尺寸时,都会将图形调整为原始尺寸:

np.zeros((height, width))