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

#はじめに
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の利用
```py3

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](https://qiita-image-store.s3.amazonaws.com/0/192457/0d40cf30-f1d7-1759-974c-10d9d09a7644.png)




#例(2): impshowの利用

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

```py3
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](https://qiita-image-store.s3.amazonaws.com/0/192457/cf5bfdbd-8330-9c22-8173-322252b8a67b.png)


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

```py3
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](https://qiita-image-store.s3.amazonaws.com/0/192457/3f73df59-3c47-6592-8c62-74e0bda2d8d4.png)

***

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

```py3
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](https://qiita-image-store.s3.amazonaws.com/0/192457/6bf8c0f9-5ee9-e272-314a-db79a06a0246.png)

***


##[補遺]
カラーマップ指定の**cmap**でパターンを指定する。パターンは数十種類用意されている。[ここ](https://matplotlib.org/examples/color/colormaps_reference.html)にサンプルが掲載されている:

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

***