2018/06/27

pythonプログラミング入門(1)グラフ描画の初手



エクセルではシートから作図が 画面を選択することでできますが、pythonで同様のことをするにはプログラムで作成 します。pythonではエクセルよりも大きなデータや複雑なデータを扱うことが あるためです。

 pythonで見栄えの良いグラフを上手く 作成するには、配列とグラフの関係を把握することが近道です。

その他にも軸名やプロットのマーカー種類、色の操作、矢印による図内のコメントの作成方法も解説します。


matplotlibで最も簡単なグラフの作成(y値のみ指定)


matplotlibを用いた最も簡単なグラフで直線を作成します。
plotに配列で数値を入れます。xは値の指定がない場合、[0,1,2,3]となり、y軸は[1,2,3,4]となります。plt.show()で設定したグラフが表示されます。縦軸、横軸の名称を「y numbers」、「x numbers」と表示しています。


  • 直線のグラフ( コード例)
import matplotlib.pyplot as plt plt.plot([1,2,3,4]) #ラベルの表示 plt.ylabel('y numbers') plt.xlabel('x numbers') plt.show()

最も簡単なグラフの作成2(xとy値をそれぞれ指定)


散布図の作成です。
xとyの値を指定します。エクセルではxとyの組み合わせで点を表しますが、pythonの場合は、x、yとそれぞれに配列を入れることで指定します。(x,y)とならないことでプロットの座標が例では分かりにくくなります。

マーカーの形や色を指定することもできます。 例ではマーカーを'ro'としてred赤で「●」bで青の意味となっています。

plt.plot([1,2,3,4], [1,4,9,16], 'bo')

グラフの描画の範囲を指定することもできます。 下記のようにxの最大、最小、yの最大、最小の順で指定します。

plt.axis([xの最小値, xの最大値, yの最小値, yの最大値])

  • 散布図のグラフ(コード例)
import matplotlib.pyplot as plt #データの設定 plt.plot([1,2,3,4], [1,4,9,16], 'bo') #グラフ範囲の指定 plt.axis([0, 6, 0, 20]) #ラベルの書き方 plt.ylabel('y numbers') plt.xlabel('x numbers') plt.show()


マーカーの指定方法

マーカー種類の指定

マーカー'ro'は色(r:red)と種類('o':●)を表していました。色と種類をそれぞれ指定することができます。下記の書式はどちらでも同じ結果になります。

plt.plot([1,2,3,4], [1,4,9,16], color='blue', marker='o')
plt.plot([1,2,3,4], [1,4,9,16], 'bo')

matplotlibで使用できるマーカの種類一覧は、下記の表になります。
  • matplotlibで使用できるマーカの種類一覧
マーカー表示例マーカー表示例
’o’
'X'
'+'
'P'
'x'
'd'
'|'
'D'
's'
'H'
'<'
'*'
'>'
'p'
'v'

マーカー色の指定

マーカーに色を指定するにはmatplotlibで使用できる色の一覧を参照してください。


マーカーサイズの指定

マーカーのサイズを変更には、下記のようにmarkersizeで指定することができます。

plt.plot([1,2,3,4], [1,4,9,16], color='blue', marker='o' ,markersize=12


矢印で引き出し、コメントを追加したい場合


グラフの解説をするためのコメントを引出し線(矢印)で入れることもできます。

plt.annotate('text', xy=(1.25, 1), xytext=(1.5, 1.25),arrowprops=dict(arrowstyle="->"))

コメントの内容と矢印の起点、テキストの位置の座標を入れます。 arrowstyleでスタイルを変更すると矢印の種類を選択できます。

matplotlib.pyplot.annotateを参照ください。

import matplotlib.pyplot as plt plt.plot([1], [1], 'bo',markersize=12) #矢印付きのコメントを記載する #xy:矢じりの先頭 xytext:テキストの先頭 以降、矢印の形と色(角度や曲がり方も調整できる) plt.annotate('text', xy=(1.25, 1), xytext=(1.5, 1.25),arrowprops=dict(arrowstyle="->")) #描画の範囲を指定 x_mini x_max y_mini y_max plt.axis([0, 2, 0, 2]) #軸を非表示 #plt.axis("off") plt.show()



軸をoffにすることで図のように扱えます。
plt.axis("off")