忍者ブログ

!===== implicit none

設計と実装を同時にやるのは…やめようね!!(血涙)

matplotlibのpcolormeshとquiverで2次元カラープロットとベクトル場を描く

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

matplotlibのpcolormeshとquiverで2次元カラープロットとベクトル場を描く

計算結果を3次元可視化ソフトで解析する前に、とりあえず簡単に結果を目で見れるようにしたい、ということでmatplotlibのpcolormeshとquiverを使って2次元平面でのスカラー場とベクトル場の可視化を行うスクリプトを作りました。
ただそんときに、pcolormeshとquiverでは指定するグリッドの座標の位置が異なる、ということがあったので注意が必要なようです。
具体的には、
■pcolormesh→カラープロットしたいスカラー量の2次元データのグリッド数(NX, NY)よりも1大きいグリッド(NX+1, NY+1)を用意、そのグリッドの間に色塗りしてくれる
■quiver→2次元ベクトル表示したいデータと同じグリッドでおk、そのグリッド位置にベクトルを表示してくれる
というようになっていました。
まあこれに限った話ではなく、特にカラープロットするときなんかはグリッド交差点なのか、グリッド中心なのかモノによって違うんでちゃんとマニュアル見なさい、ということですね。
以下にサンプルを置いておきます。

###  sample.py ###
import numpy as np
import matplotlib.pyplot as plt

### 例えばNX=8, NY=8の一様グリッドで計算した結果を出力したいとする
NX=8
NY=8
xvmin=0.
xvmax=1.
yvmin=0.
yvmax=1.
xcmin = xvmin - (xvmax - xvmin)/(2.*NX)
xcmax = xvmax + (xvmax - xvmin)/(2.*NX)
ycmin = yvmin - (yvmax - yvmin)/(2.*NY)
ycmax = yvmax + (yvmax - yvmin)/(2.*NY)

### カラープロットのグリッド
xc  =np.linspace(xcmin-,xcmax,NX+1)
yc = np.linspace(ycmin,ycmax,NY+1)
XC, YC = np.meshgrid(xc,yc)
### ベクトルのグリッド
xv = np.linspace(xvmin,xvmax,NX)
yv = np.linspace(yvmin,yvmax,NY)
XV,YV = np.meshgrid(xv,yv)

### 本当はバイナリファイルから計算データを読むけど
### 面倒なのでここは省略、代わりに適当なのを用意
rho = np.exp(-(XV**2+YV**2))
vx = np.random.rand(NX*NY).reshape(NX,NY)
vy = np.random.rand(NX*NY).reshape(NX,NY)

### 描画と出力
plt.pcolormesh(XC,YC,rho)
plt.colorbar()
plt.quiver(XV,YV,vx,vy)
plt.xlim([xcmin,xcmax])
plt.ylim([ycmin,ycmax])

plt.show()

PR

コメント

プロフィール

HN:
NoName
性別:
男性
職業:
おっさん
趣味:
無趣味
自己紹介:
すーぱーぷろぐらまー()になりたい

スポンサードリンク

スポンサードリンク

P R

リンク