以下は、matplotlib 3.10.1 ドキュメント クイックスタートガイドの日本語訳です。
概要
このチュートリアルでは、Matplotlib を使い始めるための基本的な使用パターンやベストプラクティスを紹介します。
import matplotlib.pyplot as plt
import numpy as np
簡単な例
Matplotlib では、データを Figure(図) に描画します。Figure はウィンドウや Jupyter ウィジェットなどの表示要素であり、一つ以上の Axes(座標軸) を含みます。Axes は x-y 座標(極座標プロットでは θ-r、3D プロットでは x-y-z)でデータを指定できる領域です。
最も簡単な Figure と Axes の作成方法は pyplot.subplots()
を使用することです。次に Axes.plot()
を使ってデータを描画し、plt.show()
で表示します。
fig, ax = plt.subplots() # 単一の Axes を含む Figure を作成
ax.plot([1, 2, 3, 4], [1, 4, 2, 3]) # Axes にデータをプロット
plt.show() # Figure を表示

環境によっては plt.show()
を省略できます。例えば Jupyter Notebook では、コードセル内で作成された Figure は自動的に表示されます。
Figure の構成要素
Matplotlib の Figure は、以下のコンポーネントで構成されています。

Figure(図)
Figure は Matplotlib の最上位コンテナです。Figure(図)は、すべての子要素であるAxes(座標軸オブジェクト)、特別なアーティスト(タイトル、凡例、カラーバーなど)、およびネストされたサブフィギュア(入れ子になった図)を管理します。
通常、新しいFigureを作成するには、以下のいずれかの方法を使用します。
fig = plt.figure() # Axesを持たない空のFigure
fig, ax = plt.subplots() # 1つのAxesを持つFigure
fig, axs = plt.subplots(2, 2) # 2×2のグリッドに配置されたAxesを持つFigure
# 左側に1つのAxes、右側に2つのAxesを持つFigure
fig, axs = plt.subplot_mosaic([['left', 'right_top'],
['left', 'right_bottom']])
subplots()
や subplot_mosaic()
は、Figure内にAxesオブジェクトを同時に作成する便利な関数ですが、後から手動でAxesを追加することもできます。
Figureの詳細(パンやズーム機能を含む)については、Introduction to Figures (英語) を参照してください。
Axes(座標軸オブジェクト)
Axes は Figure に関連付けられた Artist(描画要素)であり、データをプロットするための領域を含みます。通常、Axes には Axis(軸)オブジェクトが2つ(3Dの場合は3つ)含まれており、目盛り(ticks)や目盛りラベル(tick labels)を提供して、データのスケールを決定します。(Axes と Axis の違いに注意してください。)
各 Axes には、以下の要素が含まれます。
- タイトル(
set_title()
で設定) - x軸ラベル(
set_xlabel()
で設定) - y軸ラベル(
set_ylabel()
で設定)
Axes のメソッドは、プロットの大部分を設定するための主要なインターフェースとなります。たとえば、以下のような操作が可能です。
- データの追加
- 軸のスケールや範囲の調整
- ラベルの追加 など
Axis(軸オブジェクト)
Axis は、スケールと範囲を設定し、目盛り(ticks)と目盛りラベル(ticklabels)を生成するオブジェクトです。
- 目盛りの位置 は Locator オブジェクトによって決定されます。
- 目盛りラベルの文字列 は Formatter によってフォーマットされます。
適切な Locator と Formatter を組み合わせることで、目盛りの位置やラベルの詳細な制御が可能になります。
Artist(描画要素)
基本的に、Figure 上に表示されるすべての要素は Artist です。(Figure、Axes、Axis も Artist に含まれます。)
代表的な Artist の例
- Text オブジェクト(タイトルやラベル)
- Line2D オブジェクト(線)
- Collection オブジェクト(複数の要素をまとめたもの)
- Patch オブジェクト(矩形や円などの図形)
Figure が描画される際、すべての Artist がキャンバスに描画されます。
多くの Artist は Axes に紐づいているため、複数の Axes で共有したり、他の Axes に移動することはできません。
プロット関数への入力の種類
プロット関数は、以下のような入力を受け取ります。
numpy.array
またはnumpy.ma.masked_array
numpy.asarray
に変換可能なオブジェクト- 配列に類似したオブジェクト(”array-like”)として、pandas のデータオブジェクト や
numpy.matrix
などが挙げられますが、これらは期待通りに動作しないことがあります。 - 一般的な方法として、プロット前に
numpy.array
に変換します。
- 配列に類似したオブジェクト(”array-like”)として、pandas のデータオブジェクト や
例:numpy.matrix を numpy.array に変換
import numpy as np
b = np.matrix([[1, 2], [3, 4]])
b_asarray = np.asarray(b) # numpy.array に変換
多くのプロット関数では、以下のようなデータ構造も扱うことができます。
dict
(辞書)- 構造化された
numpy.array
pandas.DataFrame
Matplotlib では data
キーワード引数を使用すると、辞書や DataFrame
の キー(列名)を x, y の変数として指定 できます。
import numpy as np
import matplotlib.pyplot as plt
# 乱数のシードを固定(再現性の確保)
np.random.seed(19680801)
# データを辞書として作成
data = {
'a': np.arange(50), # 0〜49の連続値
'c': np.random.randint(0, 50, 50), # 0〜49のランダム整数
'd': np.random.randn(50) # 標準正規分布に従う乱数
}
# 'b' を 'a' の値にランダムなノイズを加えて生成
data['b'] = data['a'] + 10 * np.random.randn(50)
# 'd' を絶対値にしてスケール調整
data['d'] = np.abs(data['d']) * 100
# 図と軸を作成
fig, ax = plt.subplots(figsize=(5, 2.7), layout='constrained')
# 散布図をプロット(辞書のキーを指定)
ax.scatter('a', 'b', c='c', s='d', data=data)
# 軸ラベルを設定
ax.set_xlabel('entry a')
ax.set_ylabel('entry b')
plt.show()

このように data
キーワード引数を使用することで、辞書や pandas.DataFrame
から直接プロットすることができます。
コーディングスタイル
明示的な方法と暗黙的な方法
Matplotlib には、主に 2つの使用方法 があります。
- 明示的(オブジェクト指向, OO スタイル)
- Figure と Axes を明示的に作成し、それらのメソッドを呼び出す方法。
- より柔軟で、スクリプトや大規模なコードで推奨される。
- 暗黙的(pyplot スタイル)
pyplot
に Figure と Axes の管理を任せる 方法。- 簡単なプロットを素早く作成するのに便利。
明示的な方法と暗黙的な方法のトレードオフ を説明したMatplotlib の アプリケーションインターフェース(APIs)(英語) ドキュメントがあります。
明示的(オブジェクト指向, OO スタイル)
import numpy as np
import matplotlib.pyplot as plt
# 0 から 2 までの範囲を 100 分割したデータ
x = np.linspace(0, 2, 100)
# Figure と Axes を作成
fig, ax = plt.subplots(figsize=(5, 2.7), layout='constrained')
# データをプロット
ax.plot(x, x, label='linear') # 線形データ
ax.plot(x, x**2, label='quadratic') # 二次関数
ax.plot(x, x**3, label='cubic') # 三次関数
# 軸ラベルの設定
ax.set_xlabel('x label')
ax.set_ylabel('y label')
# タイトルの設定
ax.set_title("Simple Plot")
# 凡例の追加
ax.legend()
# グラフを表示
plt.show()

暗黙的(pyplot スタイル)
import numpy as np
import matplotlib.pyplot as plt
# 0 から 2 までの範囲を 100 分割したデータ
x = np.linspace(0, 2, 100)
# Figure を作成(Axes は暗黙的に作成される)
plt.figure(figsize=(5, 2.7), layout='constrained')
# データをプロット(Axes を明示的に指定せず、pyplot を使用)
plt.plot(x, x, label='linear') # 線形データ
plt.plot(x, x**2, label='quadratic') # 二次関数
plt.plot(x, x**3, label='cubic') # 三次関数
# 軸ラベルの設定
plt.xlabel('x label')
plt.ylabel('y label')
# タイトルの設定
plt.title("Simple Plot")
# 凡例の追加
plt.legend()
# グラフを表示
plt.show()

(さらに、Matplotlib を GUI アプリケーションに埋め込む 場合には、3つ目のアプローチ があります。この方法では pyplot
を完全に使用せず、Figure の作成すら pyplot
に依存しません。詳細については、GUI アプリケーションへの埋め込み(英語) に関するセクションを参照してください。)
Matplotlib のドキュメントやサンプルコードでは、OO スタイル と Pyplot スタイル の両方が使用されています。一般的に、複雑なプロットや、大規模なプロジェクトの一部として再利用する関数やスクリプトには、OO スタイルの使用を推奨 します。一方で、Pyplot スタイルは、対話的に素早く作業する際に便利 です。
ヘルパー関数の作成
同じ種類のプロットを異なるデータセットで何度も作成する必要がある場合、または Matplotlib のメソッドを簡単にラップしたい場合は、以下のような推奨される関数を作成すると便利です。
def my_plotter(ax, data1, data2, param_dict):
"""
グラフを作成するヘルパー関数
"""
out = ax.plot(data1, data2, **param_dict)
return out
ヘルパー関数の使用例
この関数を使って、2つのサブプロットを作成できます。
import numpy as np
import matplotlib.pyplot as plt
# 4つのランダムなデータセットを作成
data1, data2, data3, data4 = np.random.randn(4, 100)
# 1行2列のサブプロットを作成
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(5, 2.7))
# ヘルパー関数を使ってプロット
my_plotter(ax1, data1, data2, {'marker': 'x'}) # xマーカーを使用
my_plotter(ax2, data3, data4, {'marker': 'o'}) # oマーカーを使用
plt.show()

もし、これらの関数を Python パッケージとしてインストール したり、その他のカスタマイズを加えたい場合は、Web 上にある多数のテンプレートを利用できます。Matplotlib には公式のテンプレートとして mpl-cookiecutter
があります。
Artist(描画要素)のスタイル設定
ほとんどのプロットメソッドには、Artist(描画要素)のスタイルオプション があります。これらのオプションは、プロットメソッドを呼び出す際 に指定するか、または Artist の “setter” メソッド を使用して設定できます。
以下の例では、plot
メソッドで作成された Artist の色(color)、線の太さ(linewidth)、線種(linestyle)を手動で設定し、
さらに 2本目の線の線種を set_linestyle
メソッドで後から変更 しています。
import numpy as np
import matplotlib.pyplot as plt
# 図と軸を作成
fig, ax = plt.subplots(figsize=(5, 2.7))
# データの準備
data1, data2 = np.random.randn(2, 100) # 2つのランダムデータ
x = np.arange(len(data1)) # x軸のデータ
# 1本目の線(青, 太線, 破線)
ax.plot(x, np.cumsum(data1), color='blue', linewidth=3, linestyle='--')
# 2本目の線(オレンジ, 細線)
l, = ax.plot(x, np.cumsum(data2), color='orange', linewidth=2)
# 2本目の線の線種を変更(点線)
l.set_linestyle(':')
# グラフを表示
plt.show()

Colors(色)
Matplotlib は、ほとんどの Artist(描画要素) に対して受け入れ可能な、非常に柔軟な色の配列を持っています。指定可能な色の定義については、許容される色の定義(英語) を参照してください。
一部の Artist は複数の色を受け入れます。例えば、散布図(scatter plot)では、マーカーの外枠の色と内側の色を異なるものにすることができます。
fig, ax = plt.subplots(figsize=(5, 2.7))
ax.scatter(data1, data2, s=50, facecolor='C0', edgecolor='k')

Linewidths, linestyles, and markersizes(線の太さ、線のスタイル、マーカーのサイズ)
線の太さ(linewidths) は通常、組版のポイント単位(1 pt = 1/72 インチ) で指定され、ストロークされた線(輪郭を持つ線)を持つ Artist に適用されます。同様に、ストロークされた線は 線のスタイル(linestyle) を持つことができます。線のスタイルの例(英語) を参照してください。
マーカーのサイズ(markersize) は使用するメソッドによって異なります。
plot
では、マーカーサイズは ポイント単位(pt)で指定され、一般的に直径または幅 を意味します。scatter
では、マーカーサイズは視覚的な面積におおよそ比例 します。
文字列コードとして使用できる マーカースタイル(英語) の配列があり、ユーザーは独自の MarkerStyle を定義することもできます。
import numpy as np
import matplotlib.pyplot as plt
# 図と軸を作成
fig, ax = plt.subplots(figsize=(5, 2.7))
# マーカーを使用したプロット
ax.plot(data1, 'o', label='data1') # 'o' → 丸(circle)
ax.plot(data2, 'd', label='data2') # 'd' → 菱形(diamond)
ax.plot(data3, 'v', label='data3') # 'v' → 下向き三角形(triangle down)
ax.plot(data4, 's', label='data4') # 's' → 四角形(square)
# 凡例の追加
ax.legend()

Labelling plots(プロットのラベリング)
Axes labels and text(軸ラベルとテキスト)
set_xlabel
、set_ylabel
、および set_title
は、指定された位置にテキストを追加するために使用されます(詳しくは Matplotlib のテキスト(英語) を参照)。また、text
を使用してプロットに直接テキストを追加することもできます。
import numpy as np
import matplotlib.pyplot as plt
# 平均 115、標準偏差 15 の正規分布に従う乱数を 10000 個生成
mu, sigma = 115, 15
x = mu + sigma * np.random.randn(10000)
# 図と軸を作成
fig, ax = plt.subplots(figsize=(5, 2.7), layout='constrained')
# データのヒストグラム
n, bins, patches = ax.hist(x, 50, density=True, facecolor='C0', alpha=0.75)
# 軸ラベルを設定
ax.set_xlabel('Length [cm]')
ax.set_ylabel('Probability')
# タイトルを設定
ax.set_title('Aardvark lengths\n (not really)')
# テキストをプロットに追加
ax.text(75, .025, r'$\mu=115,\ \sigma=15$')
# 軸の範囲を設定
ax.axis([55, 175, 0, 0.03])
# グリッドを表示
ax.grid(True)
# グラフを表示
plt.show()

すべてのテキスト関連の関数は、matplotlib.text.Text
のインスタンスを返します。線(Line2D
オブジェクト)と同様に、キーワード引数を渡すことでプロパティをカスタマイズ できます。
t = ax.set_xlabel('my data', fontsize=14, color='red')
この場合、フォントサイズを 14、色を赤 に設定しています。これらのプロパティについての詳細は Text properties and layout (英語) を参照してください。
テキスト内での数式表現
Matplotlib では、TeX の数式表現をテキスト内で使用 できます。例えば、タイトルに数式を含めるには、TeX の式を $
で囲んで 記述します。
ax.set_title(r'$\sigma_i=15$')
ここで、r
をタイトル文字列の前に付けることで、Python のエスケープ文字としてバックスラッシュ(\
)を処理しない (raw string) ことを示しています。
Matplotlib には TeX の数式パーサーとレイアウトエンジン が組み込まれており、独自の数式フォントを含んでいます。詳細は Writing mathematical expressions を参照してください。
また、Matplotlib では LaTeX を直接使用 してフォーマットしたテキストを描画することも可能です。詳細は Text rendering with LaTeX を参照してください。
アノテーション(注釈)
プロット上の特定の点に 矢印付きの注釈(annotation) を追加することもできます。通常、矢印で xy
の位置 を指し、xytext
の位置 にテキストを表示します。
import numpy as np
import matplotlib.pyplot as plt
# 図と軸を作成
fig, ax = plt.subplots(figsize=(5, 2.7))
# データの準備
t = np.arange(0.0, 5.0, 0.01) # 0 から 5 までの範囲の値を 0.01 刻みで生成
s = np.cos(2 * np.pi * t) # コサイン波を計算
# プロット
line, = ax.plot(t, s, lw=2) # 線の太さ(lw=2)を指定
# アノテーションを追加
ax.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
arrowprops=dict(facecolor='black', shrink=0.05))
# y軸の範囲を設定
ax.set_ylim(-2, 2)
# グラフを表示
plt.show()

この基本的な例では、xy
と xytext
はどちらも データ座標 で指定されています。Matplotlib では、他にもさまざまな座標系を選択できます。詳細は、Basic annotation(基本的なアノテーション)(英語) やAdvanced annotation(高度なアノテーション)(英語) を参照してください。また、より多くの例は Annotate plots(プロットへの注釈)(英語) に掲載されています。
凡例(Legends)
プロットの 線やマーカーを識別するために凡例(legend) を追加することがよくあります。凡例は Axes.legend()
を使用して追加できます。
import numpy as np
import matplotlib.pyplot as plt
# 図と軸を作成
fig, ax = plt.subplots(figsize=(5, 2.7))
# データをプロットし、凡例のラベルを指定
ax.plot(np.arange(len(data1)), data1, label='data1')
ax.plot(np.arange(len(data2)), data2, label='data2')
ax.plot(np.arange(len(data3)), data3, 'd', label='data3')
# 凡例を表示
ax.legend()
# グラフを表示
plt.show()

Matplotlib の凡例は、レイアウト、配置、および表示可能な Artist(描画要素) に関して非常に柔軟です。詳細は Legend guide(凡例のガイド) を参照してください。
軸スケールと目盛り(Axis scales and ticks)
各 Axes
には、x 軸と y 軸(または 3D プロットの場合は z 軸も含む)を表す 2つ(または3つ)の Axis
オブジェクト があります。これらは、以下の要素を制御します。
- 軸のスケール(scale)
- 目盛りの位置(tick locators)
- 目盛りのラベルフォーマット(tick formatters)
さらに、追加の Axes
を設定することで、さらに多くの Axis
オブジェクトを表示できます。
スケール(Scales)
Matplotlib では、線形スケール(linear scale) の他に、非線形スケール(non-linear scale) も提供しています。例えば、対数スケール(log-scale) などが利用できます。
対数スケールは頻繁に使用されるため、次のような便利なメソッドが用意されています。
loglog()
semilogx()
semilogy()
その他のスケールについては Scales overview(スケールの概要)(英語) を参照してください。
例:スケールの手動設定
import numpy as np
import matplotlib.pyplot as plt
# 図と2つのサブプロットを作成
fig, axs = plt.subplots(1, 2, figsize=(5, 2.7), layout='constrained')
# データを準備
xdata = np.arange(len(data1)) # 順序データを作成
data = 10**data1 # 10のべき乗に変換(対数スケール用)
# 左のプロット(通常スケール)
axs[0].plot(xdata, data)
# 右のプロット(y軸を対数スケールに設定)
axs[1].set_yscale('log')
axs[1].plot(xdata, data)
# グラフを表示
plt.show()

スケールは、データ値を軸上の間隔にマッピングする 役割を持ちます。これは x 軸と y 軸の両方 に適用され、変換(transform) によって Matplotlib はデータ座標をAxes、Figure、またはスクリーン座標へ変換 します。詳しくは Transformations Tutorial(変換のチュートリアル) を参照してください。
目盛り(Tick)のロケーターとフォーマッター
各 Axis
には、目盛り(tick)を どこに配置するかを決定する「ロケーター(locator)」 とどのようにラベルを表示するかを決定する「フォーマッター(formatter)」 があります。
簡単なインターフェースとして、set_xticks
を使用できます。
例:自動的な目盛りと手動の目盛り
import numpy as np
import matplotlib.pyplot as plt
# 図と軸を作成(2行1列のサブプロット)
fig, axs = plt.subplots(2, 1, layout='constrained')
# 自動目盛りのプロット
axs[0].plot(xdata, data1)
axs[0].set_title('Automatic ticks')
# 手動目盛りのプロット
axs[1].plot(xdata, data1)
axs[1].set_xticks(np.arange(0, 100, 30), ['zero', '30', 'sixty', '90']) # x軸の目盛りを手動設定
axs[1].set_yticks([-1.5, 0, 1.5]) # y軸の目盛りを手動設定(ラベル不要)
axs[1].set_title('Manual ticks')
plt.show()

異なるスケールには、それぞれ異なるロケーターとフォーマッターを使用できます。例えば、対数スケール(log-scale) では LogLocator
と LogFormatter
を使用します。他のフォーマッターやロケーターについては、Tick locators(目盛りロケーター)および Tick formatters(目盛りフォーマッター) を参照してください。また、独自のフォーマッターを作成する方法 についての情報も掲載されています。
日付や文字列のプロット
Matplotlib は、日付や文字列の配列 をプロットできます。
これらは適切なロケーターやフォーマッターが自動的に適用されます。
日付をプロット
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.dates import ConciseDateFormatter
# 図と軸を作成
fig, ax = plt.subplots(figsize=(5, 2.7), layout='constrained')
# 2021-11-15 から 2021-12-25 までの時間データを作成(1時間ごと)
dates = np.arange(np.datetime64('2021-11-15'), np.datetime64('2021-12-25'),
np.timedelta64(1, 'h'))
data = np.cumsum(np.random.randn(len(dates))) # ランダムな累積データ
# プロット
ax.plot(dates, data)
# 日付フォーマッターを設定
ax.xaxis.set_major_formatter(ConciseDateFormatter(ax.xaxis.get_major_locator()))
plt.show()

詳細は 日付の例 を参照してください。
カテゴリカルプロット(文字列データをプロット)
import numpy as np
import matplotlib.pyplot as plt
# 図と軸を作成
fig, ax = plt.subplots(figsize=(5, 2.7), layout='constrained')
# カテゴリデータ(野菜の名前)
categories = ['turnips', 'rutabaga', 'cucumber', 'pumpkins']
# バーチャートをプロット
ax.bar(categories, np.random.rand(len(categories)))
plt.show()

テキストファイルを解析する際、一部の方法では 数値や日付のデータも文字列として読み込むことがあります。もし 1000個の文字列データ を渡すと、Matplotlib は 1000個のカテゴリ をプロットすると解釈し、目盛りが 1000 個表示される 可能性があります。
詳細は カテゴリカル変数のプロット を参照。
追加の Axis
オブジェクト
異なる大きさのデータを1つのチャートにプロットする場合、追加のY軸が必要になることがあります。このような軸は、twinx
を使用して、新しいAxesを追加することで作成できます。このAxesは、X軸が不可視で、Y軸が右側に配置されます(twiny
を使用するとX軸が追加されるのと同様です)。別の例については、Plots with different scalesを参照してください。
同様に、secondary_xaxis
または secondary_yaxis
を追加することで、主軸とは異なるスケールを持つ軸を設定し、異なるスケールや単位でデータを表現することができます。詳細な例については、Secondary Axisを参照してください。
import numpy as np
import matplotlib.pyplot as plt
# 図と軸を作成(1行2列)
fig, (ax1, ax3) = plt.subplots(1, 2, figsize=(7, 2.7), layout='constrained')
# データを作成
t = np.linspace(0, 10, 100)
s = np.sin(2 * np.pi * t)
# 1つ目のプロット(左側) → `twinx` で追加の y 軸を作成
l1, = ax1.plot(t, s) # サイン波
ax2 = ax1.twinx() # 追加の y 軸
l2, = ax2.plot(t, range(len(t)), 'C1') # 直線データ
# 凡例を設定(両方の軸を含む)
ax2.legend([l1, l2], ['Sine (left)', 'Straight (right)'])
# 2つ目のプロット(右側) → `secondary_xaxis` で追加の x 軸を作成
ax3.plot(t, s) # サイン波
ax3.set_xlabel('Angle [rad]') # ラジアン表記の x 軸
# 追加の x 軸(° 表記)を作成
ax4 = ax3.secondary_xaxis('top', (np.rad2deg, np.deg2rad))
ax4.set_xlabel('Angle [°]')
plt.show()

カラーマップによるデータの可視化
プロットにおいて、3次元目の情報を色で表現することがよくあります。Matplotlib には、これを実現するためのさまざまなプロット手法が用意されています。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LogNorm
# データの作成
X, Y = np.meshgrid(np.linspace(-3, 3, 128), np.linspace(-3, 3, 128))
Z = (1 - X/2 + X**5 + Y**3) * np.exp(-X**2 - Y**2)
fig, axs = plt.subplots(2, 2, layout='constrained')
# pcolormesh() を使用したプロット
pc = axs[0, 0].pcolormesh(X, Y, Z, vmin=-1, vmax=1, cmap='RdBu_r')
fig.colorbar(pc, ax=axs[0, 0])
axs[0, 0].set_title('pcolormesh()')
# contourf() を使用したプロット
co = axs[0, 1].contourf(X, Y, Z, levels=np.linspace(-1.25, 1.25, 11))
fig.colorbar(co, ax=axs[0, 1])
axs[0, 1].set_title('contourf()')
# imshow() と LogNorm() を使用したプロット
pc = axs[1, 0].imshow(Z**2 * 100, cmap='plasma', norm=LogNorm(vmin=0.01, vmax=100))
fig.colorbar(pc, ax=axs[1, 0], extend='both')
axs[1, 0].set_title('imshow() with LogNorm()')
# scatter() を使用したプロット(data1, data2, data3 は仮のデータ)
data1 = np.random.rand(100)
data2 = np.random.rand(100)
data3 = np.random.rand(100)
pc = axs[1, 1].scatter(data1, data2, c=data3, cmap='RdBu_r')
fig.colorbar(pc, ax=axs[1, 1], extend='both')
axs[1, 1].set_title('scatter()')
plt.show()

カラーマップ (Colormaps)
Matplotlib の ScalarMappable
を継承するオブジェクトは、すべて vmin
から vmax
までの範囲を指定したカラーマップ (cmap
) に線形マッピングすることができます。
Matplotlib には多くのカラーマップが用意されており (Choosing Colormaps in Matplotlib)、独自のカラーマップを作成したり (Creating Colormaps in Matplotlib)、サードパーティのパッケージを利用することも可能です。
正規化 (Normalizations)
データをカラーマップへ非線形にマッピングしたい場合、vmin
と vmax
の代わりに norm
引数を ScalarMappable
に渡します。例えば、上記の LogNorm
の例のように、対数スケールでデータを変換することができます。その他の正規化手法については、Colormap normalization を参照してください。
カラーバー (Colorbars)
カラーバーを追加すると、色とデータの対応関係が視覚的にわかるようになります。カラーバーは Figure レベルの Artist であり、ScalarMappable
に関連付けられます (norm
や cmap
の情報を取得するため)。通常、カラーバーは親 Axes のスペースを一部占有するため、配置には注意が必要です。詳細な配置方法については Placing colorbars を参照してください。
カラーバーの外観は、以下のようにカスタマイズできます:
extend
引数を使って、カラーバーの端に矢印を追加。shrink
やaspect
を使って、カラーバーのサイズを調整。
また、カラーバーの 目盛りの配置 (locators) や表示フォーマット (formatters) は、他の Axis オブジェクトと同様に変更できます。
複数の Figure と Axes の操作
Matplotlib では、fig = plt.figure()
や fig2, ax = plt.subplots()
を複数回呼び出すことで 複数の Figure を同時に開く ことができます。Figure オブジェクトの参照を保持しておけば、それぞれの Figure に Artist を追加することが可能です。
複数の Axes を作成する方法はいくつかありますが、最も基本的なのは plt.subplots()
を使用する方法です。
さらに、subplot_mosaic
を使用すると、行や列をまたぐ より複雑なレイアウト を実現できます。
subplot_mosaic
を使用したレイアウト例
import matplotlib.pyplot as plt
fig, axd = plt.subplot_mosaic([['upleft', 'right'],
['lowleft', 'right']], layout='constrained')
axd['upleft'].set_title('upleft')
axd['lowleft'].set_title('lowleft')
axd['right'].set_title('right')
plt.show()

Matplotlib には Axes を配置するための非常に高度なツールがあります。詳しくは、Arranging multiple Axes in a Figure および Complex and semantic figure composition (subplot_mosaic) を参照してください。
さらに読む
より多くのプロットタイプについては、Plot types および API reference、特に Axes API を参照してください。