Python

Python初学者向け:折れ線グラフの描き方を基本から解説(matplotlib/seaborn/pandasのplotメソッド)

スポンサーリンク

 

この記事はこんな方におススメです
  • データ分析をはじめたいが、どのように学習を進めればよいかわからない方
  • データ分析の基本的な部分の全体像を把握しておきたい方
  • データ分析の勉強を始めたが、進め方に迷っている方

▶ 初学者向けにPythonを使ったデータ分析に役立つ記事を書いています

▶ matplotlibによる可視化を基本から解説しています。以下の投稿も合わせてご覧ください。

はじめに

今回は折れ線グラフの描き方を基本から解説します。折れ線グラフはデータがどのように変化していくかを確認する際に使う最も基本的なグラフです。時系列データの変化を見るときには、必ず描くことになるでしょう。データの推移をみるときに、まず折れ線グラフを描く、ということが当たり前にできるようになりましょう。

環境

  • Windows11
  • Python 3.11.4
  • pandas 2.0.3
  • numpy: 1.25.0
  • matplotlib: 3.7.1
  • seaborn: 0.12.2

折れ線グラフを描く

サンプルデータ

折れ線グラフは散布図の一種で、プロットされた点を直線でつないだものです。通常は時間の経過を軸とします。まずサンプルデータを用意しましょう。今回はseabornライブラリにあらかじめ用意されている「fmri」というデータを使うことにしましょう。

# ライブラリのインポート
import pandas as pd
import seaborn as sns


# データのロード
fmri=sns.load_dataset('fmri')
fmri.head()
fmriのデータ

これは、脳の活動を測定する技術であるfMRI(機能的磁気共鳴画像法)のデータだそうです。各カラムの意味は以下となります。

  • subject:被験者のID
  • timepoint:実験の時間点(0~18)
  • event:刺激の種類(cue, stimulus, response)
  • region:脳の領域(frontal, parietal)
  • signal:fMRIの信号強度
  • experiment:実験の番号(1, 2)

matplotlibを使って描く

まずは基本構文を確認しておきましょう。

plt.plot(x, y)

xはindexを利用する場合は省略することもできます。さっそく見てみましょう。

# 折れ線グラフ:matplotlib
plt.plot(fmri.index, fmri['signal'])
# 折れ線グラフ:matplotlib

xにはindexを指定しているので、これは次のように省略することもできます。(結果は同じなので割愛します)

# xの指定を省略
plt.plot(fmri['signal'])

非常にシンプルですね。次にseabornを使った折れ線グラフの描画についても見ていきましょう。

seabornを使って折れ線グラフを描画

こちらもまずは基本構文を確認しておきましょう。

sns.relplot(x, y, data, kind=’line’,row, col, hue)
sns.lineplot(x, y, hue)

relplotとlineplotの違いは、figureレベルかaxesレベルかの違いがあります。relplotはfigureレベル、lineplotはaxesレベルです。figureレベル・axesレベルについては以下のブログに詳しく書いているのでこちらもご参照ください。

seabornの細かい見た目調整をあきらめない - Qiita
はじめにseabornの洗練されたスタイルで作ったグラフはとてもきれいです。見た目だけでなく、列の多いデータの全体像を把握するのにも威力を発揮します^1。特に適切に整形されたデータフレームを渡せば…

ここではrelplotで描いていきましょう。

# seabornで折れ線グラフを描画
sns.relplot(x=fmri.index, y='signal', data=fmri,kind='line')
# seabornで折れ線グラフを描画

先ほどのmatplotlibで描いた場合と同じですね。次にxに「timepoint」を指定した折れ線グラフを描いてみましょう。

# xに「timepoint」を指定:信頼区間がついた折れ線グラフ
sns.relplot(x='timepoint', y='signal', data=fmri,kind='line')
# xに「timepoint」を指定:信頼区間がついた折れ線グラフ

折れ線の周りに帯が表示されていますね。これは信頼区間を表します。でもこれってどういう意味でしょうか?kind=’scatter’として散布図を描いてみることにしましょう。

# xに「timepoint」を指定:散布図の描画
sns.relplot(x='timepoint', y='signal', data=fmri,kind='scatter')
# xに「timepoint」を指定:散布図の描画

X値に対して複数Y値が存在ありますね。これを折れ線で表す場合はxに対するyの値は平均値で代表されます。そのため、先ほどの折れ線グラフでは信頼区間が表示されている、のです。信頼区間を非表示にしたい場合には、errorbar=[‘ci’,False]を指定します。

# xに「timepoint」を指定:信頼区間を非表示
sns.relplot(x='timepoint', y='signal', data=fmri,kind='line',errorbar=['ci',False])
# xに「timepoint」を指定

層別に描画するときにはhueを指定します。ここでは「event」を指定してみましょう。

# seabornで折れ線グラフ:hueにeventを指定
sns.relplot(x='timepoint', y='signal', data=fmri, kind='line', hue='event')
# seabornで折れ線グラフ:hueにeventを指定

reloplotなので、折れ線グラフ描画時にもcolやrowにより変数ごとに違いがあるかの比較をすることができます。

# seabornで折れ線グラフを描画:colにregionを指定
sns.relplot(x='timepoint', y='signal', data=fmri, kind='line', hue='event',col='region')
# seabornで折れ線グラフを描画:colにregionを指定

これは散布図の時と同じ動きですね!最後にpandasのplot関数による描画も見ておきましょう。

pandasのplotを使って描く

基本構文は以下となります。

df.plot()

indexがx軸となり、y軸はデータフレームに含まれる量的変数となります。やってみましょう。

# pandasのplot関数で描く
fmri.plot()
# pandasのplot関数で描く

pandasのplot関数を使うと、簡単なコードで一気に可視化ができるから便利ですね。ただ、このグラフちょっと見づらいですよね。分離してみましょう。

# subplotsで分離
fmri.plot(subplots=True)
# subplotsで分離

上のグラフはseabornで散布図を描いて見せたように、x軸に対してyの値が複数ある場合です。これをそのまま折れ線グラフで描くのは適切ではないですね。ただ、データ分析のはじめにパっとデータを確認するときにpandasのplotでこのように可視化すると、x軸に対してyの値が複数あるな、と気づけるのでよいですね!

スポンサーリンク

まとめ

今回は折れ線グラフの描き方を基本から解説しました。今回、お伝えしたどのライブラリでも簡単に描くことができますが、簡単に描画した後に比較もしやすいので、わたしはseabornを使うことが多いです。まずは自分が使いやすいものから使っていくとよいでしょう。

コメント

タイトルとURLをコピーしました