0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CSVファイルを読み込んで、指定した列名(複数)でグラフを描く

Last updated at Posted at 2024-08-11

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()

実行すると下記のグラフが表示されます。

image.png

複数の列の値でグラフを描く

複数の折れ線を書きたい場合は、その数だけ 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()

サンプルを実行すると、次のグラフが表示されます。

image.png

折れ線と棒グラフを重ねたい

異なる種類のグラフを重ねたい場合、列名に応じてグラフの関数を使い分ける必要があります。べた書きだと簡単ですが、関数化する場合はどうやって指定するかを考える必要があります。

一番簡単なのは、棒グラフ用の引数を追加することなので、第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()

下記は実行結果です。折れ線と棒グラフが同時に表示されました。

image.png

まとめ

CSVファイルをグラフ化する場合、DataFrameを使うと処理が簡単になります。 DataFrame にもグラフ表示機能が付いていますが、あまり複雑なグラフは作成できません。

matplotlib を使えば、複数のグラフを並べて表示するなど、工夫次第で様々なことができますので、ちゃんとグラフを描きたい場合は、この方法がお勧めです。

もっと複雑は複合グラフ(重ね合わせ)を描きたい場合は、下記の記事が参考になります。

【コピペOK】Matplotlibで簡単グラフ作成!自作ライブラリ「MultiChart」の使い方を解説

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?