前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于matplotlib的3维ERA5多层温度分布图

基于matplotlib的3维ERA5多层温度分布图

作者头像
用户11172986
发布2024-06-20 17:03:06
610
发布2024-06-20 17:03:06
举报
文章被收录于专栏:气python风雨气python风雨

基于matplotlib的3维ERA5多层披萨图(温度)

数据:era5 nc格式 核心函数:ax.plot_surface

起步

实际上是上学期听学术报告看到类似的天气形势3D图,搜了挺多教程,效果差强人意吧 希望对你们有微小的帮助

倒车入库(导入必要库)

In [1]:

代码语言:javascript
复制
代码语言:javascript
复制
import xarray as xr
import cmaps
import itertools
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection, PolyCollection
import numpy as np
import cartopy.feature as cf
from cartopy.mpl.patch import geos_to_path
import cartopy.crs as ccrs
from cartopy.io.shapereader import Reader
代码语言:javascript
复制
代码语言:javascript
复制
Warning: ecCodes 2.21.0 or higher is recommended. You are running version 2.14.1

曲线行驶(数据处理)

In [2]:

代码语言:javascript
复制
代码语言:javascript
复制
# 加载ERA5数据集
ds = xr.open_dataset('/home/mw/input/ERA5_Lekima4742/ERA5_Lekima.nc')
time = ds.time
# 选择温度数据
temp = ds.t.sel(time=time[0], method='nearest')
levels = [500, 600, 700, 850, 1000]
data = temp.sel(level=levels)-273.15
lon = np.array(temp.longitude)
lat = np.array(temp.latitude)
代码语言:javascript
复制

坡道定点停车与起步(核心代码)

In [29]:

代码语言:javascript
复制
代码语言:javascript
复制
# 绘制3D图像
#fig = plt.figure()
#ax = fig.add_subplot(111, projection='3d')
proj= ccrs.PlateCarree()
fig = plt.figure(figsize=(8,5),dpi=200)
ax = Axes3D(fig)

target_projection = ccrs.PlateCarree()

for i, level in enumerate(levels):
    x, y = np.meshgrid(lon, lat)
    z = np.full((x.shape[0], y.shape[1]), level)
    t = data[i,:, :]  
    ax.plot_surface(x, y, z, rstride=1, cstride=1, alpha=0.5, cmap='coolwarm', linewidth=0.5)
    cset = ax.contourf(x, y, t, levels=np.arange(-30, 30, 3), cmap=cmaps.ncl_default, offset=level, linewidth=2)
    ax.clabel(cset, inline=1, fontsize=10, fmt='%1.0f')
代码语言:javascript
复制
代码语言:javascript
复制
/opt/conda/lib/python3.7/site-packages/ipykernel_launcher.py:6: MatplotlibDeprecationWarning: Axes3D(fig) adding itself to the figure is deprecated since 3.4. Pass the keyword argument auto_add_to_figure=False and use fig.add_axes(ax) to suppress this warning. The default value of auto_add_to_figure will change to False in mpl3.5 and True values will no longer work in 3.6.  This is consistent with other Axes classes.
  
/opt/conda/lib/python3.7/site-packages/cmaps/cmaps.py:3181: UserWarning: Trying to register the cmap 'ncl_default' which already exists.
  matplotlib.cm.register_cmap(name=cname, cmap=cmap)
/opt/conda/lib/python3.7/site-packages/ipykernel_launcher.py:15: UserWarning: The following kwargs were not used by contour: 'linewidth'
  from ipykernel import kernelapp as app

直角转弯与侧方位停车(图像相关设置)

代码语言:javascript
复制

小结

  1. 显示效果不佳就改改ax.view_init的参数
  2. 绘图速度较慢,可尝试减小绘图范围
  3. 目前还没解决地图显示不够美观的问题,标签什么自行美化吧
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-12-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 气python风雨 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基于matplotlib的3维ERA5多层披萨图(温度)
  • 起步
  • 倒车入库(导入必要库)
  • 曲线行驶(数据处理)
  • 坡道定点停车与起步(核心代码)
  • 直角转弯与侧方位停车(图像相关设置)
  • 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档