Symfoware

Symfowareについての考察blog

matplotlibを使ってPythonでグラフを表示する

Pythonでグラフを出力したくて、いいライブラリがないか調べていると
この記事を見つけました。
pythonのグラフ作成ツールmatplotlibを使ってみたメモ

matplotlibを使ってみることにしました。
http://matplotlib.org/


インストール



matplotlibをUbuntu 14.04にインストールしてみます。

こちらを参考に、apt-getでインストールしました。
http://matplotlib.org/1.3.1/users/installing.html


$ sudo apt-get install python-matplotlib



pythonコンソールで、「import matplotlib」して
インストールできたか確認します。


$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib







単純なグラフ



使い方を学ぶため、こちらを写経していきます。
Matplotlib サンプル集


  1. # -*- coding: utf-8 -*-
  2. import pylab
  3. # -10 から 10 まで 0.1 刻みの配列をつくる (numpy.arange )
  4. x = pylab.arange(-10.0, 10.0, 0.1)
  5. # 関数 numpy.sin : x の各要素に Math.sin を適用して配列オブジェクトを生成
  6. y = pylab.sin(x)
  7. # x,y を描画
  8. pylab.plot(x,y)
  9. # 描画
  10. pylab.show()




実行すると、こんな画面が表示されます。

419_01.png

この画面でグラフの拡大などが行えます。


もっと単純に、線グラフを描画するサンプル。


  1. # -*- coding: utf-8 -*-
  2. import pylab
  3. data = [100, 200, 250, 280, 300]
  4. pylab.plot(data)
  5. # 描画
  6. pylab.show()



419_02.png




点で描画



線ではなく、点でプロットしたい場合。


  1. # -*- coding: utf-8 -*-
  2. import pylab
  3. # -10 から 10 まで 0.1 刻みの配列をつくる (numpy.arange )
  4. x = pylab.arange(-10.0, 10.0, 0.1)
  5. # 関数 numpy.sin : x の各要素に Math.sin を適用して配列オブジェクトを生成
  6. y = pylab.sin(x)
  7. # x,y を描画
  8. pylab.plot(x,y,'r*')
  9. # 描画
  10. pylab.show()



419_03.png


「r」が赤色、「*」が星マークを表します。

マークのサンプルは、こちらが参考になるかと。
http://matplotlib.org/1.3.1/examples/pylab_examples/filledmarker_demo.html





複数データの描画



複数のデータを同時に描画したい場合は、plotを2回行います。


  1. # -*- coding: utf-8 -*-
  2. import pylab
  3. # -10 から 10 まで 0.1 刻みの配列をつくる (numpy.arange )
  4. x = pylab.arange(-10.0, 10.0, 0.1)
  5. # 関数 numpy.sin : x の各要素に Math.sin を適用して配列オブジェクトを生成
  6. y1 = pylab.sin(x)
  7. # 関数 numpy.cos : x の各要素に Math.cos を適用して配列オブジェクトを生成
  8. y2 = pylab.cos(x)
  9. # x,y を描画
  10. pylab.plot(x,y1)
  11. pylab.plot(x,y2)
  12. # 描画
  13. pylab.show()




419_04.png






タイトルラベル等の追加



グラフ、x軸、y軸のタイトルラベルをつけるサンプルです。


  1. # -*- coding: utf-8 -*-
  2. import pylab
  3. # -10 から 10 まで 0.1 刻みの配列をつくる (numpy.arange )
  4. x = pylab.arange(-10.0, 10.0, 0.1)
  5. # 関数 numpy.sin : x の各要素に Math.sin を適用して配列オブジェクトを生成
  6. y1 = pylab.sin(x)
  7. # 関数 numpy.cos : x の各要素に Math.cos を適用して配列オブジェクトを生成
  8. y2 = pylab.cos(x)
  9. # x,y を描画
  10. pylab.plot(x,y1)
  11. pylab.plot(x,y2)
  12. #ラベルの追加
  13. pylab.title('Sample Graph') #タイトル
  14. pylab.xlabel('t [ms]') # X 軸
  15. pylab.ylabel('Out [V]') # Y 軸
  16. # 描画
  17. pylab.show()




419_05.png





凡例の追加



グラフの系列の判例を追加するサンプルです。


  1. # -*- coding: utf-8 -*-
  2. import pylab
  3. # -10 から 10 まで 0.1 刻みの配列をつくる (numpy.arange )
  4. x = pylab.arange(-10.0, 10.0, 0.1)
  5. # 関数 numpy.sin : x の各要素に Math.sin を適用して配列オブジェクトを生成
  6. y1 = pylab.sin(x)
  7. # 関数 numpy.cos : x の各要素に Math.cos を適用して配列オブジェクトを生成
  8. y2 = pylab.cos(x)
  9. # x,y を描画
  10. # ※※※ label名を指定すること
  11. pylab.plot(x,y1, label='sin(x)')
  12. pylab.plot(x,y2, label='cos(x)')
  13. #ラベルの追加
  14. pylab.title('Sample Graph') #タイトル
  15. pylab.xlabel('t [ms]') # X 軸
  16. pylab.ylabel('Out [V]') # Y 軸
  17. # 凡例
  18. pylab.legend()
  19. # 描画
  20. pylab.show()




419_06.png


注意点は、pylab.plotするときに、labelの名称を指定しておくことです。
label名を指定していないと、こんな警告が発生します。


$ python sample.py
/usr/local/lib/python2.7/dist-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/axes.py:4747:
UserWarning: No labeled objects found. Use label='...' kwarg on individual plots.
warnings.warn("No labeled objects found. "








誤差棒をつける



pylab.errorbarで、誤差を付与することができます。


  1. # -*- coding: utf-8 -*-
  2. import pylab
  3. # -10 から 10 まで 0.1 刻みの配列をつくる (numpy.arange )
  4. x = pylab.arange(-10.0, 10.0, 0.1)
  5. # 関数 numpy.sin : x の各要素に Math.sin を適用して配列オブジェクトを生成
  6. y = pylab.sin(x)
  7. # 0.0 ~ 0.5 の一様乱数を y の個数分発生
  8. err = pylab.random_sample(pylab.size(y)) * 0.5
  9. # x,y を描画
  10. pylab.plot(x,y)
  11. # 誤差棒を加える
  12. pylab.errorbar(x,y,err,fmt='o')
  13. # 描画
  14. pylab.show()




419_07.png






領域を分けて描画



2つのグラフを1画面に表示したい場合、pylab.subplotで表示する領域を指定します。


  1. # -*- coding: utf-8 -*-
  2. import pylab
  3. # -10 から 10 まで 0.1 刻みの配列をつくる (numpy.arange )
  4. x = pylab.arange(-10.0, 10.0, 0.1)
  5. # 関数 numpy.sin : x の各要素に Math.sin を適用して配列オブジェクトを生成
  6. y1 = pylab.sin(x)
  7. # 関数 numpy.cos : x の各要素に Math.cos を適用して配列オブジェクトを生成
  8. y2 = pylab.cos(x)
  9. # 一画面を 2 行 1列の領域に分割し、1番めの領域に描画する
  10. pylab.subplot(2,1,1)
  11. pylab.title('y=sin(x)')
  12. pylab.xlabel('t [ms]')
  13. pylab.ylabel('Out 1 [V]')
  14. pylab.plot(x,y1)
  15. # 一画面を 2 行 1列の領域に分割し、2番めの領域に描画する
  16. pylab.subplot(2,1,2)
  17. pylab.xlabel('t [ms]')
  18. pylab.ylabel('Out 2 [V]')
  19. pylab.plot(x,y2)
  20. # 描画
  21. pylab.show()




419_08.png




対数表示




  1. # -*- coding: utf-8 -*-
  2. import pylab
  3. # 0 から 5.0 まで 0.01 刻みで値を生成
  4. x = pylab.arange(0, 5.0, 0.01)
  5. y = pylab.exp(-x)
  6. # ノイズを加える
  7. y_data = pylab.exp(-x) * (0.7 + 0.6 * pylab.random_sample(len(x)))
  8. # 一画面を 2 行 1列の領域に分割し、1番めの領域に描画する
  9. pylab.subplot(2,1,1)
  10. pylab.plot(x,y_data,"o")
  11. pylab.plot(x,y,"r")
  12. pylab.ylabel('Y')
  13. # 一画面を 2 行 1列の領域に分割し、2番めの領域に描画する
  14. axes = pylab.subplot(2,1,2)
  15. axes.set_yscale("log") # Y 軸を対数表示にする
  16. pylab.plot(x,y_data,"o") # axes.plot に同じ
  17. pylab.plot(x,y,"r")
  18. pylab.xlabel('X')
  19. pylab.ylabel('log(Y)')
  20. # 描画
  21. pylab.show()



419_09.png





任意の大きさに領域を分けて描画




  1. # -*- coding: utf-8 -*-
  2. import pylab
  3. # -10 から 10 まで 0.1 刻みの配列をつくる (numpy.arange )
  4. x = pylab.arange(-10.0, 10.0, 0.1)
  5. # 関数 numpy.sin : x の各要素に Math.sin を適用して配列オブジェクトを生成
  6. y1 = pylab.sin(x)
  7. # 関数 numpy.cos : x の各要素に Math.cos を適用して配列オブジェクトを生成
  8. y2 = pylab.cos(x)
  9. # (0.1, 0.8) を原点 幅 0.8、高さ 0.1 の領域に軸を設定
  10. pylab.axes([0.10, 0.80 ,0.80,0.10])
  11. pylab.title('y=sin(x)')
  12. pylab.xlabel('t [ms]')
  13. pylab.ylabel('Out 1 [V]')
  14. pylab.plot(x,y1)
  15. # (0.1, 0.8) を原点 幅 0.8、高さ 0.55 の領域に軸を設定
  16. pylab.axes([0.1,0.1,0.80,0.55])
  17. pylab.title('y=cos(x)')
  18. pylab.xlabel('t [ms]')
  19. pylab.ylabel('Out 2 [V]')
  20. pylab.plot(x,y2)
  21. # 描画
  22. pylab.show()




419_10.png




任意の位置に文字列を描画



フォントの指定は、こちらを参考にしました。
Matplotlib 利用ノート


  1. # -*- coding: utf-8 -*-
  2. import pylab
  3. from matplotlib.font_manager import FontProperties
  4. # -10 から 10 まで 0.1 刻みの配列をつくる (numpy.arange )
  5. x = pylab.arange(-10.0, 10.0, 0.1)
  6. # 関数 numpy.sin : x の各要素に Math.sin を適用して配列オブジェクトを生成
  7. y = pylab.sin(x)
  8. # (0.1, 0.8) を原点 幅 0.8、高さ 0.1 の領域に軸を設定
  9. ax = pylab.axes([0.10, 0.80 ,0.80,0.10])
  10. # 軸の刻みを書かない
  11. pylab.xticks([])
  12. pylab.yticks([])
  13. header = u'日本語テスト'
  14. # フォントファイルを直接指定
  15. fp = FontProperties(fname='/usr/share/fonts/truetype/takao-gothic/TakaoGothic.ttf')
  16. pylab.text(0.05, 0.5, header, fontproperties=fp, weight='bold', fontsize=20, verticalalignment='center',transform=ax.transAxes)
  17. pylab.axes([0.1,0.1,0.80,0.65])
  18. pylab.xlabel('t [ms]')
  19. pylab.ylabel('Out 2 [V]')
  20. pylab.plot(x,y)
  21. # 描画
  22. pylab.show()




419_11.png





ASCIIデータの読み込み・描画



ファイルのデータを直接グラフにする方法。

用意したデータの内容はこんなかんじです。

・data.txt

-10.000,0.544
-9.900,0.458
-9.800,0.366
-9.700,0.272





実行するプログラム。


  1. # -*- coding: utf-8 -*-
  2. import pylab
  3. # 各フィールドは','で区切られており、カラム毎に分割する。
  4. x,y = pylab.loadtxt('data.txt',delimiter=',',unpack=True)
  5. pylab.plot(x,y)
  6. # 描画
  7. pylab.show()




419_12.png





結果をファイルに出力する



pylab.savefigを使用します。


  1. # -*- coding: utf-8 -*-
  2. import pylab
  3. # -10 から 10 まで 0.1 刻みの配列をつくる (numpy.arange )
  4. x = pylab.arange(-10.0, 10.0, 0.1)
  5. # 関数 numpy.sin : x の各要素に Math.sin を適用して配列オブジェクトを生成
  6. y = pylab.sin(x)
  7. # x,y を描画
  8. pylab.plot(x,y)
  9. # ファイルにセーブ
  10. pylab.savefig('graph.png')




419_13.png




【参考URL】

pythonのグラフ作成ツールmatplotlibを使ってみたメモ

http://matplotlib.org/1.3.1/users/installing.html

Matplotlib サンプル集

Matplotlib 利用ノート
関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2014/06/01(日) 16:21:26|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<matplotlibで、判例やグラフタイトルに日本語を使用する | ホーム | FreeBSD 10にNginx + php-fpmをインストールする>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1416-7c753c1e
この記事にトラックバックする(FC2ブログユーザー)