はじめに
pythonでグラフを作成するときの定番はmatplotlib
ですが、設定項目が多いのでいちいち調べて使うのは大変です。
基本の使用方法を列挙して、すぐに使えるようにしておこうと思います。
参考
- https://www.tableau.com/about/blog/2016/7/colors-upgrade-tableau-10-56782
- https://pythondatascience.plavox.info/matplotlib/%E5%86%86%E3%82%B0%E3%83%A9%E3%83%95
- https://qiita.com/skotaro/items/5c9893d186ccd31f459d
環境
- Google colab
- matplotlib==3.0.2
手順
棒グラフ
棒グラフはplt.bar
で表示できます。x軸に指定した値を中心として、デフォルト幅0.8の棒を表示します。
import matplotlib.pyplot as plt
# 表示するデータ
Y = [4,15,8]
X = range(len(X))
# グラフの大きさ指定
plt.figure(figsize=(10, 5))
# 棒グラフを中央寄せで表示
plt.bar(X, Y, align="center", width=0.8)
# グラフのラベル
plt.xticks(X, ['A','B','C'])
# XとYのラベル
plt.xlabel("x-axis label")
plt.ylabel("y-axis label")
# タイトル表示
plt.title('title', fontsize=15)
# グリッド線を表示
plt.grid(True)

align
のパラメータをedge
に変えると、xの値を左端にするように棒を表示します。
横向き棒グラフ
横向き棒グラフでは、棒グラフのwidth
に相当するものはheight
になります。また、データXがy軸に並ぶので、データXのラベルをy軸ラベルにする必要があります。
import matplotlib.pyplot as plt
# 表示するデータ
Y = [4,15,8]
X = range(len(Y))
# グラフの大きさ指定
plt.figure(figsize=(10, 5))
# 棒グラフを中央寄せで表示
plt.barh(X, Y, align="center", height=0.8)
# グラフのラベル
plt.yticks(X, ['A','B','C']) # データXがy軸に表示されていることに注意
# XとYのラベル
plt.xlabel("x-axis label")
plt.ylabel("y-axis label")
# タイトル表示
plt.title('title', fontsize=15)
# グリッド線を表示
plt.grid(True)

グラフを複数表示
import matplotlib.pyplot as plt
import numpy as np
Y1 = np.array([10,20,30])
Y2 = np.array([50,60,20])
Y3 = np.array([30,20,10])
N = 3 # y軸データの種類数
X = np.arange(len(Y1))
# 棒の幅
w = 0.8 / N
# グラフの大きさ指定
plt.figure(figsize=(10, 5))
plt.bar(X, Y1, color='xkcd:sky blue', width=w, label='Kinoko', align="center")
plt.bar(X + w, Y2, color='xkcd:turquoise', width=w, label='Takenoko', align="center")
plt.bar(X + 2*w, Y3, color='xkcd:grey blue', width=w, label='Pokky', align="center")
# 凡例を配置 bestだと最適な位置に表示
plt.legend(loc="best")
# 棒のグループにラベル貼り付け
plt.xticks(X + (N-1)/2*w, ['Tokyo','Osaka','Nagoya'])
# XとYのラベル
plt.xlabel("City")
plt.ylabel("Love")
# タイトル表示
plt.title('Kinoko Takenoko War', fontsize=15)
# グリッド線を表示
plt.grid(True)

今回、棒の色はxkcd color name surveyというのから選択しました。xkcd:
の後に色名を指定すればその色に設定できます。ちなみにcolor
を設定しない場合は自動で色を割り当ててくれます。
積み上げ棒グラフ
bottom
に棒が始まる位置を指定できます。積み上げる位置を指定することで積み上げ棒グラフを作成できます。
import matplotlib.pyplot as plt
# 表示するデータ
Y1 = [4,15,8]
Y2 = [10,2,4]
X = range(len(Y1))
# グラフの大きさ指定
plt.figure(figsize=(10, 5))
# bottomに積み上げる位置を指定する。
plt.bar(X, Y1, align="center", label='AAA')
plt.bar(X, Y2, align="center", bottom=Y1, label='BBB')
# グラフそれぞれのレベル
plt.xticks(X, ['A','B','C']) # データXがy軸に表示されていることに注意
# XとYのラベル
plt.xlabel("x-axis label")
plt.ylabel("y-axis label")
# タイトル表示
plt.title('title', fontsize=15)
# 凡例を配置 bestだと最適な位置に表示
plt.legend(loc="best")
# グリッド線を表示
plt.grid(True)

円グラフ
import matplotlib.pyplot as plt
# 表示するデータ
data = [45, 30, 22, 10]
# データのラベル
labels = 'A', 'B', 'C', 'D'
# 色
cmap = plt.get_cmap('tab10') # Tableauの基本10色を使用
colors = [cmap(i) for i in range(len(data))]
# パーツの間隔
explode = (0.1, 0., 0., 0.)
# グラフの大きさ指定
plt.figure(figsize=(10, 5))
# startangleは開始する角度、counterclockは向きを指定、
# autopctは構成割合で少数点第一位まで表示、shadowはグラフを影付きにする
plt.pie(data, explode=explode, labels=labels, colors=colors,
autopct='%1.1f%%', shadow=True, startangle=90, counterclock=False)
# 真円で表示するためにアスペクト比を1対1にする
plt.axis('equal')

今回はcmap
でTableauと呼ばれるソフトウェアのカラーパレットを取得して、そこから色を指定してみました。
バブルチャート
散布図をプロットし、点の大きさを調整することでバブルチャートにすることができます。
import numpy as np
import matplotlib.pyplot as plt
# X,Y軸
x = [0.2, 0.1, 0.6, 0.3, 0.2, 0.9, 0.1, 0.3, 0.3, 0.7]
y = [0.5, 0.6, 0.1, 0.3, 0.9, 0.7, 0.4, 0.6, 0.3, 0.5]
data = np.array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0])
# color番号
colors = [cmap(i) for i in range(len(data))]
# バブルの大きさ
area = 10000 * np.pi * data**2
# グラフの大きさ指定
plt.figure(figsize=(15, 6))
plt.scatter(x, y, s=area, c=colors, alpha=0.5)
plt.grid(True)
