pythonってすごいね

RNAseqを用いた遺伝子発現量解析、機械学習を用いた回帰、分類などの解析を中心に記事を書いていきたいです!

pythonで描く棒グラフ

pythonで棒グラフを描く場合、matplotlibもしくは、seabornのどちらかで描くことが多いと思います。微妙に書き方が違う部分があるのでまとめていこうと思います。

matplotlibで描く折れ線グラフ

import numpy as np #使うパッケージをimportする
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
iris = load_iris() #テストデータとしてirisをロード
#データフレームを作成 columnsでカラム名を指定する
df = pd.DataFrame(iris.data, columns=iris.feature_names)

print(df.head()) #データを表示する

シンプルな図

x = np.array([0,1,2,3,4,5])
y = np.array([0,2,4,6,8,10])

plt.bar(x,y) #プロットする
plt.show() #プロットした図を表示する jupyterはなくてOK

細かな設定

x = np.array([0,1,2,3,4,5])
y = np.array([0,2,4,6,8,10])
labels=["A","B","C","D","E","F"]
yerr_list=[0,1,1,1,1,1]
plt.bar(x, #X軸の設定
           y, #Y軸の設定
           width=1, #棒グラフの太さ
           linewidth=1, #棒グラフの枠線の太さ
           color="red", #棒グラフの色
           edgecolor='k', #棒グラフの枠線の色
           tick_label=labels, #X軸ラベルの指定
           align="center", #軸のどこで合わせるか center or edge
           yerr=yerr_list, #エラーバー値の設定
           ecolor="black", #エラーバーの色
           capsize=10) #エラーバーの頭のサイズ
plt.show()

横棒のプロット

x = np.array([0,1,2,3,4,5])
y = np.array([0,2,4,6,8,10])


labels=["A","B","C","D","E","F"]
plt.barh(x, #X軸の設定
            y, #Y軸の設定
            tick_label=labels) #X軸ラベルの指定
plt.show()

横並びプロット

x = np.array([0,1,2,3,4,5])
y_1 = np.array([0,2,4,6,8,10])
y_2 = np.array([3,3,3,3,3,3])

width=0.3

plt.bar(x-width/2,y_1,width,align="center")
plt.bar(x+width/2,y_2,width,align="center")
plt.show()

seabornで描く棒グラフ

そもそも、inputにするデータ形式が違う

sns.barplot(x="day", y="total_bill", data=tips) #データをロード

細かな設定

sns.barplot(x="day", #X値
            y="total_bill", #Y値
            order=["Sun","Thur","Fri","Sat"], #X軸の順番
            ci='sd', #sdで標準偏差、Noneでエラーバーを消す、数字で信頼区間
            errcolor='r', # エラーバーの色を設定
            capsize=0.01, #エラーバーの頭の大きさ
            data=tips) #対象とするデータの指定

横棒

X軸とY軸を入れ替えると縦横が逆になる。inputデータを考えておく必要性あり!

sns.barplot(x="total_bill", y="day", data=tips)

横並びプロット

hueで分割するワードを指定する。この際も、inputデータから形式を整えておくと楽になりそう?

sns.barplot(x="day", y="total_bill" ,hue='time', data=tips)

まとめ

Seabornを使う場合は、inputにするデータをあらかじめ加工しておくと、図の作成がしやすそう!