20
24

More than 3 years have passed since last update.

plotlyで3次元表示

Posted at

今年の年賀状の中心のなる図では、海洋予測モデルの流速を3次元地形と一緒に表示した。
2021nenga2.gif

plotlyで作成した。Jupyterlab上でぐりぐり動かすこともできる。
8e4cfffd10104cc389c5bd302683c667.gif

データを読み込む所は省略して、図を描く部分のコードは以下の通り。
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()
20
24
0

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
20
24