我是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()
我尝试了几件事,但我无法将图像限制为原始尺寸。任何建议都会有所帮助。
答案 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()
使用轴内的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()