使用Matplotlib显示mxn图像

时间:2018-01-30 21:34:10

标签: python image numpy matplotlib

我是Matplotlib的新手。我试图在一个子图中显示一个32x32(像素)的图像,下面有一些文字。我的要求是图像不应该自动缩放,因为它变得像素化,我不想要。这是我的代码:

import matplotlib.pyplot as plt
import matplotlib.image as mpt
import numpy as np
from PIL import Image
plt.rcParams['toolbar']='None'
image=plt.imread("Test.jpg")
figsize=350/80,300/80
fig=plt.figure(figsize=figsize)
plt.plot([1,2,3])
plt.subplot(211)
plt.imshow(image,cmap='gray',extent=(1,32,32,64))
plt.axis('off')
str_comp_thinks="Text1 "
plt.text(-20,20,str_comp_thinks)
str_actual="Text2 "
plt.text(-20,25,str_actual)
plt.show()

我尝试了几件事,但我无法将图像限制为原始尺寸。任何建议都会有所帮助。

2 个答案:

答案 0 :(得分:0)

您是否在imshow&中尝试了extent=(0,32,32,64) {{1}}?

答案 1 :(得分:0)

调整图形大小和子图参数

您可以调整图形尺寸和子图参数,使图中轴的剩余空间与所需的一样大。

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['toolbar']='None'
image=np.random.rand(32,32)
dpi = 100

mleft = 100  # pixel
mright = 100 #
mtop= 30 
mbottom=200

figwidth= (image.shape[1]+mleft+mright)/float(dpi)
figheight = (image.shape[0]+mtop+mbottom)/float(dpi)

fig=plt.figure(figsize=(figwidth,figheight))
fig.subplots_adjust(left=mleft/float(dpi)/figwidth,
                    right=1.-mright/float(dpi)/figwidth,
                    top=1.-mtop/float(dpi)/figheight,
                    bottom=mbottom/float(dpi)/figheight)

plt.imshow(image,cmap='gray')
plt.axis('off')
str_comp_thinks="Text1"
fig.text(0.5,0.3,str_comp_thinks, ha="center")
str_actual="Text2"
fig.text(0.5,0.1,str_actual, ha="center")
plt.show()

enter image description here

在轴内使用OffsetImage

使用轴内的OffsetImage可以实现相同的效果。

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.offsetbox import OffsetImage,AnnotationBbox


plt.rcParams['toolbar']='None'
image=np.random.rand(32,32)

fig, ax = plt.subplots(figsize=(2,2.5), dpi=100)
imagebox = OffsetImage(image, zoom=72./fig.dpi, cmap='gray')
imagebox.image.axes = ax

ab = AnnotationBbox(imagebox, xy=(0.5,.7), xycoords='data', bboxprops={"linewidth":0})

ax.add_artist(ab)

plt.axis('off')
str_comp_thinks="Text1"
fig.text(0.5,0.3,str_comp_thinks, ha="center")
str_actual="Text2"
fig.text(0.5,0.1,str_actual, ha="center")
plt.show()