今年の年賀状の中心のなる図では、海洋予測モデルの流速を3次元地形と一緒に表示した。
plotlyで作成した。Jupyterlab上でぐりぐり動かすこともできる。
データを読み込む所は省略して、図を描く部分のコードは以下の通り。
go.Surfaceが3次元的に地形を描くところで、xがx軸、yがy軸、地形のデータがzに入っている。Ctopoは彩色のためのカラースケール。
go.Coneが流速のベクトルを3次元コーンで表現した部分。(xv,yv,zv)に3次元座標、(uv,vv,wv)に3次元ベクトルデータが入っている。
layoutでは図のアスペクト比を変えたり、座標軸を表示させなくしたりしている。
import plotly.graph_objects as go
Ctopo = [[0, 'rgb(0, 0, 70)'],[0.2, 'rgb(0,90,150)'],
[0.4, 'rgb(150,180,230)'], [0.5, 'rgb(210,230,250)'],
[0.50001, 'rgb(0,120,0)'], [0.57, 'rgb(220,180,130)'],
[0.65, 'rgb(120,100,0)'], [0.75, 'rgb(80,70,0)'],
[0.9, 'rgb(200,200,200)'], [1.0, 'rgb(255,255,255)']]
fig = go.Figure(data=[go.Surface(z=z, x=x, y=y,showscale=False,colorscale=Ctopo,cmin=-3000,cmax=3000),
go.Cone(x=xv,y=yv,z=zv,u=uv,v=vv,w=wv,sizemode="absolute",sizeref=0.05,colorscale="turbo",opacity=0.5,cmin=0,cmax=1.5,showscale=False)])
noaxis=dict(showbackground=False,
showgrid=False,
showline=False,
showticklabels=False,
ticks='',
title='',
zeroline=False)
fig.update_layout(
width=1500, height=500,
margin=dict(l=0, r=0, b=0, t=0),
scene_aspectmode='manual',
scene_aspectratio=dict(x=2, y=1, z=0.7),
scene = dict(
xaxis = noaxis,
yaxis = noaxis,
zaxis = noaxis)
)
fig.show()