subplot2grid、ticker、enumerate、seaborn、plt/ax/figの基礎
他の人のコードを読んでいる時に、まだ習得していなかったことを発見しました。
matplotlib.ticker
位置決め
Tick locating
Locatorクラスはすべてのティックロケーターの基底クラスです。ロケーターはデータの範囲に基づいてビューの範囲の自動スケーリングとティックの位置の選択を処理します。便利な半自動ティックロケーターはMultipleLocatorです。基数(例:10)で初期化され、その基数の倍数である軸の範囲とティックを選択します。
ここで定義されているLocatorサブクラスは以下の通りです
シンプルなデフォルトを持つ
MaxNLocator。ほとんどのプロットのデフォルトティックロケーターです。適切な位置にティックを持つ最大数の間隔を見つけます。
最小から最大まで均等にティックを配置します。
最小から最大まで対数的にティックを配置します。
ティックと範囲は基数の倍数です。整数または浮動小数点数。
ティックの位置は固定されています。
インデックスプロット用のロケーター(例:
x = range(len(y))の場合)。ティックなし。
symlogノルムで使用するロケーター。閾値外の部分は
LogLocatorのように動作し、範囲内の場合は0を追加します。ロジットスケーリング用のロケーター。
MultipleLocatorを選択し、ナビゲーション中にインテリジェントなティッキングのために動的に再割り当てします。軸が線形で主ティックが均等に配置されている場合の副ティック用ロケーター。主ティック間隔を指定された数の副間隔に分割し、主間隔に応じてデフォルトで4または5になります。
日付の位置に特化したロケーターがいくつかあります - datesモジュールを参照してください。
Locatorから派生して独自のロケーターを定義できます。位置のシーケンスを返す__call__メソッドをオーバーライドする必要があり、データの範囲からビューの範囲を設定するautoscaleメソッドもオーバーライドしたいでしょう。
デフォルトのロケーターをオーバーライドする場合は、上記のいずれかまたはカスタムロケーターを使用し、xまたはy軸インスタンスに渡します。関連するメソッドは以下の通りです:
ax.xaxis.set_major_locator(xmajor_locator)
ax.xaxis.set_minor_locator(xminor_locator)
ax.yaxis.set_major_locator(ymajor_locator)
ax.yaxis.set_minor_locator(yminor_locator)デフォルトの副ロケーターはNullLocatorです。つまり、デフォルトでは副ティックはありません。
フォーマット
Tick formatting
ティックのフォーマットはFormatterから派生したクラスによって制御されます。フォーマッターは単一のティック値を操作し、軸に文字列を返します。
ティックにラベルなし。
ラベルのリストから文字列を設定します。
ラベルの文字列を手動で設定します。
ユーザー定義関数がラベルを設定します。
文字列
formatメソッドを使用します。古いスタイルのsprintf形式文字列を使用します。
スカラーのデフォルトフォーマッター:形式文字列を自動選択します。
対数軸用のフォーマッター。
exponent = log_base(value)を使用して対数軸の値をフォーマットします。Math textを使用して
exponent = log_base(value)で対数軸の値をフォーマットします。科学表記法を使用して対数軸の値をフォーマットします。
確率フォーマッター。
工学表記法でラベルをフォーマットします。
ラベルをパーセンテージとしてフォーマットします。
__call__メソッドをオーバーライドするだけで、Formatter基底クラスから独自のフォーマッターを派生できます。フォーマッタークラスは軸のビューとデータの範囲にアクセスできます。
主ティックと副ティックのラベル形式を制御するには、以下のメソッドのいずれかを使用します:
ax.xaxis.set_major_formatter(xmajor_formatter)
ax.xaxis.set_minor_formatter(xminor_formatter)
ax.yaxis.set_major_formatter(ymajor_formatter)
ax.yaxis.set_minor_formatter(yminor_formatter)参考
https://matplotlib.org/3.1.1/api/ticker_api.html
enumerate
説明
enumerate()関数は、イテラブルなデータオブジェクト(リスト、タプル、文字列など)をインデックスシーケンスに結合し、データとそのインデックスの両方をリストするために使用されます。一般的にforループで使用されます。
Python 2.3以上で使用可能で、2.6でstartパラメータが追加されました。
構文
enumerate()メソッドの構文は以下の通りです:
enumerate(sequence, [start=0])パラメータ
- sequence — シーケンス、イテレータ、またはイテレーションをサポートする他のオブジェクト。
- start — インデックスの開始位置。
戻り値
enumerateオブジェクトを返します。
例
以下はenumerate()メソッドの使用例です:
>>>seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1)) # インデックスは1から開始
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]通常のforループ
>>>i = 0
>>> seq = ['one', 'two', 'three']
>>> for element in seq:
... print i, seq[i]
... i +=1
...
0 one
1 two
2 threeenumerateを使用したforループ
>>>seq = ['one', 'two', 'three']
>>> for i, element in enumerate(seq):
... print i, element
...
0 one
1 two
2 three参考
https://www.runoob.com/python/python-func-enumerate.html
subplot2grid
これはサブプロットの位置をカスタマイズし、元のサイズを跨ぐことができます。
原文:https://wizardforcel.gitbooks.io/matplotlib-user-guide/content/3.3.html
GridSpecサブプロットが配置されるグリッドのジオメトリを指定します。グリッドの行数と列数を設定する必要があります。サブプロットのレイアウトパラメータ(例:left、rightなど)はオプションで調整できます。
SubplotSpec指定されたGridSpec内のサブプロットの位置を指定します。
subplot2gridpyplot.subplotに似たヘルパー関数ですが、0ベースのインデックスを使用し、サブプロットが複数のセルにまたがることができます。
subplot2grid基本例
subplot2gridを使用するには、グリッドのジオメトリとグリッド内のサブプロットの位置を提供する必要があります。単純な単一セルのサブプロットの場合:
ax = plt.subplot2grid((2,2),(0, 0))これは以下と同等です:
ax = plt.subplot(2,2,1)
nRow=2, nCol=2
(0,0) +-------+-------+
| 1 | |
+-------+-------+
| | |
+-------+-------+subplotとは異なり、gridspecのインデックスは0から始まることに注意してください。
複数のセルにまたがるサブプロットを作成するには、
ax2 = plt.subplot2grid((3,3), (1, 0), colspan=2)
ax3 = plt.subplot2grid((3,3), (1, 2), rowspan=2)例えば、以下のコマンド:
ax1 = plt.subplot2grid((3,3), (0,0), colspan=3)
ax2 = plt.subplot2grid((3,3), (1,0), colspan=2)
ax3 = plt.subplot2grid((3,3), (1, 2), rowspan=2)
ax4 = plt.subplot2grid((3,3), (2, 0))
ax5 = plt.subplot2grid((3,3), (2, 1))は以下を作成します:

GridSpecとSubplotSpec
GridSpecを明示的に作成し、それを使用してサブプロットを作成できます。
例えば、
ax = plt.subplot2grid((2,2),(0, 0))は以下と同等です:
import matplotlib.gridspec as gridspec
gs = gridspec.GridSpec(2, 2)
ax = plt.subplot(gs[0, 0])gridspecの例は配列のような(1Dまたは2D)インデックスを提供し、SubplotSpecインスタンスを返します。例えば、スライスを使用して複数のセルにまたがるSubplotSpecインスタンスを返します。
上記の例は以下のようになります:
gs = gridspec.GridSpec(3, 3)
ax1 = plt.subplot(gs[0, :])
ax2 = plt.subplot(gs[1,:-1])
ax3 = plt.subplot(gs[1:, -1])
ax4 = plt.subplot(gs[-1,0])
ax5 = plt.subplot(gs[-1,-2])
GridSpecレイアウトの調整
GridSpecを明示的に使用する場合、gridspecによって作成されたサブプロットのレイアウトパラメータを調整できます。
gs1 = gridspec.GridSpec(3, 3)
gs1.update(left=0.05, right=0.48, wspace=0.05)これはsubplots_adjustに似ていますが、指定されたGridSpecから作成されたサブプロットにのみ影響します。
以下のコード
gs1 = gridspec.GridSpec(3, 3)
gs1.update(left=0.05, right=0.48, wspace=0.05)
ax1 = plt.subplot(gs1[:-1, :])
ax2 = plt.subplot(gs1[-1, :-1])
ax3 = plt.subplot(gs1[-1, -1])
gs2 = gridspec.GridSpec(3, 3)
gs2.update(left=0.55, right=0.98, hspace=0.05)
ax4 = plt.subplot(gs2[:, :-1])
ax5 = plt.subplot(gs2[:-1, -1])
ax6 = plt.subplot(gs2[-1, -1])は以下を生成します

SubplotSpecからGridSpecを作成
SubplotSpecからGridSpecを作成できます。そのレイアウトパラメータは指定されたSubplotSpecの位置のレイアウトパラメータに設定されます。
gs0 = gridspec.GridSpec(1, 2)
gs00 = gridspec.GridSpecFromSubplotSpec(3, 3, subplot_spec=gs0[0])
gs01 = gridspec.GridSpecFromSubplotSpec(3, 3, subplot_spec=gs0[1])
SubplotSpecを使用した複雑なネストされたGridSpecの作成
ここでは、より複雑なネストされたgridspecの例を示します。4x4の外側グリッドの各セルの周りに、各3x3の内側グリッドで適切なスパインを非表示にしてボックスを配置します。

可変グリッドサイズのGridSpec
通常、GridSpecは同じサイズのグリッドを作成します。行と列の相対的な高さと幅を調整できます。絶対的な高さの値は意味がなく、相対的な比率のみが重要であることに注意してください。
gs = gridspec.GridSpec(2, 2,
width_ratios=[1,2],
height_ratios=[4,1]
)
ax1 = plt.subplot(gs[0])
ax2 = plt.subplot(gs[1])
ax3 = plt.subplot(gs[2])
ax4 = plt.subplot(gs[3])
seaborn
seabornはmatplotlibをさらにカプセル化したもので、簡単に言えばより使いやすくなっています。
公式サイト:https://seaborn.pydata.org/
ここでは使えそうなコードをいくつか紹介します。
lineplot
seaborn.lineplot(x=None, y=None, hue=None, size=None, style=None, data=None, palette=None, hue_order=None, hue_norm=None, sizes=None, size_order=None, size_norm=None, dashes=True, markers=None, style_order=None, units=None, estimator=‘mean’, ci=95, n_boot=1000, seed=None, sort=True, err_style=‘band’, err_kws=None, legend=‘brief’, ax=None, **kwargs)
https://seaborn.pydata.org/generated/seaborn.lineplot.html
heatmap
seaborn.heatmap(data, vmin=None, vmax=None, cmap=None, center=None, robust=False, annot=None, fmt=’.2g’, annot_kws=None, linewidths=0, linecolor=‘white’, cbar=True, cbar_kws=None, cbar_ax=None, square=False, xticklabels=‘auto’, yticklabels=‘auto’, mask=None, ax=None, **kwargs)
https://zhuanlan.zhihu.com/p/35494575
lmplot
seaborn.lmplot(x, y, data, hue=None, col=None, row=None, palette=None, col_wrap=None, size=5, aspect=1, markers=‘o’, sharex=True, sharey=True, hue_order=None, col_order=None, row_order=None, legend=True, legend_out=True, x_estimator=None, x_bins=None, x_ci=‘ci’, scatter=True, fit_reg=True, ci=95, n_boot=1000, units=None, order=1, logistic=False, lowess=False, robust=False, logx=False, x_partial=None, y_partial=None, truncate=False, x_jitter=None, y_jitter=None, scatter_kws=None, line_kws=None)
https://zhuanlan.zhihu.com/p/25909753
一般的な統計グラフは基本的にここで見つけることができます
https://seaborn.pydata.org/examples/index.html
subplot_adjust
matplotlib.pyplot.subplots_adjust(*args, **kwargs)
subplots_adjust(left=None, bottom=None, right=None, top=None,wspace=None, hspace=None)
left = 0.125 # サブプロットからfigure左端までの距離
right = 0.9 # 右端
bottom = 0.1 # 下端
top = 0.9 # 上端
wspace = 0.2 # サブプロット間の水平間隔
hspace = 0.2 # サブプロット間の垂直間隔plt/ax/fig

pltを直接使用することは避けてください