ste*_*wpf 11 python matplotlib
给定 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()
Run Code Online (Sandbox Code Playgroud)
结果:
使用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()
Run Code Online (Sandbox Code Playgroud)
width请注意,要获得尺寸为 width和 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()
Run Code Online (Sandbox Code Playgroud)