You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib多子图如何用twinx实现双轴多刻度绘制温雨数据

在Matplotlib多子图中实现每个子图双轴(温度+降雨量)

嘿,这个需求其实很好解决——核心思路就是给每个子图单独调用twinx()创建右侧y轴,然后分别配置两个轴的刻度范围和绘图数据就行。下面我给你详细拆解,再附上可直接运行的代码示例:

关键步骤说明

  1. 创建子图布局:先用plt.subplots()生成你需要的3个子图,得到子图数组axes。
  2. 遍历每个子图:对每个子图对象,调用twinx()创建对应的右侧y轴,这样每个子图都有独立的双轴系统,互不干扰。
  3. 配置轴范围与绘图:
    • 左侧轴绑定温度数据,设置刻度范围[-5, 110];
    • 右侧轴绑定降雨量数据,设置刻度范围[0, 2]——因为这个范围刚好是你要的,所以降雨量的曲线会自动占满子图高度;
  4. 添加标签与图例:为两个轴分别设置标签,避免混淆,图例可以分开添加或者合并显示。

完整代码示例

import matplotlib.pyplot as plt
import numpy as np

# 生成模拟数据:假设3组时间序列数据
time = np.arange(0, 30, 1)
# 3组温度数据(符合[-5,110]范围)
temp_data = [
    np.random.uniform(-5, 110, size=len(time)),
    np.random.uniform(-5, 110, size=len(time)),
    np.random.uniform(-5, 110, size=len(time))
]
# 3组降雨量数据(符合[0,2]范围)
rain_data = [
    np.random.uniform(0, 2, size=len(time)),
    np.random.uniform(0, 2, size=len(time)),
    np.random.uniform(0, 2, size=len(time))
]

# 创建3个子图布局(这里用1行3列,你也可以根据需要调整成其他布局)
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15, 5))

# 遍历每个子图,逐个配置双轴
for idx, ax in enumerate(axes):
    # 绘制温度数据在左侧轴
    line_temp, = ax.plot(time, temp_data[idx], color='tab:red', label='Temperature')
    # 设置左侧轴刻度范围
    ax.set_ylim(-5, 110)
    ax.set_xlabel('Time')
    ax.set_ylabel('Temperature (°C)')
    ax.tick_params(axis='y', labelcolor='tab:red')
    
    # 创建右侧双轴
    ax2 = ax.twinx()
    # 绘制降雨量数据在右侧轴
    line_rain, = ax2.plot(time, rain_data[idx], color='tab:blue', label='Rainfall')
    # 设置右侧轴刻度范围(自动占满子图高度)
    ax2.set_ylim(0, 2)
    ax2.set_ylabel('Rainfall (mm)')
    ax2.tick_params(axis='y', labelcolor='tab:blue')
    
    # 合并两个轴的图例,避免重叠
    ax.legend(handles=[line_temp, line_rain], loc='upper left')

# 调整子图间距,避免标签重叠
fig.tight_layout()
plt.show()

额外说明

  • 如果你的子图布局是多行多列(比如2行2列),只需要把enumerate(axes)改成enumerate(axes.flat)就能遍历所有子图;
  • 要是需要更定制化的样式(比如轴颜色、线条粗细),直接在plot()或者tick_params()里调整参数就行;
  • 确保每个子图的twinx()是独立创建的,这样不会出现多个子图共享同一个右侧轴的问题。

内容的提问来源于stack exchange,提问作者BarbaAlba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:33:40