使用Matplotlib时箱线图与条形图错位问题求助
解决条形图与箱线图X轴对齐的问题
你的问题出在箱线图默认的X轴位置和条形图的X轴位置不匹配,加上双轴设置未同步位置,导致偏移。直接修改两处即可解决:
- 给
boxplot指定positions参数,与条形图的分组X坐标对应 - 避免变量名重复(你代码里
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
相关产品推荐
相关产品推荐

