CSVファイルを読み込んでグラフ化する方法はいくつかありますが、ここでは Pandas と matplotlib を使う方法を紹介します。
関数化していますので、コピペの上、自由に解像してご利用ください。
テストデータ
下記は本記事で使うサンプルデータです。
data1,data2,data3,data3
1,2,2,2
2,4,4,4
3,8,8,8
4,12,2,16
5,16,4,32
6,18,8,16
7,20,2,8
8,22,4,4
9,24,8,2
CSVの指定列をグラフ化する最小サンプル
以下は、DataFrameに読み込んだCSVデータの1列目をX軸、2列目をY軸として、折れ線グラフを描画するサンプルです。
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import rcParams
# CSVを読み込む(ファイルのパスはご自身の環境に合わせて修正してください)
csv = pd.read_csv("d:/test.csv")
# グラフ化したいカラム名を取得する
x_name = csv.columns[0]
y_name = csv.columns[1]
# カラム名からデータを取得する
x = csv[x_name]
y = csv[y_name]
# グラフを描画する
plt.plot(x,y)
# 画面に表示する
plt.show()
実行すると下記のグラフが表示されます。
複数の列の値でグラフを描く
複数の折れ線を書きたい場合は、その数だけ plot() を繰り返して呼ぶことで実現できます。
下記はそれを関数化したもので、引数に指定された列の数だけ for ループを行い、グラフを描画しています。
ついでに、タイトルが日本語でも文字化けしないようにフォントを指定し、補助線/凡例の表示に対応しました。タイトルも指定できるようになっています。
このままコピペして使えます。
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import rcParams
def chart(df,x_name,y_names,title="",x_title="",y_title=""):
# --- グラフの体裁を整える ---
rcParams['font.family'] = "Meiryo" # matplotlibを日本語対応する
plt.grid() # 縦横の補助線を表示する
plt.legend = True # 凡例を表示する
plt.title(title) # グラフタイトルを設定する
plt.xlabel(x_title) # X軸の名前を設定する
plt.ylabel(y_title) # Y軸の名前を設定する
# カラム名からデータを取得する
x = csv[x_name]
# カラム名の数だけグラフを作成
for name in y_names:
y = df[name]
plt.plot(x,y,label="y_name")
この関数の使い方は次の通りです。第1引数にDataFrame、第2引数にX軸の値、第2引数にY軸の値を指定します。
おまけとして、第3引数にグラフタイトル、第4引数、第5引数に、X軸とY軸のタイトルを指定できるようにしました。
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import rcParams
# CSVを読み込む
csv = pd.read_csv("p:/test.csv",encoding="shift-jis")
chart(csv,csv.columns[0],csv.columns[1:],"グラフ","X軸","Y軸")
# 画面に表示する
plt.show()
サンプルを実行すると、次のグラフが表示されます。
折れ線と棒グラフを重ねたい
異なる種類のグラフを重ねたい場合、列名に応じてグラフの関数を使い分ける必要があります。べた書きだと簡単ですが、関数化する場合はどうやって指定するかを考える必要があります。
一番簡単なのは、棒グラフ用の引数を追加することなので、第6引数に棒グラフを描きたい列名を指定するようにしました。
def chart(df,x_name,y_names,title="",x_title="",y_title="",y_bar=""):
# --- グラフの体裁を整える ---
rcParams['font.family'] = "Meiryo" # matplotlibを日本語対応する
plt.grid() # 縦横の補助線を表示する
plt.legend = True # 凡例を表示する
plt.title(title) # グラフタイトルを設定する
plt.xlabel(x_title) # X軸の名前を設定する
plt.ylabel(y_title) # Y軸の名前を設定する
# カラム名からデータを取得する
x = csv[x_name]
# カラム名の数だけグラフを作成
for name in y_names:
y = df[name]
if name in y_bar:
plt.bar(x,y,label="y_name")
else:
plt.plot(x,y,label="y_name")
下記は、2列目のデータのみ棒グラフ、その他は折れ線グラフを描画するサンプルです。
# CSVを読み込む
csv = pd.read_csv("p:/test.csv",encoding="shift-jis")
chart(csv,csv.columns[0],csv.columns[1:],"グラフ","X軸","Y軸",csv.columns[2])
# 画面に表示する
plt.show()
下記は実行結果です。折れ線と棒グラフが同時に表示されました。
まとめ
CSVファイルをグラフ化する場合、DataFrameを使うと処理が簡単になります。 DataFrame にもグラフ表示機能が付いていますが、あまり複雑なグラフは作成できません。
matplotlib を使えば、複数のグラフを並べて表示するなど、工夫次第で様々なことができますので、ちゃんとグラフを描きたい場合は、この方法がお勧めです。
もっと複雑は複合グラフ(重ね合わせ)を描きたい場合は、下記の記事が参考になります。