Matplotlibでは、fig.add_subplot(111)の引数は何を意味しますか?


472

時々私はこのようなコードに出くわします:

import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]
fig = plt.figure()
fig.add_subplot(111)
plt.scatter(x, y)
plt.show()

生成されるもの:

含まれているコードによって生成されたプロットの例

私は狂ったようにドキュメントを読んでいますが、の説明が見つかりません111。時々私は見る212

の議論はfig.add_subplot()どういう意味ですか?

回答:


470

これらは、単一の整数としてエンコードされたサブプロットグリッドパラメーターです。たとえば、「111」は「1x1グリッド、最初のサブプロット」を意味し、「234」は「2x3グリッド、4番目のサブプロット」を意味します。

の代替形式はadd_subplot(111)ですadd_subplot(1, 1, 1)


18
これに関する詳細なドキュメントはありますか?このコンテキストでの1x1グリッドと2x3グリッドの違いは何ですか?
donatello 2010年

19
1x1グリッド= 1行、1列。2x3グリッド= 2行、3列。3番目の数値は1から始まり、行が最初に増加します。詳細については、subplot()のドキュメントを参照してください。
クリスチャンアリス

18
他の人が説明したように(2年以上前)、これはmatlabからの遺産です。しかし、将来の読者のために、subplots()メソッドの形でより良い代替手段が存在することを知っておく必要があります。
jarondl 2012年

26
レガシーのドキュメントsubplot()ここにあり、ここsubplots()あります
crayzeewulf 2014年

511

これは、次の図で最もよく説明されると思います。

ここに画像の説明を入力してください

上記を初期化するには、次のように入力します。

import matplotlib.pyplot as plt
fig = plt.figure()
fig.add_subplot(221)   #top left
fig.add_subplot(222)   #top right
fig.add_subplot(223)   #bottom left
fig.add_subplot(224)   #bottom right 
plt.show()

19
コンマ付きのバージョンは、3桁の番号付きのバージョンよりもはるかに直感的で読みやすいと思います
エンドリス2014

これは、上記の例のような2x2グリッドや4x4グラフのグリッドなど、「サブプロットをグリッドに配置する」方法を示しています。しかし、表示されるグラフのサイズを決定するものを誰かが説明できます。(2,2,1)のデフォルトはかなり小さいので、そのサイズの2倍以上にする必要があります。
yoshiserry 2014

7
これは非常に役立ちます。この画像は、正方形(2x2)でなかった場合は少し見栄えがよくなりますが、それ以外の場合は非常に役立ちます。
TravisJ 2015年

@TravisJわあ、なんと偶然でしょう!あなたが書いた1時間前に私はまったく同じことを考えていました!私はすぐに変更します:)
SaiyanGirl 2015年

7
非常に役立つ回答です。編集は不正確だと思いますが。1:2や[1 3]のようなステートメントでサブプロットをスパンする動作は、Matplotlibではサポートされておらず(少なくともではサポートされていません1.5.0)、Matlabのみのようです。(この動作を達成するためにMatplotlibには他のオプションがあることに注意してください(例:gridspec
ラボ

39

コンスタンティンからの答えはスポットですが、より多くの背景のために、この動作はMatlabから継承されます。

Matlabの動作は、Matlabドキュメンテーションの「図の設定-図ごとの複数のプロットの表示」セクションで説明されています

subplot(m、n、i)は、Figureウィンドウを小さなサブプロットのm行n列の行列に分割し、現在のプロットのサブプロットを選択します。プロットは、Figureウィンドウの一番上の行に沿って番号が付けられ、次に2番目の行、というように番号が付けられます。


2
これはmatplotlibであり、matlabではありません。
dom0

45
matplotlibsの動作の多くは、Matlabから継承されます。Matlabのドキュメントの方が優れていたので、この特定の関数呼び出しの動作を説明するのに役立つと思いました。はい、あなたは正しいです。これ(質問)はmatplotlibに関するものです。matplotlibののサブプロットのドキュメントは、私の意見ではそれほど明確ではありません。
DaveTM

7
MATLABドキュメンテーションは移動しました
dotancohen 2014

20

私の解決策は

fig = plt.figure()
fig.add_subplot(1, 2, 1)   #top and bottom left
fig.add_subplot(2, 2, 2)   #top right
fig.add_subplot(2, 2, 4)   #bottom right 
plt.show()

1および3のマージを備えた2x2グリッド


15

ここに画像の説明を入力してください

import matplotlib.pyplot as plt
plt.figure(figsize=(8,8))
plt.subplot(3,2,1)
plt.subplot(3,2,3)
plt.subplot(3,2,5)
plt.subplot(2,2,2)
plt.subplot(2,2,4)

最初のコードは、3行2列のレイアウトで最初のサブプロットを作成します。

最初の列の3つのグラフは3つの行を示します。2番目のプロットは、同じ列の最初のプロットのすぐ下に続きます。

最後の2つのプロットには(2, 2)、2番目の列に2行しかないことを示す引数があり、位置パラメーターは行ごとに移動します。


10

fig.add_subplot(ROW,COLUMN,POSITION)

  • ROW =行数
  • COLUMN =列数
  • POSITION =プロットするグラフの位置

`fig.add_subplot(111)` #There is only one subplot or graph  
`fig.add_subplot(211)`  *and*  `fig.add_subplot(212)` 

合計2行、1列なので、2つのサブグラフをプロットできます。その場所は1番目です。合計2行1列なので、2つのサブグラフをプロットできます。その場所は2番目です。


2

add_subplot()メソッドには、いくつかのコールサインを持っています:

  1. add_subplot(nrows, ncols, index, **kwargs)
  2. add_subplot(pos, **kwargs)
  3. add_subplot(ax)
  4. add_subplot() <-3.1.0以降

コール1および2:

呼び出し1と2は、互いに同じことを達成します(上限まで、以下で説明します)。それらを最初に最初の2つの数値(2x2、1x8、3x4など)でグリッドレイアウトを指定すると考えてください。例:

f.add_subplot(3,4,1) 
# is equivalent to:
f.add_subplot(341)

両方とも、3行4列の(3 x 4 = 12)サブプロットのサブプロット配置を生成します。各呼び出しの3番目の数値、左上の1から始まり、右に向かって増加する、返す軸オブジェクトを示します。

このコードは、call 2の使用の制限を示しています。

#!/usr/bin/env python3
import matplotlib.pyplot as plt

def plot_and_text(axis, text):
  '''Simple function to add a straight line
  and text to an axis object'''
  axis.plot([0,1],[0,1])
  axis.text(0.02, 0.9, text)

f = plt.figure()
f2 = plt.figure()

_max = 12
for i in range(_max):
  axis = f.add_subplot(3,4,i+1, fc=(0,0,0,i/(_max*2)), xticks=[], yticks=[])
  plot_and_text(axis,chr(i+97) + ') ' + '3,4,' +str(i+1))

  # If this check isn't in place, a 
  # ValueError: num must be 1 <= num <= 15, not 0 is raised
  if i < 9:
    axis = f2.add_subplot(341+i, fc=(0,0,0,i/(_max*2)), xticks=[], yticks=[])
    plot_and_text(axis,chr(i+97) + ') ' + str(341+i))

f.tight_layout()
f2.tight_layout()
plt.show()

サブプロット

LHS呼び出し1を使用すると、任意の軸オブジェクトを返すことができますが、RHS呼び出し2を使用すると、この呼び出しを使用してアクセスできないインデックス= 9、レンダリングサブプロットj)、k)、およびl)までしか返すことができません。

つまり、ドキュメントからこの点示しています。

posは3桁の整数で、最初の桁は行数、2番目の桁は列数、3番目の桁はサブプロットのインデックスです。つまり、fig.add_subplot(235)はfig.add_subplot(2、3、5)と同じです。このフォームが機能するためには、すべての整数が10未満でなければならないことに注意してください


電話3

まれに、add_subplotが単一の引数で呼び出される場合があります。サブプロットのAxesインスタンスは、現在のFigureで既に作成されていますが、FigureのAxesのリストには作成されていません。


電話4(3.1.0以降):

位置引数が渡されない場合、デフォルトは(1、1、1)です。

つまり、fig.add_subplot(111)問題の通話を再現します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.