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

多组数据的直方图与密度图绘制请求(基于R语言)

R语言绘制多变量直方图(含密度曲线与正态曲线)

1. 数据整理

首先将你的数据转换为适合ggplot2绘图的长格式(tidy data):

# 加载所需包
library(ggplot2)
library(dplyr)
library(tidyr)

# 创建原始数据框
data <- data.frame(
  CR = c(2, 9, 10, 14, 24, 27, 29, 30, 34, 43, 50, 74, 86, 105, 140, 155, 200),
  EN = c(24, 52, 86, 110, 144, 154, 206, 242, 300, 302, 366, 403, 422, 427, 427, 434, 448),
  LC = c(447, 476, 543, 580, 647, 685, 745, 763, 819, 821, 863, 904, 908, 926, 934, 951, 968),
  VU = c(75, 96, 97, 217, 297, 498, 511, 551, 560, 564, 570, 575, 609, 673, 681, 700, 755)
)

# 转换为长格式
tidy_data <- data %>% 
  pivot_longer(cols = everything(), names_to = "Variable", values_to = "Value")

2. 绘制目标图形

使用ggplot2绘制分面直方图,同时叠加密度曲线和正态分布曲线:

ggplot(tidy_data, aes(x = Value)) +
  # 绘制直方图,y轴用密度匹配曲线
  geom_histogram(aes(y = ..density..), bins = 10, fill = "lightblue", color = "black", alpha = 0.7) +
  # 叠加核密度曲线
  geom_density(color = "red", size = 1) +
  # 叠加分组正态分布曲线(基于每个变量的均值和标准差)
  stat_function(
    fun = dnorm,
    args = list(mean = mean(.$Value), sd = sd(.$Value)),
    color = "darkgreen",
    size = 1,
    linetype = "dashed"
  ) +
  # 按变量分面,每行2个图(可按需调整列数)
  facet_wrap(~Variable, ncol = 2) +
  # 添加标题和坐标轴标签
  labs(
    title = "Histogram with Density and Normal Curve",
    x = "Value",
    y = "Density"
  ) +
  # 使用简洁主题
  theme_minimal()

关键说明

  • geom_histogram中y = ..density..是为了让直方图高度与密度曲线纵坐标匹配,确保两者可在同一坐标系展示。
  • stat_function里的args会自动按每个分面子组计算均值和标准差,生成对应变量的正态拟合曲线。
  • 可通过调整bins参数修改直方图的组数,ncol参数调整分面的列数,适配你的展示需求。

内容的提问来源于stack exchange,提问作者Sina Kh.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:41:11