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

Python matplotlib绘制子图时如何反转所有子图的Y轴

问题原因

plt.gca() 会返回当前处于激活状态的坐标轴对象,按顺序绘制3个子图时,只有最后绘制完成的p3会成为最终激活的坐标轴,因此调用plt.gca().invert_yaxis()时,操作的始终是最后一个子图,前两个子图不会被影响。

解决方案

不要通过全局的gca()方法获取坐标轴,直接操作每个子图对应的轴对象调用反转方法即可。

方法1:逐个对子图调用反转方法

直接在每个子图绘制完成后,调用该子图对象的invert_yaxis(),修正后可运行的代码如下:

import matplotlib.pyplot as plt
import pandas
import numpy as np

# 创建1行3列的子图布局
fig, (p1, p2, p3) = plt.subplots(1, 3)

# 第一个子图:陆源碎屑输入指标
p1.plot(Ti/Mg, xrf_depth) 
p1.set_title("Clastic influx (Ti/Mg) and Ti (ppm)")
p1.invert_yaxis()

# 第二个子图:Ti元素含量
p2.plot(Ti/1000, xrf_depth)
p2.invert_yaxis()

# 第三个子图:初级生产力指标
p3.plot(Ca/Si, xrf_depth, '-g')
p3.set_title("Primary production (Ca/Si)")
p3.invert_yaxis()

plt.show()

注:原代码中p3的标题字符串缺少右闭合括号,上述代码已同步修正。

方法2:批量遍历轴对象统一反转

如果子图数量较多,逐个子图写反转逻辑比较繁琐,可以在创建子图后遍历所有轴对象,统一执行Y轴反转:

import matplotlib.pyplot as plt
import pandas
import numpy as np

# 创建子图时用axes接收所有轴对象的数组
fig, axes = plt.subplots(1, 3)

# 批量反转所有子图Y轴
for ax in axes:
    ax.invert_yaxis()

p1, p2, p3 = axes
# 后续正常绘制每个子图的内容即可
p1.plot(Ti/Mg, xrf_depth) 
p1.set_title("Clastic influx (Ti/Mg) and Ti (ppm)")

p2.plot(Ti/1000, xrf_depth)

p3.plot(Ca/Si, xrf_depth, '-g')
p3.set_title("Primary production (Ca/Si)")

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:03:33