概要
Pythonモジュールのpandasにはplot関数があり、これを使えばpandasで読み込んだデータフレームを簡単に可視化することができます。ただし、大量の引数(34個)があるにもかかわらず、公式マニュアルを見ても引数の一部しか説明されておらず、一体何ができるのか整理したくなり、この記事を書きました。データはirisを使い、plotの各引数の効果を検証しました。
import pandas as pd if __name__ == "__main__": #元データ df = pd.read_csv('iris.csv', index_col=0)
どんな引数があるのか?
df.plot?とヘルプを叩くことで、変数の一覧と説明(英語)を取得できます。実に34個の引数があるようです。使いこなして、簡単にいろんなグラフを書きたいですね。
x | y | kind | lax |
subplots | sharex | sharey | layout |
figsize | use_index | title | grid |
legend | style | logx | logy |
loglog | xticks | yticks | xlim |
ylim | rot | fontsize | colormap |
colorbar | position | table | yerr |
xerr | stacked | sort_columns | secondary_y |
mark_right | kwds |
デフォルトの結果
何も引数をつけずに、デフォルト設定でplotすると、以下のようなグラフが表示されます。以下では、この結果と比較していきます。
#引数なしの場合の結果 df.plot()
各種変数を指定した場合の結果
x
x軸の変数を指定する場合に使うパラメータ。デフォルトはNone(indexを使う)。以下では1つ目の変数(SepalLength)を指定しました。
df.plot(x=df.columns[0])
x軸は確かにSepalLengthになっています。
y
プロットしたい変数を指定する場合に使うパラメータ。デフォルトはNone(全変数を使う)。以下では1つ目の変数(SepalLength)を指定しました。
df.plot(y=df.columns[0])
確かにSepalLengthのみプロットされています。
kind
プロットするグラフの種類を指定するパラメータ。デフォルトはline(折れ線グラフ)。他にもbar, barh, hist, box, kde, density, area, pie, scatter, hexbin等が指定できるようです。
line
デフォルト設定で書ける折れ線グラフです。
df.plot(kind='line') #以下でも同様 df.plot.line()
bar
縦棒グラフ。
df.plot(kind='bar')
barh
横棒グラフ。
df.plot(kind='barh')
hist
ヒストグラム。
df.plot(kind='hist')
別のカラムで色分けを指定する方法を記事にしましたので併せて参考にしてみてください。
box
箱ひげ。
df.plot(kind='box')
kde, density
カーネル密度推定。
df.plot(kind='kde') #以下でも同様 df.plot(kind='density')
area
折れ線グラフ+塗りつぶし
df.plot(kind='area')
pie
円グラフ。複数のcolumnを一つのグラフに書こうとするとエラー。
df.plot(kind='pie', y=df.columns[0])
scatter
散布図。xとyを両方指定しないとエラー。
df.plot(kind='scatter', x=df.columns[0], y=df.columns[1])
hexbin
散布図に似たかっこよさげな?グラフ。xとyを両方指定しないとエラー。
df.plot(kind='hexbin', x=df.columns[0], y=df.columns[1])
ax
ベースとなるmatplotlibのaxを指定する。デフォルトはNone(なし)。すでに書いたグラフに上書きしたい場合などに使う。
#ヒストグラムとカーネル密度を重ねてplot。 ax1 = df.plot(kind='hist') #secondary_yを使ってy2軸を使用。 df.plot(kind='kde', ax=ax1, secondary_y=True)
subplots
columnを個別に表示したいときに指定する。デフォルトはFalse(全部を1つのグラフに表示)。さらに、subplotsがTrueの際に使えるパラメータ(sharex, sharey, layout)があります。
df.plot(subplots=True)
sharex
subplotsをTrueにした際にx軸を共通化するかの指定。デフォルトはTrue(共通)。
df.plot(subplots=True, sharex=False)
sharex
subplotsをTrueにした際にy軸を共通化するかの指定。デフォルトはFalse(個別)。
df.plot(subplots=True, sharey=True)
layout
subplotsをTrueにした際の攻勢を指定するパラメータ(行、列)。デフォルトは1列並び。
#2×2で配置 df.plot(subplots=True, layout=(2, 2))
figsize
グラフのサイズを指定するときに使うパラメータ(幅、高さ)。単位はインチ。
df.plot(figsize=(20, 10))
use_index
index列をx軸に使用するかを指定するパラメータ。デフォルトはTrue。Falseを指定すると、indexを単純に連番に設定したグラフになる。
df.plot(use_index=False)
irisのデータは元々indexが連番なので変化なし。
title
タイトルを指定したい場合に設定するパラメータ。
df.plot(title='test')
grid
grid線を表示するパラメータ。デフォルトはNone。
df.plot(grid=True)
legend
凡例の表示・非表示・反転を指定するパラメータ。デフォルトはTrue(表示)。
#非表示 df.plot(legend=False)
#反転 df.plot(legend='reverse')
style
線の書式を指定するパラメータ。デフォルトは-(solid)。詳細はlines — Matplotlib 1.5.1 documentation参照。
#順番に、solid, dashed, dashdot, dottedを指定。 df.plot(style=['-', '--', '-.', ':'])
logx
x軸を対数目盛りとする場合に使用。デフォルトはFalse。
df.plot(logx=True)
logy
y軸を対数目盛りとする場合に使用。デフォルトはFalse。
df.plot(logy=True)
loglog
x、y軸を両方対数目盛りとする場合に使用。デフォルトはFalse。
df.plot(loglog=True)
xticks
x軸の目盛りを指定したい場合に使うパラメータ。目盛りをlistで渡して使用する。
df.plot(xticks=[0, 50, 100, 150])
yticks
y軸の目盛りを指定したい場合に使うパラメータ。目盛りをlistで渡して使用する。
df.plot(yticks=[0, 3, 8])
xlim
x軸の範囲を指定したい場合に使う。
df.plot(xlim=[0, 50])
ylim
y軸の範囲を指定したい場合に使う。
df.plot(ylim=[0, 50])
rot
x軸の目盛りを回転させたいときに使う。y軸の変え方は。。。?
df.plot(rot=45)
fontsize
x軸とy軸のメモリのフォントを指定したいときに使う。
df.plot(fontsize=20)
legendは変えられない。。。だと?
colormap
カラーマップを指定したいときに使う。カラーマップについてはcolor example code: colormaps_reference.py — Matplotlib 1.5.1 documentationを参照。
df.plot(colormap='BuGn')
df.plot(colormap='viridis')
colorbar
kindでscatterかhexbinを指定し、さらにc(点の色の濃淡)を与えた場合、カラーバーを出力するオプション。デフォルトはTrue。
#カラーバーを表示(デフォルト) df.plot(kind='scatter', x=df.columns[0], y=df.columns[1], c=df.columns[2])
#カラーバーを非表示 df.plot(kind='scatter', x=df.columns[0], y=df.columns[1], c=df.columns[2], colorbar=False)
position
kindでbarを指定した際に、棒の位置を調整するパラメータ(0.0~1.0)。デフォルトは0.5(真ん中)。
#(デフォルト) df.mean().plot(kind='bar', position=0.5)
#(左寄せ) df.mean().plot(kind='bar', position=0.0)
#(右寄せ) df.mean().plot(kind='bar', position=1.0)
table
グラフの下に表を付け足せる機能。デフォルトはFalse。xticksの位置と調整が必要そうです。
#xticksは表示しない要に設定 df.plot(table=df.ix[0:10].T, xlim=[0, 10], xticks=[])
yerr
指定した値だけy軸方向にエラーバーを付加します。
df.plot(yerr=0.1)
xerr
指定した値だけx軸方向にエラーバーを付加します。
df.plot(xerr=0.5)
stacked
kindでbarかareaを指定したとき、積み上げ表示にしたいときにTrueを指定します。
df.plot(kind='area', stacked=True)
#積み上げない場合 df.plot(kind='area', stacked=False)
sort_columns
カラム名をソートしたいときに使う変数。デフォルトはFalse。試してみましたが結果変わらず、調査中です。
#カラム名を逆順に変更 ndf = pd.DataFrame(index=df.index, data=df.values, columns=[4, 3, 2, 1, 0]) #ソートしない場合 ndf.plot()
#ソートを指定しても結果が変わらない ndf.plot(sort_columns=True)
secondary_y
y2軸を指定する際に使います。デフォルトはFalse。
df.plot(secondary_y=True)
mark_right
y2軸を指定した際、凡例にrightを入れたくないときに使います。デフォルトはTrue(rightを表示)。
df.plot(secondary_y=True, mark_right=False)
kwds
「Options to pass to matplotlib plotting method」つまり、matplotlibのplotで使えるoptionを指定できるとのことです。この引数に関しては以下を参照。
まとめ
以上を見てみると、pandasのプロット機能だけで、いろんなグラフを簡単に書くことが出来ることが分かります。特によく使うのは、kindやsubplotsでしょうか。
一方で、legendの位置や文字サイズを変えられなかったり、subplotの各グラフのタイトルを付けられなかったりと、細かいところまで調整することが出来ないことも分かります。というか、保存のコマンドすらないです。この辺りは、matplotlibを使って対策してあげる必要があるようです。ちなみに、参考までに、保存は以下で可能です。
ax = df.plot() fig = ax.get_figure() fig.savefig('test.png')
まさに知りたい内容でした。
matplotlibについてはたくさん出てきますが、pandasのplotについてはぜんぜん引数についての解説記事がなかったので、とても参考になりました。
ありがとうございます。
コメントありがとうございます。励みになります。