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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:27:25