web-dev-qa-db-ja.com

matplotlibで自動的にFigureのサイズを変更する

Matplotlib/pylabイメージに含まれるプロットに適切にフィットするように、フィギュアのサイズを自動的に変更する方法はありますか?

使用するデータに応じてアスペクト比が異なるヒートマップ(サブ)プロットを作成しています。

アスペクト比を計算して手動で設定できることはわかっていますが、もっと簡単な方法はありますか?

34
pufferfish

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)

...ただし、画像を保存するときにのみ機能し、表示しません。

45
pufferfish

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')

表示するだけで保存しない場合でも機能します

14

これを行う別の方法は、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()
7
Simon Hobbs

画像のサイズまたはプロット内に表示される領域を変更することを意味しますか?

図のサイズは Figure.set_figsize_inches で設定できます。また、 SciPy Cookbook には、図ごとに複数の画像に関するセクションを含む画像サイズの変更に関するエントリがあります。

これもご覧ください question

3
wierob

あなたは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()
2
jelde015

ax.autoscale をaxオブジェクトとともに使用することも可能

ax.autoscale(enable=True) 
0
Shakujin