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
相关产品推荐
相关产品推荐

