Python | ファイル・OS 操作:pandas.plot

Python Python
スポンサーリンク

概要(pandas.plotは「DataFrameを即グラフ化」する最短ルート)

pandasのplotは、DataFrameやSeriesから折れ線・棒・散布図などを1行で描ける可視化機能です。内部でmatplotlibと連携して動き、デフォルトではインデックスを横軸、各数値列を縦軸とした折れ線グラフを描きます。グラフの種類はkind引数で切り替え、タイトルや軸ラベル、凡例などはmatplotlibの関数で仕上げるのが基本です。


基本の使い方(ここが重要)

最短の折れ線グラフとx/yの指定

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({
    "月": ["1月","2月","3月","4月"],
    "売上": [100, 120, 130, 90]
})

# デフォルト(折れ線):インデックスがx、数値列がy
df.plot()

# 列を軸に指定して1系列を明示
df.plot(x="月", y="売上", kind="line")
plt.title("月別売上推移")
plt.ylabel("売上(万円)")
plt.grid(True)
plt.show()
Python

plotはmatplotlibへ橋渡しするラッパーで、x/yやkindを指定すると直感的に目的のグラフが得られます。

グラフの種類をkindで切り替え

# 縦棒・横棒・散布図など
df.plot(x="月", y="売上", kind="bar")
df.plot(x="月", y="売上", kind="barh")
df.plot(x="月", y="売上", kind="line")
df.plot(x="月", y="売上", kind="scatter")
Python

代表的なkindにはline(折れ線)、bar(縦棒)、barh(横棒)、hist(ヒストグラム)、box(箱ひげ図)、kde/density(密度)、pie(円)、scatter(散布)、area(積み上げ)、hexbin(2次元ビニング)などがあり、plot系メソッドで網羅的に使えます。


よく使う調整(見やすさとレイアウト)

figsize・色・スタイル・凡例・タイトル

ax = df.plot(x="月", y="売上", kind="line", figsize=(6,4), color="#4F81BD", style="-o")
ax.legend(loc="best")
ax.set_title("月別売上")
ax.set_xlabel("月")
ax.set_ylabel("売上(万円)")
plt.tight_layout()
plt.show()
Python

pandasのplotはAxesを返すので、matplotlib側でラベル・凡例・余白調整を加えるのが定石です。

複数列を同時に描く・副軸を使う

df2 = pd.DataFrame({
    "月": ["1月","2月","3月","4月"],
    "売上": [100,120,130,90],
    "費用": [70,80,85,75]
})

# 同じ軸に複数系列
df2.plot(x="月", y=["売上", "費用"], kind="line")

# 副軸(右側)で別スケールの系列
df2.plot(x="月", y="売上", kind="line")
df2.plot(x="月", y="費用", kind="line", secondary_y=True)
plt.show()
Python

複数列はyにリストを渡せば重ね描きできます。secondary_y=Trueで右軸へ切り替え、スケールが違う指標を同じ図に共存させられます。

サブプロットに分ける

df2.set_index("月").plot(subplots=True, layout=(2,1), figsize=(6,6), sharex=True)
plt.show()
Python

subplots=Trueで列ごとに別グラフへ。layoutで行列配置、sharexで横軸共有などが可能です。


実務の勘所(時系列・カテゴリ・フォント・保存)

時系列の扱い(DatetimeIndexで軸が賢くなる)

import numpy as np
dates = pd.date_range("2025-01-01", periods=6, freq="M")
df = pd.DataFrame({"売上": np.random.randint(80,150, size=6)}, index=dates)
df.plot(kind="line")
plt.title("月次売上")
plt.show()
Python

インデックスが日時なら軸の目盛りやラベルが自動調整され、時系列の傾向が読みやすくなります。

カテゴリ別の棒グラフ・積み上げ

cat = pd.DataFrame({
    "製品": ["A","B","C"],
    "1月": [10, 12, 9],
    "2月": [11, 8, 13]
}).set_index("製品")

# 横に並べる棒
cat.plot(kind="bar")

# 積み上げ
cat.plot(kind="bar", stacked=True)
plt.show()
Python

棒・積み上げはカテゴリの比較に向き、割合や構成の変化を掴みやすい表現です。

日本語フォントの設定(文字化け対策)

import matplotlib.pyplot as plt
plt.rcParams["font.family"] = "DejaVu Sans"  # 実環境の日本語フォントに合わせて変更
df.plot(kind="line")
plt.title("売上推移(日本語)")
plt.show()
Python

matplotlib側でフォントを指定しておくと、日本語ラベルの文字化けを避けられます。可視化前に一度だけ設定しておくと楽です。

画像として保存(レポート連携)

ax = df.plot(x="月", y="売上", kind="line")
plt.savefig("sales.png", dpi=150, bbox_inches="tight")
Python

savefigでファイル出力すれば、レポートや資料へ簡単に組み込めます。


応用の型(ヒスト・箱ひげ・散布・密度)

分布を見る(ヒストグラムと箱ひげ)

s = pd.Series([1,2,2,3,3,3,4,5,5,6,7,8,9])
s.plot(kind="hist", bins=5, alpha=0.7)
plt.title("スコア分布")
plt.show()

s.plot(kind="box")
plt.title("スコアの箱ひげ図")
plt.show()
Python

ヒストは値の偏り、箱ひげは中央値・四分位・外れ値を俯瞰できます。

相関の可視化(散布図と密度)

df = pd.DataFrame({"x": [1,2,3,4,5], "y": [2,4,2,5,7]})
df.plot(kind="scatter", x="x", y="y")
plt.title("散布図")
plt.show()

df.plot(kind="kde")  # 連続値の密度推定
plt.title("密度プロット")
plt.show()
Python

散布図で関係性、kde/densityで分布の滑らかな形を捉えます。


例題で身につける(定番から一歩先まで)

例題1:折れ線→棒→散布を一気に試す

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({"月": ["1月","2月","3月","4月"], "売上": [100,120,130,90]})
df.plot(x="月", y="売上", kind="line"); plt.show()
df.plot(x="月", y="売上", kind="bar");  plt.show()
df.plot(x="月", y="売上", kind="scatter"); plt.show()
Python

pandas.plotはkindの切り替えだけで多様なグラフに展開でき、学習コストが低いのが魅力です。

例題2:複数系列を副軸で見やすく

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({
    "月": ["1月","2月","3月","4月"],
    "売上": [100,120,130,90],
    "利益": [30,25,35,20]
})
ax = df.plot(x="月", y="売上", kind="line")
df.plot(x="月", y="利益", kind="line", secondary_y=True, ax=ax)
ax.set_title("売上と利益"); plt.show()
Python

スケールが異なる系列を重ねる場合、副軸で視認性を確保します。

例題3:時系列×複数列をサブプロットに分割

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

dates = pd.date_range("2025-01-01", periods=6, freq="M")
df = pd.DataFrame({"売上": np.random.randint(80,150,6), "費用": np.random.randint(60,120,6)}, index=dates)
df.plot(subplots=True, layout=(2,1), figsize=(6,5), sharex=True)
plt.tight_layout(); plt.show()
Python

列ごとの特徴を分けて見たい時はsubplotsが有効です。

例題4:カテゴリ×積み上げ棒で構成比を把握

import pandas as pd
import matplotlib.pyplot as plt

cat = pd.DataFrame({
    "製品": ["A","B","C"],
    "1月": [10,12,9],
    "2月": [11,8,13]
}).set_index("製品")

cat.plot(kind="bar", stacked=True)
plt.title("製品別・月別の構成"); plt.show()
Python

積み上げ棒は全体の推移と各系列の寄与を同時に把握できます。


まとめ

pandas.plotは「DataFrameからそのままグラフ」を作る入口で、kindで種類を切り替え、matplotlibで仕上げるのが型です。x/yの指定で意図した軸を明示し、figsize・色・凡例・タイトル・副軸・サブプロットで見やすさを整える。時系列はDatetimeIndexで軸が賢くなり、カテゴリは棒・積み上げで比較しやすい。日本語フォントはmatplotlib設定で解決、必要なら画像保存でレポートへ連携。基本の型を押さえれば、初心者でも短く、読みやすく、実務で通用する可視化が作れます。

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