在matplotlib中自动调整图形大小

66 投票
6 回答
171208 浏览
提问于 2025-04-15 13:34

有没有办法让图像自动调整大小,以便能合适地显示里面的图表,像在matplotlib或pylab中那样?

我正在创建热图(子图),这些图的长宽比会根据使用的数据而不同。

我知道可以计算长宽比然后手动设置,但肯定有更简单的方法吧?

6 个回答

18

在你调用 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')

这样做即使只是为了显示,而不是保存,也能正常工作。

21

另一种方法是使用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()
77

使用 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)

...这个只在保存图片的时候有效,不能用来显示图片。

撰写回答