如何在Matplotlib中让差异微小的柱状图更清晰可辨?
如何用Matplotlib清晰展示数值差异极小的柱状图
我在Jupyter Notebook中使用Matplotlib绘制了一幅柱状图,图中3个柱子的数值差异极小,无法准确清晰地展示出差异。想要调整成能突出数值差异的样式,当前图与目标图对比如下:
当前图

目标图

当前使用的代码:
pt.bar(['Treated' , 'Untreated' , 'Control'] , [treated_dataset['Pos 1'].mean() , untreated_dataset['Pos 2'].mean() , control_dataset['Pos 3'].mean()] , color = 'blue')
解决方案
核心思路是调整y轴的显示范围,避免从0开始绘制,从而放大柱子间的高度差异,同时可以添加数值标签进一步增强可读性。
1. 自定义y轴范围
先计算三个均值的取值区间,再设置y轴的上下限,让柱子的高度差异更直观:
# 提取三个分组的均值 means = [ treated_dataset['Pos 1'].mean(), untreated_dataset['Pos 2'].mean(), control_dataset['Pos 3'].mean() ] # 设置y轴范围,给最小值和最大值留出少量余量 y_lower = min(means) * 0.99 y_upper = max(means) * 1.01 # 绘制柱状图并设置y轴范围 pt.bar(['Treated', 'Untreated', 'Control'], means, color='blue') pt.ylim(y_lower, y_upper) # 补充图表标签(可选,提升可读性) pt.xlabel('分组') pt.ylabel('均值') pt.title('各组均值对比') pt.show()
2. 添加柱子顶部数值标签
在柱子上方标注具体数值,让差异一目了然:
means = [ treated_dataset['Pos 1'].mean(), untreated_dataset['Pos 2'].mean(), control_dataset['Pos 3'].mean() ] y_lower = min(means) * 0.99 y_upper = max(means) * 1.01 # 绘制柱状图并获取柱子对象 bars = pt.bar(['Treated', 'Untreated', 'Control'], means, color='blue') pt.ylim(y_lower, y_upper) # 给每个柱子添加数值标签 for bar in bars: height = bar.get_height() # 标签居中显示在柱子顶部,保留4位小数 pt.text( bar.get_x() + bar.get_width()/2., height, f'{height:.4f}', ha='center', va='bottom' ) pt.xlabel('分组') pt.ylabel('均值') pt.title('各组均值对比') pt.show()
内容的提问来源于stack exchange,提问作者Adam Saleem
相关产品推荐
相关产品推荐

