この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:7
ページ更新者:T
更新日時:2026-06-11 07:29:05

タイトル: 線の種類
SEOタイトル: Matplotlib 線グラフ 線種完全ガイド

この記事の要点
  • Matplotlib の線種は linestyle 引数で指定。"-" / "--" / ":" / "-." が標準 4 種
  • "None""" で線を消してマーカーだけにできる
  • タプル (0, (3, 1, 1, 1))カスタムダッシュパターンを作れる
  • フォーマット文字列 "r--" 等で 色+線種+マーカーをまとめて指定
  • グレースケール印刷では色だけでなく 線種で系列を区別するのが推奨

標準の線種 4 種

Matplotlib 線種のサンプル
linestyle 値記号見た目用途
'solid''-'実線 ─メイン系列
'dashed''--'破線 ─ ─ ─サブ系列・予測値
'dotted'':'点線 · · · · ·補助線・閾値
'dashdot''-.'一点鎖線 ─·─·─区切り線
'None' / ''線なしマーカーだけ表示

基本的な使い方

import matplotlib.pyplot as plt
import numpy as np

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

# linestyle 引数で指定
plt.plot(x, np.sin(x),       linestyle='-',  label='solid')
plt.plot(x, np.sin(x) + 0.5, linestyle='--', label='dashed')
plt.plot(x, np.sin(x) + 1.0, linestyle=':',  label='dotted')
plt.plot(x, np.sin(x) + 1.5, linestyle='-.', label='dashdot')

plt.legend()
plt.show()

# 短縮形 (ls)
plt.plot(x, np.sin(x), ls='--')

フォーマット文字列で一括指定

plot() の 3 番目の引数として、色 + マーカー + 線種を文字列で渡せます (MATLAB 由来の記法):

# 'r--' = 赤の破線
plt.plot(x, y, 'r--')

# 'go-' = 緑の丸マーカー + 実線
plt.plot(x, y, 'go-')

# 'k:' = 黒の点線
plt.plot(x, y, 'k:')

# 'bs-.' = 青の四角マーカー + 一点鎖線
plt.plot(x, y, 'bs-.')

# 'm^' = マゼンタの三角マーカー (線なし)
plt.plot(x, y, 'm^')
記号マーカー記号
blue 青bpoint ..
green 緑gcircle ●o
red 赤rtriangle ▲^
cyan シアンcsquare ■s
magenta マゼンタmplus ++
yellow 黄ycross ×x
black 黒kdiamond ◆D
white 白wstar ★*

linewidth で太さを変える

plt.plot(x, np.sin(x), linestyle='-',  linewidth=0.5, label='細')
plt.plot(x, np.cos(x), linestyle='-',  linewidth=2,   label='中')
plt.plot(x, np.tan(x), linestyle='-',  linewidth=4,   label='太')

# 短縮形 (lw)
plt.plot(x, y, ls='--', lw=2.5)

カスタムダッシュパターン

タプルで (オフセット, (on, off, on, off, ...)) 形式で指定できます。on は線、off は空白の長さ:

# (オフセット, (実線長, 空白長, 実線長, 空白長, ...))

# 長破線
plt.plot(x, y, linestyle=(0, (5, 5)), label='loosely dashed')

# 緊密な点線
plt.plot(x, y, linestyle=(0, (1, 1)), label='densely dotted')

# 二点鎖線 (実線 3 - 空白 1 - 点 1 - 空白 1)
plt.plot(x, y, linestyle=(0, (3, 1, 1, 1)), label='custom')

# 三点鎖線
plt.plot(x, y, linestyle=(0, (3, 1, 1, 1, 1, 1)), label='dash-dot-dot')

# 名前付きスタイル (Matplotlib 3.x)
plt.plot(x, y, linestyle='loosely dashed')
plt.plot(x, y, linestyle='densely dotted')
名前タプル
loosely dotted(0, (1, 10))
dotted(0, (1, 1))
densely dotted(0, (1, 1))
loosely dashed(0, (5, 10))
dashed(0, (5, 5))
densely dashed(0, (5, 1))
loosely dashdotted(0, (3, 10, 1, 10))
dashdotted(0, (3, 5, 1, 5))
densely dashdotted(0, (3, 1, 1, 1))
dashdotdotted(0, (3, 5, 1, 5, 1, 5))

set_dashes() メソッド

Line2D オブジェクトに直接ダッシュパターンを設定する方法:

fig, ax = plt.subplots()
line, = ax.plot(x, y)

# 後からダッシュパターンを変更
line.set_dashes([5, 2, 1, 2])    # 実線 5 - 空白 2 - 点 1 - 空白 2
line.set_linestyle('--')
line.set_linewidth(2)

plt.show()

複数系列を区別する

系列数が多いときは、色だけでなく線種・マーカーも組み合わせるとわかりやすいです:

styles = ['-', '--', ':', '-.', (0, (3, 1, 1, 1))]
colors = ['C0', 'C1', 'C2', 'C3', 'C4']  # デフォルトカラーサイクル
markers = ['o', 's', '^', 'D', '*']

for i, (s, c, m) in enumerate(zip(styles, colors, markers)):
    plt.plot(x, np.sin(x + i),
             linestyle=s, color=c, marker=m,
             markevery=10,        # 10 点ごとにマーカー
             label=f'series {i+1}')

plt.legend()
plt.show()

グレースケール印刷向けの工夫

論文・印刷物では色が出ないことが多いため、線種で区別する習慣を付けると安全です:

# グレースケール + 線種で区別
plt.plot(x, y1, color='black', linestyle='-',  label='実測')
plt.plot(x, y2, color='black', linestyle='--', label='理論値')
plt.plot(x, y3, color='black', linestyle=':',  label='予測')
plt.plot(x, y4, color='gray',  linestyle='-.', label='対照')

# またはカラーマップで濃淡
import matplotlib.cm as cm
for i, y in enumerate(ys):
    plt.plot(x, y, color=cm.gray(i / len(ys)))

Seaborn の linestyle

Seaborn は色とスタイルを変数の値に応じて自動割当する style 引数を持ちます:

import seaborn as sns
import pandas as pd

df = pd.DataFrame({
    'time': [...],
    'value': [...],
    'group': ['A', 'B', 'A', 'B', ...],
})

# group 列の値ごとに自動で線種を割り当て
sns.lineplot(data=df, x='time', y='value',
             hue='group',     # 色も group で
             style='group',   # 線種も group で
             markers=True,    # マーカーも表示
             dashes=True)

軸線・補助線のスタイル

fig, ax = plt.subplots()

# 水平線・垂直線 (axhline / axvline)
ax.axhline(y=0, color='gray', linestyle='-',  linewidth=0.5)
ax.axvline(x=0, color='red',  linestyle='--', linewidth=1)

# グリッド
ax.grid(True, which='major', linestyle='-',  alpha=0.7)
ax.grid(True, which='minor', linestyle=':',  alpha=0.4)

# 閾値表示
ax.axhline(y=100, color='red', linestyle='--', label='上限')
ax.axhline(y=20,  color='blue', linestyle='--', label='下限')

# 矩形領域のハッチング (塗りつぶしの線パターン)
ax.fill_between(x, y, alpha=0.3, hatch='//', edgecolor='black')

FAQ

Q: 線種ではなく点だけプロットしたい
A: linestyle='None' を指定し、marker='o' 等を付けます。または plt.scatter() を使う。

Q: ダッシュパターンが思い通りにならない
A: (オフセット, (on, off, ...)) の値はポイント単位で、linewidth に応じて見え方が変わります。lw を変えたらパターンも調整してください。

Q: 線の端の形を変えたい
A: solid_capstyle / dash_capstyle'butt' / 'round' / 'projecting' を指定できます。