基本的なグラフの描き方
線グラフを描く
数値データをもとにグラフを描くには、Matplotlibパッケージにあるライブラリを利用します。 グラフで描くデータdataはリストで用意します。Matplotlibは、リストのほかに次章で説明するNumpyの配列(numpy.ndarray)でもグラフ化できます。
import matplotlib.pyplot as plot
data= [2., 2.3,3 , 4.1, 2.4, 5.3, 3.2,4.6] #グラフ化するデータ
plot.plot(data) # グラフを描く
plot.show() # グラフ表示
plot(X,Y)のように両軸の値を指定することができます。
xxxxxxxxxx
import matplotlib.pyplot as plt
price = [200, 300, 400, 500, 600]
count = [31, 29, 25, 28, 26]
plt.plot(price, count) # グラフを描く
plt.show() # 表示する
xxxxxxxxxx
import matplotlib.pyplot as plt
price = [200, 300, 400, 500, 600]
count = [31, 29, 25, 28, 26]
plt.plot(price, count) # グラフを描く
plt.title("count - price") # タイトル
plt.xlabel("price") # x軸のラベル
plt.ylabel("count") # y軸のラベル
plt.show() # 表示する
xxxxxxxxxx
import matplotlib.pyplot as plt
price = [200, 300, 400, 500, 600]
count = [31, 29, 25, 28, 26]
plt.plot(price, count, marker="o") # グラフを描く(マーカー付き)
plt.title("count - price") # タイトル
plt.xlabel("price") # x軸のラベル表示
plt.ylabel("count") # y軸のラベル表示
plt.grid(True) # グリッド表示
plt.show() # 表示する
ximport matplotlib.pyplot as plt
import math
X = range(0, 360) # x軸の値
Y = [math.sin(math.radians(d)) for d in X] # y軸の値
plt.plot(X, Y) # グラフを描く
plt.show() # 表示する
xxxxxxxxxx
import matplotlib.pyplot as plt
import math
X = range(0, 360) # x軸の値
Y = [math.sin(math.radians(d)) for d in X] # y軸の値
plt.plot(X, Y) # グラフを描く
plt.savefig("sin.png") # 画像ファイルに保存する
plt.show() # 画面表示するならば最後で実行する
xxxxxxxxxx
import matplotlib.pyplot as plt
import math
X = range(0, 360) # x軸の値
S = [math.sin(math.radians(d)) for d in X] # sinの値
C = [math.cos(math.radians(d)) for d in X] # cosの値
plt.plot(X, S) # sinグラフを描く
plt.plot(X, C) # cosグラフを描く
plt.show() # 表示する
xxxxxxxxxx
import matplotlib.pyplot as plt
X = [100, 200, 300, 400, 500,]
Y1 = [40, 65, 80, 100, 90]
Y2 = [34, 56, 75, 91, 79]
Y3 = [25, 47, 68, 76, 73]
Y4 = [15, 40, 52, 64, 69]
plt.plot(X, Y1, marker="o", color = "blue", linestyle = "-")
plt.plot(X, Y2, marker="v", color = "red", linestyle = "--")
plt.plot(X, Y3, marker="^", color = "green", linestyle = "-.")
plt.plot(X, Y4, marker="d", color = "m", linestyle = ":")
plt.show() # 表示する
色 p324 線の色は自動で設定されますが。色を指定することができます。 色は color = "blue"または c="blue" またはRGB指定の color = "0000ff"でも指定できます。
線の種類 実践、破線、点線などの線の種類はlinestyleで指定します。
マーカーの種類 p325
凡例を表示する p325
xxxxxxxxxx
import matplotlib.pyplot as plt
X = [100, 200, 300, 400, 500,]
Y1 = [40, 65, 80, 100, 90]
Y2 = [34, 56, 75, 91, 79]
Y3 = [25, 47, 68, 76, 73]
plt.plot(X, Y1, marker="o", linestyle = "-", label = "Y1")
plt.plot(X, Y2, marker="v", linestyle = "--", label = "Y2")
plt.plot(X, Y3, marker="^", linestyle = "-.", label = "Y3")
plt.legend(loc = "upper left") # 凡例を作る
plt.show() # 表示する
凡例の位置を指定するlocは次の値で使用します。 p326 コード(数値)でも指定できます。
様々なグラフの種類 p327
xxxxxxxxxx
import matplotlib.pyplot as plt
labels = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"]
x_pos = range(0, 10)
V = [91, 45, 17, 88, 47, 87, 49, 56, 67, 77]
plt.bar(x_pos, V, tick_label = labels) # グラフを描く
plt.show() # 表示する
横棒グラフ 横棒グラフはplt.barth()でつくります。
xxxxxxxxxx
import matplotlib.pyplot as plt
labels = ["A", "B", "C", "D", "E"]
y_pos = range(0, 5)
V = [91, 45, 17, 88, 47]
plt.barh(y_pos, V, tick_label = labels) # グラフを描く
plt.show() # 表示する
積み上げ棒グラフ p328~p329 下のバーに続いて上のバーを描けばいい。 上のバーの開始位置(bottom)を下のバー値にします。 例えばAの値にBを積み上げるので、Bの棒グラフを描く plt.bar()でbottom = Aを指定います。 このグラフではX軸の値のラベルをplt.bar()ではなく、 plt.xsticks()でまとめて指定しています。 長いラベル名がかさならないようにrotation = "vartical"を つけることで、ラベルを回転して表示できます。
xxxxxxxxxx
import matplotlib.pyplot as plt
labels = ["Green", "Red", "Yellow", "Blue", "Black", "White"]
x_pos = range(0, 6) # 6本
A = [34, 46, 54, 45, 56, 37]
B = [17, 47, 55, 67, 38, 49]
bar1 = plt.bar(x_pos, A, color = "g") # グラフAを描く
bar2 = plt.bar(x_pos, B, color = "c", bottom = A) #グラフB描く
plt.xticks(x_pos, labels, rotation = "vertical") # X軸ラベル(垂直)
plt.legend((bar1, bar2), ("man", "woman"), loc = "upper right") #凡例
plt.show()
散布図 pyplotモジュールのscatter()で描きます。
xxxxxxxxxx
import matplotlib.pyplot as plt
X = [91, 45, 17, 88, 47, 87, 49, 56, 67, 23, 86, 20, 60, 67, 30, 41, 91, 55, 37, 14]
Y = [39, 17, 45, 32, 20, 14, 11, 48, 41, 13, 21, 40, 13, 14, 11, 40, 21, 18, 50, 25]
plt.scatter(X, Y) # 散布図を描く
plt.show() # 表示する
マーカーの種類と色を指定する
xxxxxxxxxx
import matplotlib.pyplot as plt
X1 = [79, 49, 24, 61, 37, 47, 70, 53, 48, 20, 2, 64, 77, 78, 78, 8, 6, 14, 62, 43]
Y1 = [26, 31, 34, 36, 31, 35, 41, 49, 31, 37, 43, 24, 29, 37, 30, 46, 41, 40, 31, 39]
X2 = [97, 98, 33, 93, 59, 63, 30, 48, 88, 56, 91, 65, 69, 66, 67, 92, 96, 59, 49, 34]
Y2 = [62, 77, 60, 57, 46, 45, 49, 57, 60, 54, 53, 72, 46, 72, 59, 76, 67, 49, 42, 42]
plt.scatter(X1, Y1, marker = "+", color="red") #グラフを描く
plt.scatter(X2, Y2, marker = "^", color="green") #グラフを描く
plt.show() # 表示する
マーカーのサイズ、透明度、縁のはば、縁線の色を設定した散布図 alphaで透明度(0~1)
xxxxxxxxxx
import matplotlib.pyplot as plt
import numpy as np
X, Y = np.random.rand(100), np.random.rand(100) # ランダムな配列を作る
plt.scatter(X, Y, marker = "o", s = 500, color = "cyan", alpha = 0.5,
linewidths = 2, edgecolors = "b") # グラフを描く
plt.show() # 表示する
p332,p333は省略します。
円グラフ p334
import matplotlib.pyplot as plt labels = ["E", "D", "C", "B", "A"] # ラベル(反時計回り) V = [17, 25, 47, 68, 91] # 値(反時計回り) ex = [0, 0, 0.1, 0, 0] # パイの切り出し plt.pie(V, explode = ex, labels = labels, autopct = '%1.1f%%', startangle = 90) # 円グラフを描く plt.show() # 表示する
複数のグラフを並べて表示するには、サブプロット(subplot)に 描画して配置します。
サブプロットを作成追加する add_subplot(行数,列数,番号)
グラフを左右に並べる
xxxxxxxxxx
### グラフを左右に並べる
import matplotlib.pyplot as plt
X1, Y1 = range(0, 5), [61, 45, 27, 88, 47]
X2, Y2 = range(0, 5), [17, 39, 46, 40, 27]
labels = ["A", "B", "C", "D", "E"]
fig = plt.figure() # 図を作る
#### 1行2列の左
ax1 = fig.add_subplot(1, 2, 1) # サブプロットを追加する
ax1.bar(X1, Y1, color = "b", tick_label = labels) # グラフの描画
ax1.set_title("dog") # グラフのタイトル
#### 1行2列の右
ax2 = fig.add_subplot(1, 2, 2) # サブプロットを追加する
ax2.bar(X2, Y2, color = "g", tick_label = labels) # グラフの描画
ax2.set_title("cat") # グラフのタイトル
plt.show() # 図を表示する
グラフを上下に並べる p336~p337
xxxxxxxxxx
### グラフを上下に並べる
import matplotlib.pyplot as plt
X1, Y1 = range(0, 7), [61, 45, 27, 88, 47, 56, 61]
X2, Y2 = range(0, 7), [17, 39, 46, 40, 27, 35, 41]
labels = ["A", "B", "C", "D", "E", "F", "G"]
fig = plt.figure() # 図を作る
### 2行1列の上
ax1 = fig.add_subplot(2, 1, 1, facecolor = "cyan") # サブプロットを追加する
ax1.bar(X1, Y1, color = "b", tick_label = labels) # グラフの描画
ax1.set_title("snake") # グラフのタイトル
### 2行1列の下
ax2 = fig.add_subplot(2, 1, 2, facecolor = "cyan") # サブプロットを追加する
ax2.bar(X2, Y2, color = "g", tick_label = labels) # グラフの描画
ax2.set_title("fish") # グラフのタイトル
plt.tight_layout() # 下の図のタイトルが重ならないようにする
plt.show() # 図を表示する
グラフを上に1個、下に2個並べる
xxxxxxxxxx
### グラフを上に1個、下に2個並べる
import matplotlib.pyplot as plt
X1, Y1 = range(0, 7), [61, 45, 27, 88, 47, 56, 61]
X2, Y2 = range(0, 5), [77, 49, 56, 47, 67]
X3, Y3 = range(0, 4), [56, 41, 67, 76]
labels = ["A", "B", "C", "D", "E", "F", "G"]
fig = plt.figure() # 図を作る
### 2行1列の上
ax1 = fig.add_subplot(2, 1, 1) # サブプロットを追加する
ax1.bar(X1, Y1, color="b", tick_label=labels) # グラフの描画
ax1.set_title("dog") # グラフのタイトル
#### 2行2列の3番(下の左)
ax2 = fig.add_subplot(2, 2, 3) # サブプロットを追加する
ax2.bar(X2, Y2, color = "g", tick_label = labels[:5]) # グラフの描画
ax2.set_title("cat") # グラフのタイトル
### 2行2列の4番(下の右)
ax3 = fig.add_subplot(2, 2,4) # サブプロットを追加する
ax3.bar(X3, Y3, color = "c", tick_label = labels[:4]) # グラフの描画
ax3.set_title("bird") # グラフのタイトル
plt.tight_layout() # 下の図のタイトルが重ならないようにする
plt.show() # 図を表示する
Y軸の最大値を2つのグラフで同じにする
xxxxxxxxxx
### Y軸の最大値を2つのグラフで同じにする
import matplotlib.pyplot as plt
X1, Y1 = range(0, 5), [61, 45, 27, 88, 47]
X2, Y2 = range(0, 5), [17, 39, 46, 40, 27]
labels = ["A", "B", "C", "D", "E"]
fig= plt.figure() # 図を作る
### 1行2列の左
ax1 = fig.add_subplot(1, 2, 1) # サブプロットを追加する
ax1.bar(X1, Y1, color="b",tick_label=labels) # グラフの描画
ax1.set_title("dog") # グラフのタイトル
ymin, ymax = plt.ylim() # 現在のY軸のレンジを取得する
### 1行2列の右
ax2 = fig.add_subplot(1, 2, 2) # サブプロットを追加する
ax2.bar(X2, Y2, color="g",tick_label = labels) #グラフの描画
ax2.set_title("cat") # グラフのタイトル
plt.ylim(ymin, ymax) # Y軸のレンジをax1と合わせる
plt.show() # 図を表示する
2つのグラフのY軸を1つにする
xxxxxxxxxx
### 2つのグラフのY軸を1つにする
import matplotlib.pyplot as plt
X1, Y1 = range(0, 5), [61, 45, 27, 88, 47]
X2, Y2 = range(0, 5), [17, 39, 46, 40, 27]
labels = ["A", "B", "C", "D", "E"]
##### ### Y軸を共有する2個のサブプロットを追加する
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, sharey=True) # 1行2列のサブプロットを追加
# Y軸を共有したグラフ
ax1.bar(X1, Y1, color = "b", tick_label = labels)
ax1.set_title("dog") # グラフのタイトルを設定
# Y軸を共有したグラフ
ax2.bar(X2, Y2, color = "g", tick_label = labels)
ax2.set_title("cat") # グラフのタイトルを設定
plt.show() # 図を表示する