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

使用Matplotlib时箱线图与条形图错位问题求助

解决条形图与箱线图X轴对齐的问题

你的问题出在箱线图默认的X轴位置和条形图的X轴位置不匹配,加上双轴设置未同步位置,导致偏移。直接修改两处即可解决:

  1. 给boxplot指定positions参数,与条形图的分组X坐标对应
  2. 避免变量名重复(你代码里x被重复赋值,容易引发逻辑混乱)

修改后的完整代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

d = {"1":[140,118], "2":[133,111], "3":[111, 86]}
df = pd.DataFrame(data=d)
x_col = df["1"]
y_col = df["2"]
z_col = df["3"]
columns = [x_col, y_col, z_col]
l = ["top", "middle", "bottom"]
ice_val = [140, 133, 111]
withoutice_val = [118, 111, 86]

# 重命名变量避免冲突
x_pos = np.arange(len(l))
width = 0.35

fig, ax = plt.subplots()
r1 = ax.bar(x_pos - width/2, ice_val, width, label="with ice-activity")
r2 = ax.bar(x_pos + width/2, withoutice_val, width, label="without ice-activity")

ax1 = ax.twinx()
# 关键:指定箱线图的X轴位置与条形图分组对齐
ax1.boxplot(columns, positions=x_pos)
ax1.set_ylim(ax.get_ylim())
ax.set_xticks(x_pos)
ax.set_xticklabels(l)  # 显示自定义X轴标签

plt.legend()
plt.show()

关键改动说明:

  • 将重复的x变量改为x_pos,避免变量名冲突导致的逻辑混乱
  • 调用ax1.boxplot()时添加positions=x_pos,强制箱线图的X轴位置与条形图的分组坐标(0,1,2)完全匹配
  • 新增ax.set_xticklabels(l),让X轴显示你定义的"top/middle/bottom"标签,图表更直观

修改后,条形图的每组会和对应的箱线图完全对齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 04:39:20