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

如何在Matplotlib子图上方拓展可绘图空间以显示元素?

解决方案

有两种实用方法可以拓展子图上方的可绘图空间,让你那些超出轴范围的元素完整显示:

方法一:调整子图布局的顶部留白

取消注释你代码里的plt.subplots_adjust(top=1.4),这个参数控制子图区域顶部到画布顶部的比例(默认是0.9),设为大于1的值就能在子图上方留出额外空间。你可以根据元素的实际高度微调这个数值,比如如果1.4不够就改成1.5。

修改后的代码片段:

fig, ax1 = plt.subplots(figsize=(20,5))
ax2 = ax1.twinx()

# 打开顶部留白调整,给上方元素腾出空间
plt.subplots_adjust(top=1.4)

ax2.fill_between(dryhydro_df['Time'],dryhydro_df['Flow [m³/s]'],0,facecolor='lightgrey')
ax2.set_ylim([0,10])

AB = ax2.fill_between(dryhydro_df['Time'],[12]*len(dryhydro_df['Time']),9.25,facecolor=colors[0],alpha=0.5,clip_on=False)
ab = ax2.scatter(presence_df['Datetime'][presence_df['AB']==True],[9.5]*sum(presence_df['AB']==True),marker='X',color='black') 

ax1.plot(tide_df['Time'],tide_df['Tide'],color='dimgrey')

方法二:手动调整轴的位置

如果不想改变整体布局比例,可以直接修改轴的位置,把轴的顶部往下挪,留出上方空间。注意要同步调整双轴的位置,避免错位:

fig, ax1 = plt.subplots(figsize=(20,5))
ax2 = ax1.twinx()

# 获取当前轴的位置参数(格式为[left, bottom, width, height])
box = ax1.get_position()
# 缩小轴的高度,比如设为0.7,顶部会下移,上方自然留出空间
ax1.set_position([box.x0, box.y0, box.width, 0.7])
# 同步调整ax2的位置,保证双轴对齐
ax2.set_position([box.x0, box.y0, box.width, 0.7])

ax2.fill_between(dryhydro_df['Time'],dryhydro_df['Flow [m³/s]'],0,facecolor='lightgrey')
ax2.set_ylim([0,10])

AB = ax2.fill_between(dryhydro_df['Time'],[12]*len(dryhydro_df['Time']),9.25,facecolor=colors[0],alpha=0.5,clip_on=False)
ab = ax2.scatter(presence_df['Datetime'][presence_df['AB']==True],[9.5]*sum(presence_df['AB']==True),marker='X',color='black') 

ax1.plot(tide_df['Time'],tide_df['Tide'],color='dimgrey')

注意事项

  • 两种方法都要配合你已经设置的clip_on=False,确保元素不会被轴的边界裁剪。
  • 可以根据蓝色阴影和散点的实际高度,灵活调整top值或者轴的高度比例,直到元素完整显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 16:15:44