鉴于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像素,实际尺寸取决于窗口的大小。
使用fig.figimage()
:恰好500x500像素,与窗口大小无关
答案 0 :(得分:1)
您需要自己做一些计算。
比如,你想要所有边上都有50像素边距,并且你的dpi为100,那么你可以计算出数字大小为figsize=((width+2*margin)/dpi, (height+2*margin)/dpi)
英寸。然后,您需要计算边框,例如左边界将是边距除以dpi除以图宽度。您可以将计算出的数字大小(figsize
的{{1}}参数)和边框(使用plt.figure()
)设置为您的数字。
subplots_adjust
请注意,要获得尺寸宽度为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))