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

Matplotlib:如何在多子图中绘制axvlines?当前仅底部子图显示线条

解决Matplotlib多子图中垂直线仅显示在底部子图的问题

你遇到的这个问题很常见——plt.axvline()默认会把垂直线画在当前活跃的Axes对象上,而每次调用plot()之后,最后创建的那个子图会自动成为当前活跃对象,所以你所有的垂直线都跑到最后一个子图里去了。

要解决这个问题,核心就是明确指定要画垂直线的目标子图对象,也就是你创建的zx数组里的对应元素。下面是修改后的可运行代码:

import pandas as pd
import matplotlib.pyplot as plt

fig, zx = plt.subplots(5,1, gridspec_kw={'height_ratios':[1,1,1,1,1]})
fig.subplots_adjust(hspace=0.01)

# 给第三个子图(索引为2)绘制数据和绿色垂直线
df_a = pd.DataFrame({'A':[1,2,3,4,5]})
df_a.plot(grid=True, ax=zx[2])
for x_val in [2.25,3.25,4.25]:
    zx[2].axvline(x_val, color='green')  # 明确指定子图zx[2]

# 给第四个子图(索引为3)绘制数据和红色垂直线
df_b = pd.DataFrame({'B':[6,5,4,3,2]})
df_b.plot(grid=True, ax=zx[3])
for x_val in [2.25,3.25,4.25]:
    zx[3].axvline(x_val, color='red')  # 明确指定子图zx[3]

plt.show()

额外实用小技巧

如果需要给所有子图都添加相同的垂直线,可以直接遍历所有子图对象批量操作:

for ax in zx:
    for x_val in [2.25,3.25,4.25]:
        ax.axvline(x_val, color='gray', linestyle='--')

这样就能精准控制垂直线出现在你想要的任何子图里啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:25:06