とらりもんHOME  Index  Search  Changes  Login

python入門: matplotlib.pyplotモジュール

pythonでnumpyモジュールの次によく使う有用なモジュール(奈佐原の主観(笑))は, matplotlib.pyplotモジュールである。これは図やグラフを描く機能を提供してくれる, 楽しいモジュールである! お約束の短縮名はpltである。つまり,

import matplotlib.pyplot as plt

という呪文でインポートする。matplotlib.pyplotは, たいていnumpyモジュールと組み合わせて使うので, 上の呪文は

import numpy as np

という呪文とセットで打つことが多い。

pythonで散布図を描いてみよう

では, さっそくmatplotlib.pyplotモジュールを使ってみよう。例によって, pythonシェル(ipython3)を立ち上げ, 以下を打とう:

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-10,10,0.1)
y = x**2
plt.scatter(x, y)
plt.show()

なんと! 我々が高校数学でよく見た放物線が出てきたではないか!! 何をやったか説明しよう。最初の2行はモジュールのインポートである。次の

x = np.arange(-10,10,0.1)

は, 「-10以上10未満の数を0.1刻みで順に並べてnumpy.ndarrayインスタンスにせよ」という命令であり, つまり,

x = np.array([-10, -9.9, -9.8, ...(中略)..., 9.8, 9.9])

と同じことである。np.arangeは前回も使ったが, このように刻み幅を小数にすることもできるのだ。

で, 次のy=x**2は, xの各要素を2重にして並べたnumpy.ndarrayインスタンスを作って, それにyという名前をつける。次の

plt.scatter(x, y)

は, matplotlib.pyplotの命令であり, xの各要素をx座標に, yの各要素をy座標にとるような点をグラフにプロットせよ, という意味だ。で, 最後の

plt.show()

は, そうやってできたグラフを画面に表示せよ, という命令だ。

課題: 上の例で, plt.scatter(x, y)をplt.plot(x, y)に置き換えて実行せよ。何が起きるか?

課題: 上の例を応用して, 関数y=sin(x)のグラフを描け。

課題: 上の例を応用して, 半径1の円周上の点を, 15度間隔でグラフにプロットせよ。ヒント: 角をnumpy.ndarrayインスタンスとして並べる。15度はπ/12であることに注意すれば, 角はnp.arange(0, 2*np.pi, np.pi/12)とすればよい。これをnp.cosとnp.sinにそれぞれ入れて, 前者をx, 後者をyとして, あとは同じ!

最初のプログラムを解読しよう

ここまで来たら, python入門: python初経験!で打ったプログラム(あのらせんのグラフを出すやつ)が理解できる:

import numpy as np
import matplotlib.pyplot as plt
t=np.arange(0,100,0.1)
plt.plot(np.cos(t)*np.exp(-t/10), np.sin(t)*np.exp(-t/10))
plt.show()

どうしてらせんのグラフが出たか, 解読してみよう!!

課題: らせんが中心に落ちていくのをもっとゆるやかにするにはどうすればよいか? 考えてやってみよ。

課題: 上のプログラムの中程の2行を以下のように修正して走らせてみよ:

t=np.arange(0,100,0.005)
plt.plot(np.cos(3*t)*np.exp(-t/30), np.sin(4*t)*np.exp(-t/30))

どういう図が出るか?

課題: こんな調子で上のプログラム例をいろいろ変えて, もっとカッコよくて変な図形を描いてみよ。

以下, 上級者向けのメモ(教育プログラムではありません)

  • 複数の図(subplot)の全体についてタイトルをつける: plt.suptitle
  • 複数の図(subplot)どうしの間隔を調整: plt.subplots_adjust(wspace=0.4, hspace=0.6)
  • 新規ウィンドウ(複数の図を別々のウィンドウで出す時)  plt.figure()
  • plt.show()せずにウィンドウをキャッシュから消す: plt.close()
  • x軸のラベル: plt.xlabel("PRVI (dB)")
  • y軸のラベル: plt.ylabel("NDVI")
  • 地図のカラーテーブルを変える: plt.imshow(x, cmap=matplotlib.cm.gray) # このgrayのところをカラーテーブル名にする。help(matplotlib.cm)でリスト出てくる。
  • カラーテーブルを逆転するには, カラーテーブル名に_rをつければよい。plt.imshow(x, cmap=matplotlib.cm.rainbow_r)
  • RGB画像を出したいときは, データをnp.arrayでastype(uint8)にすること。uint16やfloatでは色が変になる。たとえvmin, vmaxを指定しても。
Last modified:2019/03/20 19:55:39
Keyword(s):
References:[python入門]