Animated version of Gulf Stream sea surface temperatures done with
@oceanographer from yesterday - inspired by the moving media #art installations @refikanadol! Shading and texture comes from simulated zonal currents #SciArt @neuro_rish@matplotlib #FESOM2
Example of scalar field visualization shaded by corresponding vector field.Data used are from FESOM2 model simulations with 1km resolution in Gulf Stream area. Data are interpolated to regular 1/100 degree grid.
数据空间上进行了插值,大概就是1km左右的格点分辨率了。
链接: (数据+代码+测试图)
https://github.com/koldunovn/FESOM_SST_shaded_by_U
代码:
import xarray as xr
import numpy as np
import matplotlib.pylab as plt
import matplotlib.cm as cm
###Download data:
#wget https://zenodo.org/record/4759091/files/GF_FESOM2_testdata.tar.gz
###Unpack data:
#gunzip GF_FESOM2_testdata.tar.gz
#tar -xvf GF_FESOM2_testdata.tar
###Open netCDF files
sst = xr.open_dataset('./GF_FESOM2_testdata/sst.nc')
u = xr.open_dataset('./GF_FESOM2_testdata/u_surf.nc')
v = xr.open_dataset('./GF_FESOM2_testdata/v_surf.nc')
###Plot the figure with U shading
fig, ax = plt.subplots(
1,
1,
constrained_layout=True,
figsize=(10,10),
)
ax.imshow(np.flipud(sst.sst.values), cmap=cm.RdBu_r, vmin=12, vmax=24)
ax.imshow(np.flipud(u.u_surf.values), alpha=0.3, cmap=cm.gray, vmin=-.3, vmax=0.3)
ax.axis('off');
### plt.savefig('./out_figure.png', dpi=300)
###Plot the figure with V shading
fig, ax = plt.subplots(
1,
1,
constrained_layout=True,
figsize=(10,10),
)
ax.imshow(np.flipud(sst.sst.values), cmap=cm.RdBu_r, vmin=12, vmax=24)
ax.imshow(np.flipud(v.v_surf.values), alpha=0.3, cmap=cm.gray, vmin=-.3, vmax=0.3)
ax.axis('off');
###Rotate "light source" for U by 45 degrees
direct = np.rad2deg(np.arctan2(v.v_surf.values, u.u_surf.values))
speed_rot = np.hypot(u.u_surf.values, v.v_surf.values)
myangle = 45
U = speed_rot * np.cos(np.deg2rad(myangle - direct))
# V = speed_rot * np.sin(np.deg2rad(myangle - direct))
fig, ax = plt.subplots(
1,
1,
constrained_layout=True,
figsize=(10,10),
)
ax.imshow(np.flipud(sst.sst.values), cmap=cm.RdBu_r, vmin=12, vmax=24)
ax.imshow(np.flipud(U), alpha=0.3, cmap=cm.gray, vmin=-.3, vmax=0.3)
ax.axis('off');
测试图:
把高分辨率的图拼起来,帧数至少得30 FPS看起来视频就很丝滑了!
下面这些思路相近,但确实高端大气的一些视频还是少不了商业软件渲染的加持的,甚至是CG技术的应用。
声明:欢迎转载、转发本号原创内容,可留言区留言或者后台联系小编(gavin7675)进行授权。气象学家公众号转载信息旨在传播交流,其内容由作者负责,不代表本号观点。文中部分图片来源于网络,如涉及作品内容、版权和其他问题,请后台联系小编处理。