如何在箱线图与柱状图的叠加图中设置柱状图标签?
箱线图叠加柱状图:添加自定义x轴标签的解决方法
问题说明
已实现箱线图与柱状图的叠加,但无法为柱状图对应的位置添加自定义标签(如'Col0'),尝试set_label()、bar_label()、set_xticklabels()均未解决问题,示例代码如下:
import pandas as pd import numpy as np import matplotlib.pyplot as plt np.random.seed(1234) df = pd.DataFrame(np.random.randn(10, 4)+3, columns=['Col1', 'Col2', 'Col3', 'Col4']) boxplot = df.boxplot(column=['Col1', 'Col2', 'Col3']) ax = plt.gca() b = ax.bar(0,5)
解决思路与代码
问题核心是原箱线图的x轴刻度位置和标签数量与新增柱状图的位置不匹配,需先调整x轴刻度列表,再添加对应标签:
import pandas as pd import numpy as np import matplotlib.pyplot as plt np.random.seed(1234) df = pd.DataFrame(np.random.randn(10, 4)+3, columns=['Col1', 'Col2', 'Col3', 'Col4']) boxplot = df.boxplot(column=['Col1', 'Col2', 'Col3']) ax = plt.gca() # 绘制柱状图,指定x位置为0 b = ax.bar(0, 5) # 获取原x轴的刻度位置和标签文本 original_ticks = ax.get_xticks() original_labels = [label.get_text() for label in ax.get_xticklabels()] # 插入新的刻度位置(0)和对应标签(Col0)到列表头部 new_ticks = np.insert(original_ticks, 0, 0) new_labels = ['Col0'] + original_labels # 更新x轴的刻度和标签 ax.set_xticks(new_ticks) ax.set_xticklabels(new_labels) plt.show()
关键说明
set_label():仅用于设置图例标签,需配合plt.legend()使用,与x轴标签无关bar_label():用于给柱子添加数值标注(如显示柱子高度),不是x轴标签- 直接使用
set_xticklabels()会失败,因为原x轴刻度数量与新标签数量不匹配,必须先通过set_xticks()调整刻度位置数量,再同步更新标签
若想将柱状图放在箱线图末尾,只需修改刻度插入逻辑:
# 插入到刻度列表末尾 new_ticks = np.append(original_ticks, 4) new_labels = original_labels + ['Col0'] ax.set_xticks(new_ticks) ax.set_xticklabels(new_labels) # 柱状图x位置设为4 b = ax.bar(4, 5)
内容的提问来源于stack exchange,提问作者Lucyanno Frota
相关产品推荐
相关产品推荐

