基本的なグラフの描き方
線グラフを描く
数値データをもとにグラフを描くには、Matplotlibパッケージにあるライブラリを利用します。 グラフで描くデータdataはリストで用意します。Matplotlibは、リストのほかに次章で説明するNumpyの配列(numpy.ndarray)でもグラフ化できます。
import matplotlib.pyplot as plotdata= [2., 2.3,3 , 4.1, 2.4, 5.3, 3.2,4.6] #グラフ化するデータplot.plot(data) # グラフを描くplot.show() # グラフ表示
plot(X,Y)のように両軸の値を指定することができます。
xxxxxxxxxximport matplotlib.pyplot as pltprice = [200, 300, 400, 500, 600]count = [31, 29, 25, 28, 26]plt.plot(price, count) # グラフを描くplt.show() # 表示する
xxxxxxxxxximport matplotlib.pyplot as pltprice = [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() # 表示する
xxxxxxxxxximport matplotlib.pyplot as pltprice = [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 pltimport mathX = range(0, 360) # x軸の値Y = [math.sin(math.radians(d)) for d in X] # y軸の値plt.plot(X, Y) # グラフを描くplt.show() # 表示する
xxxxxxxxxximport matplotlib.pyplot as pltimport mathX = 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() # 画面表示するならば最後で実行する
xxxxxxxxxximport matplotlib.pyplot as pltimport mathX = 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() # 表示する
xxxxxxxxxximport matplotlib.pyplot as pltX = [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
xxxxxxxxxximport matplotlib.pyplot as pltX = [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
xxxxxxxxxximport matplotlib.pyplot as pltlabels = ["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()でつくります。
xxxxxxxxxximport matplotlib.pyplot as pltlabels = ["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"を つけることで、ラベルを回転して表示できます。
xxxxxxxxxximport matplotlib.pyplot as pltlabels = ["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()で描きます。
xxxxxxxxxximport matplotlib.pyplot as pltX = [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() # 表示する
マーカーの種類と色を指定する
xxxxxxxxxximport matplotlib.pyplot as pltX1 = [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)
xxxxxxxxxximport matplotlib.pyplot as pltimport numpy as npX, 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 pltX1, 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 pltX1, 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 pltX1, 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 pltX1, 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 pltX1, 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() # 図を表示する