つまりなにしたの?
PythonのMatplotlibでグラフを書くときに補助線に当たる値を指定したただの線を書いた。
なんでやろうと思ったの?
グラフを書いたときに、補助線を引きたくなることがある。強調したかったり、比べたかったりと様々な理由がある。
データ分析における用例としては、Precision RecallでF値が最大になる閾値のところに線を引いたりとか・・・
そんなときに、よくプロットに使うMatplotlibでサクッと線が引けるとありがたい。
で、いつものごとく毎回ググるのがしんどいのでアウトプットして覚えることにした。
とりあえず結果
ヒストグラムの平均値とか25%、75%に線を引いてみたり、
量の最大値、最小値や量の平均に線を引いてみた。
前提となるコード
import pandas as pd import matplotlib.pyplot as plt # Kaggleのポケモンに関するデータセットを使ってみた # https://www.kaggle.com/abcsds/pokemon data = "Pokemon.csv" dataf = pd.read_csv(data) dataf.head()
こんな感じで読み込めた。
縦線を引く
ポケモンの攻撃力の値をもとに縦線を引いてみた。
平均、25%線、75%線の3本
plt.hist(dataf["Attack"]) # 縦線 plt.vlines([dataf.describe()["Attack"]["mean"]], 0, 180, "blue", linestyles='dashed') plt.vlines([dataf.describe()["Attack"]["25%"]], 0, 180, "red", linestyles='dashed') plt.vlines([dataf.describe()["Attack"]["75%"]], 0, 180, "red", linestyles='dashed')
横線を引く
ポケモンの攻撃力の値をもとに横線を引いてみた。
度数の最大、最小、平均の3本
v = plt.hist(dataf["Attack"]) # 横線 plt.hlines([v[0].mean()], v[1].min(), v[1].max(), "blue", linestyles='dashed') plt.hlines([v[0].min()], v[1].min(), v[1].max(), "red", linestyles='dashed') plt.hlines([v[0].max()], v[1].min(), v[1].max(), "red", linestyles='dashed')
最初に示した結果のコード
v = plt.hist(dataf["Attack"]) # 縦線 plt.vlines([dataf.describe()["Attack"]["mean"]], 0, 180, "blue", linestyles='dashed') plt.vlines([dataf.describe()["Attack"]["25%"]], 0, 180, "red", linestyles='dashed') plt.vlines([dataf.describe()["Attack"]["75%"]], 0, 180, "red", linestyles='dashed') # 横線 plt.hlines([v[0].mean()], v[1].min(), v[1].max(), "blue", linestyles='dashed') plt.hlines([v[0].min()], v[1].min(), v[1].max(), "red", linestyles='dashed') plt.hlines([v[0].max()], v[1].min(), v[1].max(), "red", linestyles='dashed')
概要
縦線を引くには
plt.vlines([線を引きたい値], 線の小さい側の値, 線の大きい側の値, 色, 線のスタイル)
横線を引くには
plt.hlines([線を引きたい値], 線の小さい側の値, 線の大きい側の値, 色, 線のスタイル)
線を引きたい値が配列なのは、複数指定できる
例えば
v = plt.hist(dataf["Attack"]) # 横線 plt.hlines([v[0].mean()], v[1].min(), v[1].max(), "blue", linestyles='dashed') plt.hlines([v[0].max(), v[0].min()], v[1].min(), v[1].max(), "red", linestyles='dashed') # 2つの値を指定した
としても先程と同じ実行結果が得られる