条形图标注问题:如何去除条形内部的多余数字?
水平条形图内部多余数字的解决方法
问题原因分析
你遇到的条形内部出现大量数字的情况,大概率是x轴的刻度标签被条形覆盖——你的代码只隐藏了x轴的刻度线(ax.xaxis.set_ticks_position('none')),但没有隐藏刻度标签,当条形宽度较大时,这些标签就会出现在条形内部。另外也需要确认分组后的group_df是否每个data1(产品)对应唯一的data2(销售额),避免因重复数据生成重叠条形导致多重标注。
解决方案
1. 隐藏x轴刻度标签
在去掉x轴刻度线的代码后,添加一行代码隐藏x轴的刻度标签:
# 隐藏x轴刻度标签 ax.set_xticklabels([])
如果完全不需要显示x轴的任何元素,也可以直接关闭x轴:
ax.xaxis.set_visible(False)
2. 确保分组数据唯一
确认group_df的分组逻辑正确,比如使用groupby后聚合(如sum()),确保每个产品对应唯一的销售额数值:
# 示例:按data1分组并求和data2 group_df = original_df.groupby('data1')['data2'].sum().reset_index()
修改后的完整代码
name = group_df['data1'] acw = group_df['data2'] # fig size fig, ax = plt.subplots(figsize=(16,9)) # horizontal bar ax.barh(name, acw) # Remove axes splines for s in ['top', 'bottom', 'left', 'right']: ax.spines[s].set_visible(False) # remove x, y ticks ax.xaxis.set_ticks_position('none') ax.yaxis.set_ticks_position('none') # 新增:隐藏x轴刻度标签 ax.set_xticklabels([]) # add padding between axes and labels ax.xaxis.set_tick_params(pad=5) ax.yaxis.set_tick_params(pad=10) # add x, y gridlines # ax.grid(visible = True, color ='black', # linestyle ='-.', linewidth = 0.5, # alpha = 0.2) # show top values ax.invert_yaxis() # add annotation to bars for i in ax.patches: plt.text(i.get_width()+0.2, i.get_y()+0.5, str(round((i.get_width()), 2)), fontsize = 10, fontweight ='bold', color ='blue') # add plot title ax.set_title('Data', loc ='left', ) # show plot plt.show()
内容的提问来源于stack exchange,提问作者Ryan T
相关产品推荐
相关产品推荐

