【发布时间】:2010-11-19 06:03:45
【问题描述】:
有没有办法自动调整图形大小以正确适合 matplotlib/pylab 图像中包含的图?
我正在根据所使用的数据创建纵横比不同的热图(子)图。
我意识到我可以计算纵横比并手动设置它,但肯定有更简单的方法吗?
【问题讨论】:
标签: python matplotlib
有没有办法自动调整图形大小以正确适合 matplotlib/pylab 图像中包含的图?
我正在根据所使用的数据创建纵横比不同的热图(子)图。
我意识到我可以计算纵横比并手动设置它,但肯定有更简单的方法吗?
【问题讨论】:
标签: python matplotlib
使用 bbox_inches='tight'
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
X = 10*np.random.rand(5,3)
fig = plt.figure(figsize=(15,5),facecolor='w')
ax = fig.add_subplot(111)
ax.imshow(X, cmap=cm.jet)
plt.savefig("image.png",bbox_inches='tight',dpi=100)
...不过,仅在保存图像时有效,不显示它们。
【讨论】:
调用 imshow 时只需使用 aspect='auto'
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
X = 10*np.random.rand(5,3)
plt.imshow(X, aspect='auto')
即使只是为了显示而不是保存也可以使用
【讨论】:
另一种方法是使用matplotlib的tight_layout函数
import matplotlib.pyplot as plt
fig,(ax) = plt.subplots(figsize=(8,4), ncols=1)
data = [0,1,2,3,4]
ax.plot(data)
fig.tight_layout()
fig.show()
【讨论】:
你可以尝试使用axis('scaled')
import matplotlib.pyplot as plt
import numpy
#some dummy images
img1 = numpy.array([[.1,.2],[.3,.4]])
img2 = numpy.array([[.1,.2],[.3,.4]])
fig,ax = plt.subplots()
ax.imshow(img1,extent=[0,1,0,1])
ax.imshow(img2,extent=[2,3,0,1])
ax.axis('scaled') #this line fits your images to screen
plt.show()
【讨论】:
你的意思是改变图像的大小还是在情节中可见的区域?
图形的大小可以用Figure.set_figsize_inches设置。 此外,SciPy Cookbook 有一个关于更改图像大小的条目,其中包含一个关于每个图多个图像的部分。
也看看这个question。
【讨论】:
.set_size_inches 没有fig
也可以将ax.autoscale 与 ax 对象一起使用
ax.autoscale(enable=True)
【讨论】:
enable=True 已经是默认值了……