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

如何设置直方图X轴范围包含0值并绘制含高亮0值的直方图与正态分布

解决方案:带高亮0值和正态曲线的直方图

我经常用ggplot2处理这类可视化需求,它的灵活性刚好能满足你高亮特定值、添加分布曲线的要求。下面是完整的实现步骤和代码:

步骤1:准备数据与加载依赖包

首先把你的数据整理成数据框,同时新增一个分组列来标记0值和非0值,方便后续高亮区分:

# 加载ggplot2包
library(ggplot2)

# 你的原始数据(补全了末尾省略的部分值,不影响逻辑)
values <- c(25.222222, 6.000000, 2.057143, 0.000000, 2.142857, 0.000000, 73.666667, 4.081081, 43.133333, 18.937500, 60.822222, 23.379310, 54.954412, 8.492308, 67.646250, 15.885000, 38.585859, 46.810606, 31.565152, 39.813889, 40.620000, 25.958000, 54.821429, 9.000000, 33.040476, 50.329670, 43.525641, 33.508696, 34.265385, 57.003544, 36.690434, 48.074074, 70.372222, 77.602564, 29.997)

# 转换为数据框并添加分组标记
df <- data.frame(value = values)
df$group <- ifelse(df$value == 0, "Zero Value", "Non-Zero")

步骤2:绘制直方图与正态曲线

接下来绘制直方图,高亮0值,同时添加拟合的正态分布曲线,并确保X轴范围包含0:

ggplot(df, aes(x = value, fill = group)) +
  # 绘制直方图,设置透明度避免重叠,binwidth可根据数据调整
  geom_histogram(aes(y = ..density..), binwidth = 5, alpha = 0.7, color = "black") +
  # 添加拟合数据分布的正态曲线(用数据自身的均值和标准差)
  stat_function(fun = dnorm, args = list(mean = mean(df$value), sd = sd(df$value)), color = "red", size = 1) +
  # 强制X轴从0开始,上限设为数据最大值+5,保证0值完全显示
  scale_x_continuous(limits = c(0, max(df$value) + 5)) +
  # 自定义填充色,让0值更醒目
  scale_fill_manual(values = c("Zero Value" = "#ff6b6b", "Non-Zero" = "#4ecdc4")) +
  # 添加标题与标签
  labs(title = "Histogram with Highlighted Zero Values and Normal Curve",
       x = "Value",
       y = "Density",
       fill = "Group") +
  # 使用简洁的主题
  theme_minimal()

优化:突出少量的0值

如果你的数据中0值数量极少(比如只有2个),直方图的0值柱子可能会很窄,这时候可以额外添加一条垂直虚线来强化标记:

ggplot(df, aes(x = value, fill = group)) +
  geom_histogram(aes(y = ..density..), binwidth = 5, alpha = 0.7, color = "black") +
  stat_function(fun = dnorm, args = list(mean = mean(df$value), sd = sd(df$value)), color = "red", size = 1) +
  # 添加0值位置的垂直虚线
  geom_vline(xintercept = 0, color = "darkred", linetype = "dashed", size = 1.2) +
  scale_x_continuous(limits = c(0, max(df$value) + 5)) +
  scale_fill_manual(values = c("Zero Value" = "#ff6b6b", "Non-Zero" = "#4ecdc4")) +
  labs(title = "Histogram with Highlighted Zero Values and Normal Curve",
       x = "Value",
       y = "Density",
       fill = "Group") +
  theme_minimal()

内容的提问来源于stack exchange,提问作者karla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:22:09