前回の記事では、PandasとMatplotlibの扱い方について簡単に見た。
今回はPandasで読み込んだExcelデータをMatplotlibで視覚化してみよう。
Matplotlibはデータフレームをサポートしているため、簡単に読み込んだExcelでx値、y値だけ決定して入力すればいい。
1. PandasでExcel読み込み
では、最初の村から始めよう。前回見たツグミフォルダからpandasを用いて地域別猛暑日数を読み込もう。

そして前回のMatplotlibで見た日本語フォントを設定するコードをコピー&ペーストする。
import pandas as pd
# モジュールの呼び出しと日本語フォントの設定
import matplotlib.pyplot as plt
import matplotlib
# MacOSでのフォント設定
# matplotlib.rcParams["font.family"] = "AppleGothic"
# Windowsでのフォント設定
matplotlib.rcParams["font.family"] = "Malgun Gothic"
# フォントサイズの設定
matplotlib.rcParams["font.size"] = 13
# マイナス表示問題の解決
plt.rcParams['axes.unicode_minus'] = False
hot = pd.read_excel("./hot_wave.xlsx")
hot.head(3)定型化されたデータを利用するので、これでデータ視覚化の準備が完了する。
ではこの資料を利用してグラフを描いてみよう。

2. Matplotlibで視覚化する
データを読み込んだら、とりあえず一度入れてみよう。
以下のようにデータフレーム全体をそのまま入れてみる。
plt.plot(hot)以下のようなグラフが出てくる。
何かおかしい気がする。

これはExcelデータにあった年がy値として入ったためである。
x軸とy軸を指定しない限り、plotは与えられた値をy値と解釈して表現する。

以下のようにx軸を年ごと、y軸を年以外のすべての値として設定してみた。
plt.plot(hot["年ごと"], hot.loc[:, "ソウル(日)":])今回は何か、望んでいる形のグラフがちらっと見えることがわかる。

3. 望む形に加工する
では、データを望む形に加工してplotに入れればいい。
前回の記事と同じ順序で進める。
x軸、y軸データの選定
タイトル設定
凡例設定
軸の名前設定
軸の間隔設定(必要なら)
グラフスタイルの変更
コードに関する詳細な説明は前回の記事を参照してほしい。
今回の記事ではできるだけコードの活用例に集中したい。
1) x軸、y軸データの選定
まずソウル、大田、大邱の猛暑日数を比較してみることにした。
上部の出力にデータが見えるので、簡単にilocで抽出してグラフを描いてみた。
x = hot.iloc[:,0]
y = hot.iloc[:,[1,3,4]]
plt.plot(x, y)
グラフの出力が以下のようなら成功である。

2) タイトル設定
タイトルは「地域別猛暑日数」と名付けた。
x = hot.iloc[:,0]
y = hot.iloc[:,[1,3,4]]
plt.plot(x, y)
plt.title("地域別猛暑日数") # <-- 追加!
3) 凡例設定
グラフの値が何か分かりにくいので凡例を設定しよう。columnsを利用すれば簡単に凡例を表示できる。
x = hot.iloc[:,0]
y = hot.iloc[:,[1,3,4]]
plt.plot(x, y, label=y.columns) # <-- 追加!
plt.legend() # <-- 追加!
plt.title("地域別猛暑日数")
4) 軸の名前設定
軸の名前を決めよう。x軸は年、y軸は猛暑日数である。
x = hot.iloc[:,0]
y = hot.iloc[:,[1,3,4]]
plt.plot(x, y, label=y.columns)
plt.legend()
plt.title("地域別猛暑日数")
plt.xlabel("年") # <-- 追加!
plt.ylabel("猛暑日数") # <-- 追加!
5) 軸の間隔設定
軸の間隔はこのままでも満足している。
ただ、省略しよう。
6) グラフスタイルの変更
グラフスタイルを白黒でも区別できるくらいにしたかった。一度にスタイルを設定できないため、for文でデータを列ごとに巡回しながらスタイルを設定してあげた。
x = hot.iloc[:,0]
y = hot.iloc[:,[1,3,4]]
lines = ["o-", "r^:", "bd--"] # <-- 追加!
for i in range(len(y.columns)): # <-- 追加!
plt.plot(x,y.iloc[:,i], lines[i] ,label=y.columns[i])
plt.legend()
plt.title("地域別猛暑日数")
plt.xlabel("年")
plt.ylabel("猛暑日数")
4. 後加工する
では、気に入らないところがあれば少しずつ修正しよう。
グラフを見て何か点線があれば、値を明確に表示できるようにしたい。
「matplotlib グリッド」でグーグル検索してみよう。

愛しのウィキドックスが一番上にある。
一度入ってみよう。

その内容を軽くコピーして自分のコードに貼り付ける。
もちろん、望む形に変更してね。
x = hot.iloc[:,0]
y = hot.iloc[:,[1,3,4]]
lines = ["o-", "r^:", "bd--"]
for i in range(len(y.columns)):
plt.plot(x,y.iloc[:,i], lines[i] ,label=y.columns[i])
plt.legend()
plt.title("地域別猛暑日数")
plt.xlabel("年")
plt.ylabel("猛暑日数")
plt.grid(linestyle="--") # <-- 追加!
これで満足できるようだ。
しかし年が2008年から...?
長すぎるようだ。
出力する年を縮小してx軸も変更してみよう。
x = hot.iloc[6:,0] # <-- 追加!
y = hot.iloc[6:,[1,3,4]] # <-- 追加!
lines = ["o-", "r^:", "bd--"]
for i in range(len(y.columns)):
plt.plot(x,y.iloc[:,i], lines[i] ,label=y.columns[i])
plt.grid(linestyle="--")
plt.legend()
plt.title("地域別猛暑日数")
plt.xlabel("年")
plt.ylabel("猛暑日数")
plt.xticks(x) # <-- 追加!こうして最近10年間のソウル、大田、大邱の猛暑日数グラフが完成した。

これを試験問題にしたり、望む結論を話したいときに提示すると良さそうだ。
5. 記事を終わりにしながら
今回は猛暑日数データを使って簡単に視覚化してみた。
次回の記事では、与えられたグラフを同じように作る練習問題をやってみよう。
댓글을 불러오는 중...