ローソク足チャートを matplotlib だけで描こうとすると、四角と髭を 1 本ずつ描く処理を書く必要があります。これを薄くラップして、OHLC(始値・高値・安値・終値) と日付があれば 1 行で描けるようにしたのが mplfinance です。

本記事では、mplfinance の基本的な呼び出しと、移動平均線・出来高サブプロットを組み合わせるパターンを示します。

目次

  1. インストール
  2. サンプルデータの準備
  3. 最もシンプルな呼び出し
  4. 出来高サブプロットを足す
  5. 移動平均線を重ねる
  6. カスタム指標を重ねる(addplot)
  7. スタイル(色・テーマ)
  8. 期間を絞って描く

インストール

Terminal window
pip install mplfinance pandas

検証バージョン: Python 3.12.5 / mplfinance 0.12.10b0 / pandas 2.2.3

サンプルデータの準備

mplfinance は OpenHighLowCloseVolume5 列を持つ DataFrame で、DatetimeIndex を期待します。J-Quants V2 API は O/H/L/C/Vo という省略名で返すため、取得後に mplfinance 用の列名へ変換します。学習用に乱数で OHLC を生成します。

import numpy as np
import pandas as pd
rng = np.random.default_rng(7)
dates = pd.date_range("2026-01-05", periods=80, freq="B")
close = 2900 + rng.normal(0, 30, len(dates)).cumsum()
# J-Quants V2 の列名(O/H/L/C/Vo)で疑似 OHLC を生成
df = pd.DataFrame(index=dates)
df.index.name = "Date"
df["O"] = close + rng.normal(0, 5, len(dates))
df["H"] = np.maximum(df["O"], close) + np.abs(rng.normal(0, 8, len(dates)))
df["L"] = np.minimum(df["O"], close) - np.abs(rng.normal(0, 8, len(dates)))
df["C"] = close
df["Vo"] = rng.integers(8_000_000, 15_000_000, len(dates))
# mplfinance は Open/High/Low/Close/Volume を要求するため変換する
df = df.rename(columns={"O": "Open", "H": "High", "L": "Low", "C": "Close", "Vo": "Volume"})
print(df.head())

mplfinance は 列名・インデックス名の大文字小文字に厳格 です。Open/High/Low/Close/VolumeDate を厳守します(J-Quants V2 の O/H/L/C/Vo から変換した状態)。

最もシンプルな呼び出し

import mplfinance as mpf
mpf.plot(df, type="candle", style="charles", savefig="candle_basic.png")
基本のローソク足チャート

type="candle" でローソク足、style="charles" でカジュアルな白背景になります。savefig を渡すとファイル保存だけして画面表示はしません。

type には "line"(終値ライン)、"ohlc"(バーチャート)、"renko" などがあります。

出来高サブプロットを足す

volume=True を指定すると、下段に出来高の棒グラフが自動で並びます。

mpf.plot(
df,
type="candle",
style="charles",
volume=True,
figratio=(12, 6),
title="Synthetic OHLC",
savefig="candle_volume.png",
)

figratio は縦横比、title はタイトルです。サブプロットの高さ比は内部で自動調整されます。

移動平均線を重ねる

mav 引数に整数のタプルを渡すと、その期間の単純移動平均を自動で計算して重ねます。

mpf.plot(
df,
type="candle",
style="charles",
mav=(5, 25, 75),
volume=True,
figratio=(12, 6),
title="OHLC with SMA(5,25,75)",
savefig="candle_mav.png",
)
出来高と移動平均線つきローソク足

5 日・25 日・75 日の SMA が線で表示されます。色は style から自動で割り当てられます。

mav を自分で計算した値で重ねたい場合や、EMA を表示したい場合は、後述の addplot を使います。

カスタム指標を重ねる(addplot)

ボリンジャーバンドや独自シグナルを重ねるときは addplot を使います。先に DataFrame に同じインデックスで値を加え、mpf.make_addplot で指示します。

df["sma_25"] = df["Close"].rolling(25).mean()
df["upper"] = df["sma_25"] + 2 * df["Close"].rolling(25).std()
df["lower"] = df["sma_25"] - 2 * df["Close"].rolling(25).std()
addplots = [
mpf.make_addplot(df["sma_25"], color="C0", width=1.0),
mpf.make_addplot(df["upper"], color="C1", width=0.8, linestyle="--"),
mpf.make_addplot(df["lower"], color="C1", width=0.8, linestyle="--"),
]
mpf.plot(
df,
type="candle",
style="charles",
addplot=addplots,
volume=True,
figratio=(12, 6),
title="Bollinger bands (25, 2σ)",
savefig="candle_bb.png",
)

make_addplotpanel= 引数で「下段に別パネルを足す」こともできます。RSI や MACD などのオシレーター系を別パネルで描く時に使います。

df["rsi"] = 50 + rng.normal(0, 10, len(dates)) # 学習用ダミー
addplots = [
mpf.make_addplot(df["rsi"], panel=2, color="C2", ylabel="RSI"),
]
mpf.plot(
df,
type="candle",
style="charles",
addplot=addplots,
volume=True,
panel_ratios=(3, 1, 1),
figratio=(12, 7),
savefig="candle_rsi.png",
)

panel=0 がメインパネル、panel=1 が出来高パネル、それ以降は追加パネルになります。panel_ratios で各パネルの高さ比を指定します。

スタイル(色・テーマ)

style で全体の見た目を切り替えます。

スタイル印象
"default"標準。やや古典的
"charles"薄い白背景、ローソクは赤緑
"yahoo"Yahoo! Finance 風の白基調
"binance"黒背景、暗号資産系の見た目
"checkers"チェック柄の落ち着いた背景

カスタムスタイルを作りたいときは mpf.make_marketcolorsmpf.make_mpf_style を使います。

mc = mpf.make_marketcolors(up="#2ca02c", down="#d62728", inherit=True)
custom_style = mpf.make_mpf_style(base_mpf_style="yahoo", marketcolors=mc)
mpf.plot(df, type="candle", style=custom_style, savefig="candle_custom.png")

期間を絞って描く

長期データを丸ごと描くと潰れて見えません。スライスで期間を絞ってから渡します。

df_recent = df.loc["2026-03":]
mpf.plot(df_recent, type="candle", style="charles", mav=(5, 25), volume=True,
savefig="candle_recent.png")

DatetimeIndex の文字列スライス(#4-4「pandas で時系列を扱う」)が使えるため、簡潔に範囲を指定できます。

注意点

  • mplfinance はラッパーである以上、こまかい体裁調整(目盛りフォント、第 2 軸など)は限界があります。込み入った調整が必要なら、生の matplotlib に戻るか、Plotly(#4-8「Plotly でインタラクティブな株価チャート」)を検討します
  • 出来高列に欠損があると描画に失敗します。fillna(0) などで埋めてから渡します
  • mav のような自動計算は便利ですが、長期 SMA を含めるとデータの先頭が歯抜けになります。期間を絞るか、SMA を別途計算して addplot で渡すのも一手です

生成AI へのプロンプト例

mplfinance はインターフェースがやや独特なので、要件を具体化してプロンプトを書きます。

mplfinance でローソク足チャートを描くコードを書いてください。
入力:
- df: DatetimeIndex を持つ DataFrame
- 列: O, H, L, C, Vo
- 期間: 直近 6 ヶ月分
要件:
- メインパネルに SMA(25) と SMA(75) を重ねる(自分で計算して addplot で渡す)
- 下段に出来高、さらに下段に RSI(14) のサブパネル
- panel_ratios は (3, 1, 1)
- スタイルは "charles"、figratio は (12, 7)
- 結果は dpi=120 で candle.png に保存
- mplfinance 0.12 系

「列名」「パネル構成」「期間」を明示するのがコツです。

まとめ