Matplotlib で描画した図のサイズを変更するにはどうすればよいですか?
24 に答える
figure
呼び出し署名を伝えます:
from matplotlib.pyplot import figure
figure(figsize=(8, 6), dpi=80)
figure(figsize=(1,1))
別の dpi 引数も指定しない限り、これは 80 x 80 ピクセルになるインチ単位の画像を作成します。
すでに図を作成している場合は、 を使用figure.set_size_inches
して図のサイズを調整できます。
fig = matplotlib.pyplot.gcf()
fig.set_size_inches(18.5, 10.5)
fig.savefig('test2png.png', dpi=100)
サイズの変更を既存の GUI ウィンドウに反映するには、以下を追加しforward=True
ます。
fig.set_size_inches(18.5, 10.5, forward=True)
さらに、コメントでErik Shiltsが言及したように、figure.set_dpi
「[s]図の解像度を1インチあたりのドット数で設定する」ためにも使用できます
fig.set_dpi(100)
plt.rcParams の使用
Figure 環境を使用せずにサイズを変更したい場合は、この回避策もあります。plt.plot()
たとえば、使用している場合は、幅と高さのタプルを設定できます。
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (20,3)
これは、インラインでプロットする場合に非常に便利です (たとえば、IPython Notebookを使用)。asmaier が気付いたように、このステートメントを imports ステートメントの同じセルに配置しないことをお勧めします。
以降のプロットのためにグローバル Figure サイズをデフォルトにリセットするには、次のようにします。
plt.rcParams["figure.figsize"] = plt.rcParamsDefault["figure.figsize"]
cmへの変換
figsize
タプルはインチを受け入れるので、センチメートルで設定したい場合は、2.54 で割る必要があります。この質問を見てください。
非推奨の注意:公式の Matplotlib ガイド
に従って、モジュールの使用は推奨されなくなりました。この他の回答で説明されているように、代わりにモジュールの使用を検討してください。pylab
matplotlib.pyplot
以下はうまくいくようです:
from pylab import rcParams
rcParams['figure.figsize'] = 5, 10
これにより、Figure の幅は 5 インチ、高さは 10インチになります。
Figure クラスは、これを引数の 1 つのデフォルト値として使用します。
Pandasで図のサイズを変更する方法を探している場合は、次のことができます。
df['some_column'].plot(figsize=(10, 5))
df
Pandas データフレームはどこにありますか。または、既存の Figure または Axes を使用するには:
fig, ax = plt.subplots(figsize=(10, 5))
df['some_column'].plot(ax=ax)
デフォルト設定を変更する場合は、次のようにします。
import matplotlib
matplotlib.rc('figure', figsize=(10, 5))
詳細については、次のドキュメントをご覧くださいpd.DataFrame.plot
。
Google の最初のリンク'matplotlib figure size'
はAdjustingImageSize (ページの Google キャッシュ) です。
上記のページのテスト スクリプトを次に示します。test[1-3].png
同じ画像の異なるサイズのファイルを作成します。
#!/usr/bin/env python
"""
This is a small demo file that helps teach how to adjust figure sizes
for matplotlib
"""
import matplotlib
print "using MPL version:", matplotlib.__version__
matplotlib.use("WXAgg") # do this before pylab so you don'tget the default back end.
import pylab
import numpy as np
# Generate and plot some simple data:
x = np.arange(0, 2*np.pi, 0.1)
y = np.sin(x)
pylab.plot(x,y)
F = pylab.gcf()
# Now check everything with the defaults:
DPI = F.get_dpi()
print "DPI:", DPI
DefaultSize = F.get_size_inches()
print "Default size in Inches", DefaultSize
print "Which should result in a %i x %i Image"%(DPI*DefaultSize[0], DPI*DefaultSize[1])
# the default is 100dpi for savefig:
F.savefig("test1.png")
# this gives me a 797 x 566 pixel image, which is about 100 DPI
# Now make the image twice as big, while keeping the fonts and all the
# same size
F.set_size_inches( (DefaultSize[0]*2, DefaultSize[1]*2) )
Size = F.get_size_inches()
print "Size in Inches", Size
F.savefig("test2.png")
# this results in a 1595x1132 image
# Now make the image twice as big, making all the fonts and lines
# bigger too.
F.set_size_inches( DefaultSize )# resetthe size
Size = F.get_size_inches()
print "Size in Inches", Size
F.savefig("test3.png", dpi = (200)) # change the dpi
# this also results in a 1595x1132 image, but the fonts are larger.
出力:
using MPL version: 0.98.1
DPI: 80
Default size in Inches [ 8. 6.]
Which should result in a 640 x 480 Image
Size in Inches [ 16. 12.]
Size in Inches [ 16. 12.]
2 つの注意事項:
モジュールのコメントと実際の出力は異なります。
この回答により、3 つの画像すべてを 1 つの画像ファイルに簡単に結合して、サイズの違いを確認できます。
これは私にとってはうまくいきます:
from matplotlib import pyplot as plt
F = plt.gcf()
Size = F.get_size_inches()
F.set_size_inches(Size[0]*2, Size[1]*2, forward=True) # Set forward to True to resize window along with plot in figure.
plt.show() # Or plt.imshow(z_array) if using an animation, where z_array is a matrix or NumPy array
このフォーラム投稿も役立つかもしれません: Figure ウィンドウのサイズ変更
Figure のサイズを N 倍にするには、これをpl.show()の直前に挿入する必要があります。
N = 2
params = pl.gcf()
plSize = params.get_size_inches()
params.set_size_inches((plSize[0]*N, plSize[1]*N))
また、 IPythonノートブックでもうまく機能します。
Matplotlibはメートル法をネイティブに使用できないため、図のサイズをセンチメートルなどの適切な長さの単位で指定する場合は、次のようにすることができます ( gns-ank のコード)。
def cm2inch(*tupl):
inch = 2.54
if isinstance(tupl[0], tuple):
return tuple(i/inch for i in tupl[0])
else:
return tuple(i/inch for i in tupl)
次に、次を使用できます。
plt.figure(figsize=cm2inch(21, 29.7))
これにより、図が描画された後でもすぐに図のサイズが変更されます (少なくとも Qt4Agg/TkAgg を使用しますが、Mac OS X ではありません - Matplotlib 1.4.0 を使用):
matplotlib.pyplot.get_current_fig_manager().resize(width_px, height_px)
新しい figure を作成するとき、次のfigsize
引数でサイズ (インチ単位) を指定できます。
import matplotlib.pyplot as plt fig = plt.figure(figsize=(w,h))
既存の図を変更する場合は、次のset_size_inches()
方法を使用します。
fig.set_size_inches(w,h)
デフォルトのFigure サイズ (6.4" x 4.8")を変更したい場合は、 "run commands" rc
を使用します:
plt.rc('figure', figsize=(w,h))
import random
import math
import matplotlib.pyplot as plt
start=-20
end=20
x=[v for v in range(start,end)]
#sigmoid function
def sigmoid(x):
return 1/(1+math.exp(x))
plt.figure(figsize=(8,5))#setting the figure size
plt.scatter([abs(v) for v in x],[sigmoid(v) for v in x])
plt.scatter(x,[sigmoid(sigmoid(v)) for v in x])