matplotlib 均值_Matplotlib绘制双坐标轴

本文以绘制垂直廓线图为例说明在 Matplotlib 中如何在左右坐标轴上绘制不同的坐标。

准备

载入需要的库

import matplotlib.pyplot as plt
import numpy as np

from nwpc_data.grib.eccodes import load_field_from_file
from nwpc_data.data_finder import find_local_file

数据

本文绘制 GRAPES GFS 模式 2020 年 10 月 18 日 00 时次 105 时效北纬 40 度的平均垂直廓线图。

查找数据文件路径

file_path = find_local_file(
"grapes_gfs_gmf/grib2/orig",
start_time="2020101800",
forecast_time="105h",
)

载入所有等压面层的温度场

short_name = "t"
level_type = "pl"
field = load_field_from_file(
file_path=file_path,
parameter=short_name,
level_type=level_type,
)
field
6fbe5c91aecc537cf78e79cd719ca7fd.png

提取北纬 40 度从 1000 hPa 到 20 hPa 的数据

data = field.sel(
pl=slice(1000, 20)
).sel(
latitude=40,
method="nearest",
)
data
38d4f89d6844d8acda4c46c5ac862c08.png

计算均值

mean_data = data.mean(dim="longitude")
mean_data
bd2746f9c3879435966c006ad8d550ad.png

绘制第一个坐标

构造层次列表

level_nos = np.arange(1, len(mean_data.pl) + 1)
level_nos
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29])

绘制廓线图,在左坐标轴上绘制气压值作为 Y 轴坐标

fig, ax = plt.subplots(figsize=(5, 8))
ax.plot(mean_data.values, level_nos)

ax.invert_yaxis()
ax.set_ylim(level_nos[0], level_nos[-1])
ax.set_yticks(level_nos)
ax.set_yticklabels(mean_data.pl.values)
ax.set_ylabel("pl", fontsize=12)

ax.set_xlabel("temperature", fontsize=12)

plt.show()
c5d728b247fa2e412eccafbe5f7199fc.png

绘制第二个坐标

将层次列表绘制在右坐标轴上

使用 ax2 = ax.twinx() 创建与上图共享 X 轴的新图形,只绘制 Y 坐标。

fig, ax = plt.subplots(figsize=(5, 8))

ax.invert_yaxis()
ax.plot(mean_data.values, level_nos)
ax.set_ylim(level_nos[0], level_nos[-1])
ax.set_yticks(level_nos)
ax.set_yticklabels(mean_data.pl.values)
ax.set_ylabel("pl", fontsize=12)

ax.set_xlabel("temperature", fontsize=12)

ax2 = ax.twinx()ax2.set_yticks(level_nos)ax2.set_ylim(level_nos[0], level_nos[-1])ax2.set_yticklabels(level_nos)ax2.set_ylabel("level", fontsize=12)
plt.show()
c756bf094f05f5629dca2b5275dd9d38.png

本文没有使用对数坐标轴,后续有待改进。

参考

https://stackoverflow.com/questions/14762181/adding-a-y-axis-label-to-secondary-y-axis-in-matplotlib

《GRIB笔记:使用cfgrib加载垂直剖面图数据》

《GRIB笔记:使用eccodes-python加载垂直剖面图数据》


06139f95dd03b44f7e0cd36bffce6030.png

题图由 congerdesign 上传到 Pixabay。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值