未分類

Pythonでのグラフ作成_MatplotlibとSeaborn比較

目的

データのグラフ化について、どのツールを用いれば迷うことが多いので、
それぞれのグラフの基本的な書き方をまとめていこうと思います。

今回は代表的な下記の2つについて基本的な内容について記載します。

  • Matplotlib
  • Seaborn

グラフ化するデータ

下記のデータを選択し、右クリック→コピーする

DateJPN_SPYJPN_GLDJPN_TLT
2021/3/1412894351696064502003
2021/3/2409941352011804505277
2021/3/3405152051520474463696
2021/3/4402607451328574462526
2021/3/5412535151675944498671

クリップボードに保存したデータを取り込む

df = pd.read_clipboard()
df = df.set_index('Date')

Matplotlib

概要

Matplotlibはかなり低レベルのツールで、データの表示、凡例、タイトル、目盛りのラベル、注釈といった基本コンポーネントからプロットを組み立てられています。

メリット
最も基本的なツールなので、ネット上にも多くの記事が存在しており、参考にしやすい。

デメリット
設定事項が多いため、コードが多くなってしまう。
グラフの見栄えがあまりよくない。

公式サイト

https://matplotlib.org/

インストールするもの

pip install pandas
pip install matplotlib
pip install seaborn

モジュール読み込み &グラフ表示

import matplotlib.pyplot as plt
plt.plot(df)

実行結果

グラフ設定表示

#グラフを作成する準備。空のプロットウインドの作成
fig = plt.figure()
plt.plot(df)

#グラフ設定
#全体のタイトル
fig.suptitle("Date & Value")

#ラベル
plt.xlabel('Date')
plt.ylabel('value,yen')

実行結果

複数グラフ作成

複数グラフフォーマットの作成

#グラフを作成する準備。空のプロットウインドの作成
fig = plt.figure()

#2×2グラフのフォーマットを作成。
#fig.add_subplot(〇行, 〇列,〇番目)
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
ax4 = fig.add_subplot(2,2,4)
plt.plot(df)

#グラフ設定
#全体のタイトル
fig.suptitle("Date & Value")

#ラベル
plt.xlabel('Date')
plt.ylabel('value,yen')

4つ作成したグラフフォーマットのうちの最後のもの(4番目)にグラフが描画されます。
同様にグラフの設定も最後のグラフにしか反映されません。

実行結果

空欄の枠へのグラフプロット

fig = plt.figure()
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
ax4 = fig.add_subplot(2,2,4)
#空欄の枠に各グラフをプロット
ax1.plot(df['JPN_SPY'],color = "blue")
ax2.plot(df['JPN_GLD'],color = "orange")
ax3.plot(df['JPN_TLT'],color = "green")
plt.plot(df)

#グラフ設定
#全体のタイトル
fig.suptitle("Date & Value")

#ラベル設定
plt.xlabel('Date')
plt.ylabel('value,yen')
#文字を斜めに表示
plt.xticks(rotation=45)

ここで空欄の枠に各グラフをプロットします。
ただ、x軸ラベルへの設定は、このままでは4番目のグラフにしか反映されません。

実行結果

複数グラフへの表示設定

fig = plt.figure(figsize=(12,6))
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
ax4 = fig.add_subplot(2,2,4)
#空欄の枠に各グラフをプロット
ax1.plot(df['JPN_SPY'],color = "blue")
ax2.plot(df['JPN_GLD'],color = "orange")
ax3.plot(df['JPN_TLT'],color = "green")
plt.plot(df)

#グラフ設定
#全体のタイトル
fig.suptitle("Date & Value")

#複数グラフへの設定
for i in range(4):
    plt.subplot(2, 2, i+1)
    
    #ラベル設定
    plt.xlabel('Date')
    plt.ylabel('value,yen')
    #文字を斜めに表示
    plt.xticks(rotation=45)

#グラフの重なりを修正
plt.tight_layout()

for文により複数グラフに設定を反映します。また、グラフのサイズおよび重なりを修正します。
細かい設定など多まだまだありますが、いったん完成とします。

実行結果

Seaborn

概要

Seabornは、Matplotlibの上位互換のようなものでプロットがより見やすく、より美しくなります。

メリット
短いコードで見やすいグラフが書ける。

デメリット
Matplotlib と比較すると参考記事が少ない。

https://seaborn.pydata.org/

インポートするもの

pip install pandas
pip install matplotlib
pip install seaborn

Matplotlibモジュール読み込み &グラフ表示

import seaborn as sns
sns.lineplot(data = df)

1行でそれなりのグラフを書くことが可能です。

実行結果

複数グラフ準備作成

fig = plt.figure()
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
ax4 = fig.add_subplot(2,2,4)
sns.lineplot(data=df['JPN_SPY'],color = "blue", ax =ax1)
sns.lineplot(data=df['JPN_GLD'],color = "orange", ax =ax2)
sns.lineplot(data=df['JPN_TLT'],color = "green", ax =ax3)
sns.lineplot(data=df, ax =ax4)

実行結果

グラフ表示設定

fig = plt.figure(figsize=(12,6))
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
ax4 = fig.add_subplot(2,2,4)
sns.lineplot(data=df['JPN_SPY'],color = "blue", ax =ax1)
sns.lineplot(data=df['JPN_GLD'],color = "orange", ax =ax2)
sns.lineplot(data=df['JPN_TLT'],color = "green", ax =ax3)
sns.lineplot(data=df, ax =ax4)

#グラフ設定
#全体のタイトル
fig.suptitle("Date & Value")

#ラベル設定
plt.ylabel('value,yen')
#凡例の位置調整
plt.legend(bbox_to_anchor=(1.0, 1.0), loc='upper left')
#グラフの重なりを修正
plt.tight_layout()

実行結果

Seabornの方が短いコードで、見た目の良いグラフをかけることが可能なことがわかります。

おすすめのPython学習方法

ABOUT ME
チェルシー
【プロフィール】  年齢:30代前半  性別:オス 【主な職歴】  メーカー勤務  製品設計開発_メカ設計:7年  開発業務自動化:1年半 元々、メカ設計エンジニアとして、製品設計開発に携わっていました。新しいスキルを身につけたいと独学でPythonを勉強し始め、現在、本業でソフトエンジニアとして働いています。具体的には、Pythonを使った製品評価業務の自動化を推進しています。 また、製品市場データ分析業務など可視化なども実施しています。 【2023年度目標】 1. 副業収入:月5,000円 2. 塩漬けにしていたブログをChatGPTなどを活用して執筆の効率化し、1年半前に開設した本サイトを改善する 3. 定期的に株式投資おすすめ成長株の紹介記事を投稿 4. 自作中の米国成長株の分析ツールのコーディング紹介 5. 株式投資の本で学んだ情報をアウトプットする