Matplotlib plot() 関数


Matplotlib リファレンスドキュメント

plot()Matplotlib の中で最も中心となる関数で、折れ線グラフの描画に使用されます。

指定された x と y の座標点を結んで線を作成し、色、線種、マーカー、線幅のカスタマイズをサポートします。

関数定義

pyplot インターフェース

matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)

Axes インターフェース

Axes.plot(*args, scalex=True, scaley=True, data=None, **kwargs)

パラメータ説明

パラメータ型説明
*args可変長引数複数の呼び出し方をサポート:plot(y)、plot(x, y)、plot(x, y, 'fmt')、plot(x1, y1, 'fmt1', x2, y2, 'fmt2', ...)
scalex / scaleyboolx/y 軸をデータに合わせて自動スケーリングするかどうか。デフォルトは True
dataインデックス可能なオブジェクト提供された場合、文字列を引数として使用し、その中のデータ列を参照できます。
color または ccolor線の色。例: 'red'、'#ff0000'、'tab:blue'
linestyle または lsstr線種:'-'(実線)、'--'(破線)、'-.'(一点鎖線)、':'(点線)、''(線なし)
linewidth または lwfloat線の幅。デフォルトは約 1.5
markerstrデータ点のマーカー:'.'、'o'、's'、'^'、'*'、'+'(プラス記号)、'x' など
markersize または msfloatマーカーのサイズ
labelstr凡例ラベル。legend() と一緒に使用します。
alphafloat透明度。0(完全に透明)から 1(完全に不透明)
zorderfloatレイヤー順序。数値が大きいほど上に表示されます。

fmt 書式文字列は3つの部分から構成されます:'[色][マーカー][線種]'、例えば'ro--'赤色、丸マーカー、破線を表します。各部分の順序は任意に並べられます。

よく使う色の略記

文字色文字色
'b'青 blue'r'赤 red
'g'緑 green'c'シアン cyan
'm'マゼンタ magenta'y'黄 yellow
'k'黒 black'w'白 white

使用例

例1:最も簡単な折れ線グラフ

y 値のみを渡すと、x は自動的に 0 から始まるインデックスが使われます。

例

import matplotlib.pyplot as plt
import numpy as np

# 0〜10 の間の50個のデータポイントを生成
x = np.linspace(0, 10, 50)
y = np.sin(x)  # 正弦関数

# 最も簡単な呼び出し:x, y
plt.plot(x, y)

plt.title('Simple Line Plot')
plt.xlabel('x')
plt.ylabel('sin(x)')
plt.grid(True, alpha=0.3)
plt.show()

例2:複数の曲線 + 書式文字列

同じグラフ上に複数の曲線を、異なる色、線種、マーカーを使って描画します。

例

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 50)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.sin(x) * np.exp(-x / 3)  # 減衰正弦

# 複数の曲線、それぞれ異なる書式
plt.plot(x, y1, 'b-o', label='sin(x)')           # 青の実線 + 丸点
plt.plot(x, y2, 'r--s', label='cos(x)')          # 赤の破線 + 四角
plt.plot(x, y3, 'g-.^', label='damped sin(x)')   # 緑の一点鎖線 + 三角

plt.title('Multiple Lines with Different Styles')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()

例3:キーワード引数を使用してスタイルをカスタマイズ

キーワード引数を使用して、線の外観をより細かく制御します。

例

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 * np.pi, 100)

fig, ax = plt.subplots(figsize=(8, 4), layout='constrained')

# 書式文字列ではなくキーワード引数を使うと読みやすい
ax.plot(x, np.sin(x),
        color='steelblue',        # 色名
        linestyle='-',            # 実線
        linewidth=2.5,            # 線幅
        marker='o',               # 丸マーカー
        markersize=4,             # マーカーサイズ
        markerfacecolor='red',    # マーカーの塗りつぶし色
        markeredgecolor='black',  # マーカーの枠線の色
        markeredgewidth=0.5,      # マーカーの枠線の幅
        alpha=0.8,                # 全体の透明度
        label='sin(x)')

# 比較:マーカーなしの破線
ax.plot(x, np.cos(x),
        color='#ff6600',          # 16進数の色
        linestyle='--',
        linewidth=2,
        label='cos(x)')

ax.set_title('Customized Line Styles', fontsize=14)
ax.set_xlabel('x (radians)')
ax.set_ylabel('Amplitude')
ax.legend(loc='upper right')
ax.grid(True, alpha=0.2)
plt.show()
print("サンプル: customized plot displayed")

例4:data パラメータを使用(DataFrame 対応)

データが dict または pandas DataFrame の場合、文字列の列名を使用できます。

例

import matplotlib.pyplot as plt
import numpy as np

# データを辞書として整理する
data = {
    'time': np.arange(0, 10, 0.5),
    'voltage': np.sin(np.arange(0, 10, 0.5)) * 5 + 10,
    'current': np.cos(np.arange(0, 10, 0.5)) * 2 + 5,
}

fig, ax = plt.subplots(layout='constrained')

# data パラメータ + 文字列の列名でデータを参照する
ax.plot('time', 'voltage', 'b-', data=data, label='Voltage (V)')
ax.plot('time', 'current', 'r--', data=data, label='Current (A)')

ax.set_title('Using data Parameter with Column Names')
ax.set_xlabel('Time (s)')
ax.set_ylabel('Value')
ax.legend()
ax.grid(True, alpha=0.3)
plt.show()

例5:Axes オブジェクト上で呼び出す(推奨方法)

オブジェクト指向の Axes インターフェースを使用すると、複数サブプロットの場面でより明確になります。

例

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)

# 2つの横並びのサブプロットを作成
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4),
                                layout='constrained')

# 左のサブプロット:数学関数
ax1.plot(x, np.sin(x), label='sin(x)')
ax1.plot(x, np.cos(x), label='cos(x)')
ax1.set_title('Math Functions')
ax1.legend()
ax1.grid(True, alpha=0.3)

# 右のサブプロット:データ傾向
data = np.random.randn(100).cumsum()  # ランダムウォーク
ax2.plot(data, color='teal', linewidth=1.5)
ax2.set_title('Random Walk (cumulative sum)')
ax2.set_xlabel('Step')
ax2.set_ylabel('Position')
ax2.grid(True, alpha=0.3)

plt.show()

よくある質問

plot() における x と y の順序

標準の呼び出しはplot(x, y)、x が前、y が後です。

配列を1つだけ渡す場合、例えばplot(y)、x は自動的にインデックスを使用します。range(0, len(y))。

非連続の線分を描画するには?

NaN を含むデータの場合、plot() は NaN の位置で自動的に線分を分割し、これを使って区分線を描画できます。

fmt 文字列とキーワード引数は同時に使用できますか?

はい、キーワード引数は fmt 文字列内の対応する設定を上書きします。例えばplot(x, y, 'ro', color='blue')では、marker='o' は fmt に由来しますが、color は blue に上書きされます。


Matplotlib リファレンスドキュメント

その他の拡張