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

Python实现boxplot箱线图的箱体在x轴指定距离位置的绘制

修改要点

  • 删除重复的箱线图绘制逻辑,仅保留一次绘制并传入位置参数
  • 修正x轴范围,匹配距离数值的实际区间
  • 确保距离列表和采集器列的顺序一一对应,不随意排序距离列表避免数据与位置错位
  • 可自定义箱体宽度,避免距离较近的位置出现箱体重叠

修改后代码

sp_boxplot = 20
# 注意:dist列表顺序需和下方采集器列顺序一一对应,不要随意排序
dist =  [139, 101, 52.5, 210, 91, 45.5]
logger_cols = ['Logger 7', 'Logger 4', 'Logger 6', 'Logger 3', 'Logger 2', 'Logger 5']

fig1, ax1 = plt.subplots(figsize = (12,10))   

# 直接在boxplot中传入positions参数指定每个箱体的对应位置
boxplt = df_lags_from_stormevents.boxplot(
    column = logger_cols, 
    showfliers=False,
    grid = False,
    positions = dist,
    notch=True,
    widths=sp_boxplot, # 可调整数值修改箱体宽度,避免重叠
    ax=ax1
)   

boxplt.set_xlabel('Distance from coast', fontweight = 'bold', fontsize = 10)
boxplt.set_ylabel('Delay at best correlation [hours]', fontweight = 'bold', fontsize = 10)
# 修改x轴范围匹配实际距离区间,可根据显示效果调整边距
boxplt.set_xlim([min(dist)-20, max(dist)+20])
boxplt.set_ylim([0,50])
# 若需要x轴刻度显示采集器名称可保留下行,不需要则删除,会直接显示距离数值
plt.xticks(dist, logger_cols, rotation=45)
boxplt.legend(loc = 'lower right', fontsize = 12)
boxplt.text(0.05, 0.75, lin_func_b_median +  '\n' + r'( r$^{2}$ = ' + (str(round(r2_lin_b,3))) + ')', 
             transform = boxplt.transAxes,  fontsize = 12, bbox=dict(facecolor='w', edgecolor = 'k'))
plt.show()

关键修改说明

  1. 原代码同时调用了pandas的boxplot和matplotlib的ax1.boxplot,相当于重复绘制两次,pandas默认将箱体放在1、2、3...的整数位置,搭配原xlim([0,7])设置刚好能显示默认位置的箱体,但完全匹配不了实际距离数值
  2. positions直接使用原始dist列表即可,不要用sorted()打乱顺序,避免采集器数据和对应距离错位
  3. 可根据最终显示效果调整widths参数,控制箱体宽度避免重叠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:45:03