LoginSignup
58
71

More than 5 years have passed since last update.

[Pythonによる科学・技術計算] 2次元(カラー)等高線等の描画,可視化,matplotlib

Last updated at Posted at 2017-07-18

はじめに

matplotlibのpcolor, imshow, contourメソッドを用いて等高線図を作成する。

追記:
2017年8月28日: pcolormeshとcontourをミックスした内容(4)を追加した。

内容

(1) $z=sin(x)+cos(y)$を考え,それを[0,x,10], [0,y,10]の範囲でpcolorで描画する。
pcolormeshを使っている。pcolor()よりも高速である。

(2) impshowを使った描画例

(3) contorを使った等高線図

(4) pcolormeshとcontourをミックスした図

例(1): pcolormeshの利用


import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 10, 0.05) #x軸の描画範囲の生成。0から10まで0.05刻み。
y = np.arange(0, 10, 0.05) #y軸の描画範囲の生成。0から10まで0.05刻み。

X, Y = np.meshgrid(x, y)
Z = np.sin(X) + np.cos(Y)   # 表示する計算式の指定。等高線はZに対して作られる。

plt.pcolormesh(X, Y, Z, cmap='hsv') # 等高線図の生成。cmapで色付けの規則を指定する。
#plt.pcolor(X, Y, Z, cmap='hsv') # 等高線図の生成。cmapで色付けの規則を指定する。

pp=plt.colorbar (orientation="vertical") # カラーバーの表示 
pp.set_label("Label", fontname="Arial", fontsize=24) #カラーバーのラベル

plt.xlabel('X', fontsize=24)
plt.ylabel('Y', fontsize=24)

plt.show()


結果(1): pcolormeshを使った図

t.png

例(2): impshowの利用

二次元配列をササッと可視化したい場合はmatplotlib.pyplot.imshow()を使うと良い。

import numpy as np
import matplotlib.pyplot as plt

z=np.zeros([100,100])
for i in range(100):
    for j in range(100):
        z[i,j] = i+j

plt.imshow(z)
plt.colorbar () # カラーバーの表示 
plt.xlabel('X')
plt.ylabel('Y')
plt.show()

結果 (2): impshow

t.png


例(3) contourを使った等高線図

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 10, 0.05) #x軸の描画範囲の生成。0から10まで0.05刻み。
y = np.arange(0, 10, 0.05) #y軸の描画範囲の生成。0から10まで0.05刻み。

X, Y = np.meshgrid(x, y)
Z = np.sin(X) + np.cos(Y)   # 表示する計算式の指定。等高線はZに対して作られる。

# 等高線図の生成。
cont=plt.contour(X,Y,Z,  5, Vmax=1,colors=['black'])
cont.clabel(fmt='%1.1f', fontsize=14)


pp=plt.colorbar (orientation="vertical") # カラーバーの表示 
pp.set_label("Label", fontname="Arial", fontsize=24) #カラーバーのラベル



plt.xlabel('X', fontsize=24)
plt.ylabel('Y', fontsize=24)

plt.show()

結果(3): contour図

t.png


例(4)pcolormeshとcontourのミックス

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 10, 0.05) #x軸の描画範囲の生成。0から10まで0.05刻み。
y = np.arange(0, 10, 0.05) #y軸の描画範囲の生成。0から10まで0.05刻み。

X, Y = np.meshgrid(x, y)
Z = np.sin(X) + np.cos(Y)   # 表示する計算式の指定。等高線はZに対して作られる。

# 等高線図の生成。
cont=plt.contour(X,Y,Z,  5, vmin=-1,vmax=1, colors=['black'])
cont.clabel(fmt='%1.1f', fontsize=14)


plt.xlabel('X', fontsize=24)
plt.ylabel('Y', fontsize=24)


plt.pcolormesh(X,Y,Z, cmap='cool') #カラー等高線図
pp=plt.colorbar (orientation="vertical") # カラーバーの表示 
pp.set_label("Label",  fontsize=24)

plt.show()

結果(4): pcolormeshとcontourのミックス

fig.png


[補遺]

カラーマップ指定のcmapでパターンを指定する。パターンは数十種類用意されている。ここにサンプルが掲載されている:

'prism', 'ocean', 'gist_earth', 'terrain', 'gist_stern',
'gnuplot', 'gnuplot2', 'CMRmap', 'cubehelix', 'brg', 'hsv',
'gist_rainbow', 'rainbow', 'jet', 'nipy_spectral', 'gist_ncar'


58
71
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
58
71