给定一个500x500像素的图像,我想在屏幕上以1:1的比例显示该图像。另外,我想有一个x和y轴。
plt.imshow()
自动将轴添加到我的图像并在窗口中将图像居中,但是图像已缩放并且在屏幕上未显示为500x500像素。fig.figimage()
在我的屏幕上显示1:1的图像,但不添加轴,并且在窗口的左下角显示图像。特别是最大化窗口/调整窗口大小不会改变图像的大小。现在,我需要两者的结合–像1:1那样显示图像fig.figshow
,添加相加的轴plt.imshow()
并像中间那样显示图像plt.imshow()
。
我怎样才能做到这一点?或换句话说:如何分辨plt.imshow()
显示未缩放的图像fig.figimage()
?
演示此问题的示例代码:
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像素,与窗口大小无关
您将需要自己做一点计算。假设您要在所有面上留出50像素的边距,并且dpi为100,然后可以将图形尺寸计算为figsize=((width+2*margin)/dpi, (height+2*margin)/dpi)
英寸。然后,您需要计算边界,例如,左边的边界将由边距除以dpi除以图形宽度。您可以为图形设置计算出的图形尺寸(的figsize
参数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()
请注意,要获得具有widthwidth
和height尺寸的图像height
,您需要一个数组np.zeros((height, width))
,而不是逆数组。
为了确保图形保持其原始大小,可以添加以下代码,以便在每次更改图形大小时将图形重新调整为原始大小:
def update(event=None):
fig.set_size_inches(figsize)
update()
ci = fig.canvas.mpl_connect("resize_event", update)
plt.show()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句