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

