Pandas plot()でグラフ作成・データ可視化する方法【完全ガイド】
データ分析において、数値だけでは見えないパターンや傾向を発見するために、グラフによる可視化は欠かせません。Pandasのplot()メソッドを使えば、複雑なmatplotlibのコードを書かずに、簡単にデータを可視化できます。この記事では、Pandasのplot機能を使ったグラフ作成方法を基本から応用まで、実践的なサンプルコードとともに詳しく解説します。
基本的な準備とサンプルデータの作成
まず、可視化に使用するサンプルデータを作成し、必要なライブラリをインポートしましょう。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 日本語フォント設定(文字化け対策)
plt.rcParams['font.family'] = 'DejaVu Sans'
# サンプルデータの作成
np.random.seed(42)
dates = pd.date_range('2023-01-01', periods=12, freq='M')
df = pd.DataFrame({
'sales': [100 + np.random.randint(-20, 20) for _ in range(12)],
'profit': [30 + np.random.randint(-10, 10) for _ in range(12)],
'expenses': [70 + np.random.randint(-15, 15) for _ in range(12)]
}, index=dates)
print(df.head())
このコードで、売上、利益、費用の月次データを持つDataFrameが作成されます。
基本的な線グラフの作成
単一列の線グラフ
最もシンプルな線グラフから始めましょう。
# 売上の推移を線グラフで表示
df['sales'].plot()
plt.title('月次売上推移')
plt.ylabel('売上 (万円)')
plt.show()
plot()メソッドだけで、すぐにグラフが作成できます。デフォルトでは線グラフが描画されます。
複数列の線グラフ
複数の指標を同時に表示する場合:
# 複数指標を同時表示
df[['sales', 'profit']].plot()
plt.title('売上と利益の推移')
plt.ylabel('金額 (万円)')
plt.legend(['売上', '利益'])
plt.show()
複数列を選択してplot()を呼ぶと、自動的に複数の線が描画されます。
様々なグラフの種類
棒グラフ(bar)
カテゴリ別の比較に適した棒グラフです。
# 月別売上の棒グラフ
df['sales'].plot(kind='bar')
plt.title('月別売上')
plt.ylabel('売上 (万円)')
plt.xticks(rotation=45)
plt.show()
kind='bar'パラメータで棒グラフを指定できます。
水平棒グラフ(barh)
ラベルが長い場合に便利な水平棒グラフ:
# 最新3ヶ月の水平棒グラフ
df.tail(3)['sales'].plot(kind='barh')
plt.title('直近3ヶ月の売上')
plt.xlabel('売上 (万円)')
plt.show()
ヒストグラム(hist)
データの分布を確認するヒストグラム:
# 売上データの分布
df['sales'].plot(kind='hist', bins=10, alpha=0.7)
plt.title('売上の分布')
plt.xlabel('売上 (万円)')
plt.ylabel('頻度')
plt.show()
散布図(scatter)
2つの変数間の関係を調べる散布図:
# 売上と利益の関係
df.plot(x='sales', y='profit', kind='scatter')
plt.title('売上と利益の関係')
plt.xlabel('売上 (万円)')
plt.ylabel('利益 (万円)')
plt.show()
箱ひげ図(box)
データの分布と外れ値を確認する箱ひげ図:
# 各指標の箱ひげ図
df.plot(kind='box')
plt.title('各指標の分布')
plt.ylabel('金額 (万円)')
plt.show()
高度なカスタマイズ
色とスタイルの変更
グラフの見た目をカスタマイズする方法:
# 色とスタイルをカスタマイズ
df['sales'].plot(color='red', linestyle='--', marker='o')
plt.title('売上推移(カスタマイズ版)')
plt.ylabel('売上 (万円)')
plt.grid(True)
plt.show()
サブプロット(複数グラフ)
複数のグラフを一度に表示:
# 2x2のサブプロット
fig, axes = plt.subplots(2, 2, figsize=(12, 8))
# 各サブプロットにグラフを描画
df['sales'].plot(ax=axes[0,0], title='売上推移')
df['profit'].plot(ax=axes[0,1], title='利益推移', color='green')
df['expenses'].plot(ax=axes[1,0], title='費用推移', color='red')
df.plot(ax=axes[1,1], title='全指標比較')
plt.tight_layout()
plt.show()
図のサイズとDPI設定
高品質な図を作成する設定:
# 高解像度の大きな図
df.plot(figsize=(10, 6), dpi=150)
plt.title('高解像度グラフ')
plt.ylabel('金額 (万円)')
plt.show()
実践的な可視化例
売上分析ダッシュボード
実際のビジネス分析で使えるダッシュボード:
# 売上分析ダッシュボード
fig, axes = plt.subplots(2, 2, figsize=(15, 10))
# 売上推移
df['sales'].plot(ax=axes[0,0], marker='o')
axes[0,0].set_title('売上推移')
axes[0,0].set_ylabel('売上 (万円)')
# 利益率の計算と表示
profit_rate = (df['profit'] / df['sales'] * 100)
profit_rate.plot(ax=axes[0,1], color='green', marker='s')
axes[0,1].set_title('利益率推移')
axes[0,1].set_ylabel('利益率 (%)')
# 月別比較(棒グラフ)
df[['sales', 'expenses']].plot(kind='bar', ax=axes[1,0])
axes[1,0].set_title('売上vs費用(月別)')
axes[1,0].set_ylabel('金額 (万円)')
axes[1,0].tick_params(axis='x', rotation=45)
# 累積売上
df['sales'].cumsum().plot(ax=axes[1,1], color='purple')
axes[1,1].set_title('累積売上')
axes[1,1].set_ylabel('累積売上 (万円)')
plt.tight_layout()
plt.show()
時系列データの詳細分析
# 移動平均の追加
df_ma = df.copy()
df_ma['sales_ma3'] = df['sales'].rolling(window=3).mean()
# 元データと移動平均を比較
ax = df_ma['sales'].plot(label='実際の売上', alpha=0.7)
df_ma['sales_ma3'].plot(ax=ax, label='3ヶ月移動平均', color='red', linewidth=2)
plt.title('売上推移(移動平均付き)')
plt.ylabel('売上 (万円)')
plt.legend()
plt.show()
カテゴリ別分析
# カテゴリ別売上データの作成
category_data = pd.DataFrame({
'A商品': [25, 30, 28, 35],
'B商品': [20, 25, 30, 28],
'C商品': [15, 20, 18, 22]
}, index=['Q1', 'Q2', 'Q3', 'Q4'])
# 積み上げ棒グラフ
category_data.plot(kind='bar', stacked=True)
plt.title('四半期別商品売上(積み上げ)')
plt.ylabel('売上 (万円)')
plt.xticks(rotation=0)
plt.show()
グラフの保存とエクスポート
高品質な画像として保存
# 高品質でグラフを保存
df['sales'].plot(figsize=(10, 6))
plt.title('売上推移')
plt.ylabel('売上 (万円)')
plt.savefig('sales_chart.png', dpi=300, bbox_inches='tight')
plt.show()
複数形式での保存
# 複数の形式で保存
def save_chart_multiple_formats(plot_data, filename):
"""グラフを複数形式で保存"""
plot_data.plot()
plt.title('データ推移')
# PNG, PDF, SVG形式で保存
formats = ['png', 'pdf', 'svg']
for fmt in formats:
plt.savefig(f'{filename}.{fmt}', format=fmt, bbox_inches='tight')
plt.show()
# 使用例
save_chart_multiple_formats(df['sales'], 'sales_analysis')
パフォーマンスとベストプラクティス
大量データの可視化
# 大量データの効率的な可視化
def plot_large_dataset(data, sample_size=1000):
"""大量データを効率的にプロット"""
if len(data) > sample_size:
# サンプリングして表示
sampled_data = data.sample(n=sample_size)
sampled_data.plot(alpha=0.6)
plt.title(f'データサンプル表示 (n={sample_size})')
else:
data.plot()
plt.title('全データ表示')
plt.show()
# 使用例
large_data = pd.Series(np.random.randn(10000))
plot_large_dataset(large_data)
メモリ効率的な描画
# メモリ効率を考慮した描画
def memory_efficient_plot(df, columns):
"""メモリ効率的なプロット"""
with plt.style.context('seaborn'): # 一時的なスタイル適用
df[columns].plot()
plt.title('効率的なプロット')
plt.show()
plt.close() # メモリ解放
# 使用例
memory_efficient_plot(df, ['sales', 'profit'])
plotメソッドのパラメータ一覧
主要なパラメータとその使用例:
# 包括的なパラメータ使用例
df['sales'].plot(
kind='line', # グラフの種類
x=None, # x軸データ
y=None, # y軸データ
color='blue', # 色
alpha=0.8, # 透明度
style='-', # ライン種類
title='売上推移', # タイトル
figsize=(10, 6), # 図のサイズ
grid=True, # グリッド表示
legend=True, # 凡例表示
fontsize=12 # フォントサイズ
)
plt.show()
エラーの回避とトラブルシューティング
よくあるエラーと対処法
# 安全なプロット関数
def safe_plot(data, plot_type='line', **kwargs):
"""エラー処理を含む安全なプロット"""
try:
if data.empty:
print("警告: データが空です")
return
if plot_type in ['scatter'] and len(data.columns) < 2:
print("警告: 散布図には2列以上必要です")
return
data.plot(kind=plot_type, **kwargs)
plt.show()
except Exception as e:
print(f"プロットエラー: {e}")
# 使用例
safe_plot(df['sales'], 'line', title='安全なプロット')
まとめ
Pandasのplot()メソッドは、データ可視化を簡単かつ効率的に行うための強力なツールです。この記事で紹介した手法を活用することで、様々な可視化ニーズに対応できます。
主なポイント:
plot()メソッドで簡単にグラフ作成kindパラメータで様々なグラフタイプを指定- カスタマイズオプションで見た目を調整
- サブプロットで複数グラフを同時表示
- 実践的なダッシュボード作成
- 大量データでのパフォーマンス考慮
データ分析において可視化は洞察を得るための重要なステップです。Pandasのplot機能を活用して、効果的なデータストーリーテリングを実現しましょう。

