Pythonで株価チャートを表示する方法【matplotlib・yfinance】

Uncategorized

※本記事には広告・アフィリエイトリンクが含まれます。掲載内容は筆者の調査・検証に基づき、読者の判断を助ける目的で作成しています。

結論から言うと

  • yfinanceで取得した株価データをmatplotlibに渡すだけで、シンプルな折れ線チャートが表示できます
  • タイトル・凡例・グリッドを加えるだけで、見た目の整ったチャートになる仕組みです
  • 複数銘柄を1グラフに重ねることも、PNG保存することも数行で実装できます

率直に言うと、matplotlibは設定項目が多く最初は戸惑いますが、株価チャートを表示するだけなら最低限のコードで動きます。実際にトヨタ(7203.T)・ソニー(6758.T)・ソフトバンクG(9984.T)で確認したコードを掲載しています。

動作確認環境:Python 3.11 / pandas 2.x / yfinance 0.2.x / matplotlib 3.x

必要なライブラリ

matplotlibとyfinanceが必要です。インストールしていない場合は以下のコマンドで導入します。

pip install yfinance matplotlib

基本的な株価チャートを表示するコード

yfinanceでデータを取得し、matplotlibで折れ線グラフとして表示する基本的なコードです。

import yfinance as yf
import matplotlib.pyplot as plt

# トヨタの株価取得
df = yf.download("7203.T", period="6mo")

# チャート表示
plt.figure(figsize=(12, 5))
plt.plot(df.index, df["Close"], label="トヨタ(7203.T)")
plt.title("トヨタ自動車 株価チャート")
plt.xlabel("日付")
plt.ylabel("終値(円)")
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()

figsize=(12, 5)は横12インチ・縦5インチのサイズ指定です。画面に合わせて調整するとよいです。tight_layout()はラベルが切れないよう余白を自動調整する関数です。

日本語フォントを設定する方法

matplotlibはデフォルトでは日本語フォントが設定されていないため、タイトルや軸ラベルに日本語を使うと文字化けが発生することがあります。

import matplotlib.pyplot as plt
import matplotlib
# Windowsの場合
matplotlib.rcParams['font.family'] = 'MS Gothic'

# Macの場合
# matplotlib.rcParams['font.family'] = 'Hiragino Sans'

# Linux(japanize-matplotlibを使う方法)
# pip install japanize-matplotlib
# import japanize_matplotlib

また、japanize-matplotlibライブラリを使うと、インポートするだけで日本語フォントが自動的に適用されるため環境を選ばずに使えます。

複数銘柄を1つのグラフに表示する方法

複数の銘柄を比較したい場合は、plt.plot()を繰り返すだけで重ねて表示できます。ただし株価の絶対値が異なる銘柄を比較する場合は正規化(基準日を100とする)が有効です。

import yfinance as yf
import matplotlib.pyplot as plt

tickers = {"7203.T": "トヨタ", "6758.T": "ソニー", "9984.T": "ソフトバンクG"}
data = yf.download(list(tickers.keys()), period="6mo")["Close"]

# 正規化(最初の終値を100として相対比較)
data_norm = data / data.iloc[0] * 100

plt.figure(figsize=(12, 5))
for ticker, name in tickers.items():
    plt.plot(data_norm.index, data_norm[ticker], label=name)

plt.title("株価パフォーマンス比較(基準日=100)")
plt.xlabel("日付")
plt.ylabel("相対パフォーマンス")
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()

見た目を改善する(グリッド・色・タイトル)

グラフの見た目をカスタマイズする主なオプションをまとめます。

import yfinance as yf
import matplotlib.pyplot as plt

df = yf.download("7203.T", period="6mo")

plt.figure(figsize=(12, 5), facecolor='white')
plt.plot(df.index, df["Close"],
         color='#1a5fa8',    # 線の色
         linewidth=1.5,       # 線の太さ
         label="終値")

# グリッドを薄く表示
plt.grid(True, alpha=0.3, linestyle='--')

# タイトルと軸ラベル
plt.title("トヨタ自動車(7203.T)株価チャート", fontsize=14, pad=10)
plt.xlabel("日付", fontsize=12)
plt.ylabel("終値(円)", fontsize=12)

plt.legend(fontsize=11)
plt.tight_layout()
plt.show()

チャートをPNG保存する方法

plt.show()の代わりにplt.savefig()を使うと、グラフをファイルとして保存できます。

plt.savefig("toyota_chart.png", dpi=150, bbox_inches='tight')

dpi=150は解像度の指定です。スクリーン表示なら72〜96、印刷用途なら150〜300が目安です。bbox_inches='tight'は余白を自動調整するオプションです。

筆者の検証メモ

トヨタ(7203.T)の6ヶ月チャートで動作を確認しました。yfinance 0.2.x環境ではdf["Close"]が2次元DataFrameとして返ることがあるため、df["Close"].squeeze()を使うと1次元Seriesに変換でき、matplotlibとの相性が安定します。また、複数銘柄を正規化して比較したところ、ソフトバンクGの値動きの大きさが視覚的に把握しやすくなりました。

次のステップ(移動平均線を追加する)

チャートが表示できたら、次は移動平均線を重ねて表示するとトレンドの分析がしやすくなります。pandasのrolling()を使って実装できます。

データ取得方法の比較はこちら
yfinance以外のデータ取得手段も含めた比較:Python株価データ取得ライブラリ比較

※当サイトの内容は投資判断を推奨するものではありません。掲載しているコード・分析例は学習・検証目的であり、実際の投資はご自身の責任で行ってください。

🔗 関連記事

Pythonで移動平均線を表示する方法【pandas・matplotlib・コードあり】

タイトルとURLをコピーしました