You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在R语言中为散点图添加正态边缘分布?

在R语言中为ggplot图表添加正态边缘分布

如果想要给你的双变量ggplot图表(比如散点图)在顶部和右侧添加边缘分布(包括正态拟合的密度曲线),ggExtra包中的ggMarginal()函数是非常便捷的工具。下面是完整的实现示例和细节说明:

步骤1:安装并加载所需包

首先确保你已经安装了ggplot2ggExtra包,要是还没装的话先执行安装命令:

install.packages(c("ggplot2", "ggExtra"))
library(ggplot2)
library(ggExtra)

注:原示例中的border()函数来自ggpubr包,如果需要保留这个功能,得额外安装并加载ggpubr

步骤2:准备模拟数据

我们用威布尔分布生成两组模拟数据,并整理成ggplot友好的数据框格式:

# 生成威布尔分布的模拟数据
x <- rweibull(100, 2.6, 3)
y <- rweibull(100, 1.8, 3)
# 转换为数据框
xy.df <- data.frame(x, y)

步骤3:创建基础ggplot图表

先绘制包含散点和2D密度线的基础图表,搭配简洁的经典主题:

p1 <- ggplot(xy.df, aes(x, y)) +
  geom_point(colour = "blue", size = 0.25) +  # 添加蓝色小散点
  geom_density2d() +  # 叠加2D密度轮廓线
  theme_classic()  # 使用无背景的经典主题

步骤4:添加正态边缘分布

根据需求,我们可以选择两种常见的边缘分布展示方式:

方式1:添加核密度边缘(近似正态形态)

直接用ggMarginal()添加顶部和右侧的核密度图,能直观呈现变量的分布趋势:

ggMarginal(p1, type = "density", fill = "lightblue", colour = "black")
  • type="density":指定边缘图为核密度类型,形态接近正态分布
  • fillcolour:自定义密度图的填充色与边框色

方式2:添加带正态拟合曲线的边缘分布

如果你想要明确展示拟合的正态分布曲线,可以通过参数自定义边缘图层,叠加正态曲线:

ggMarginal(p1, 
           type = "density",
           marginal.params = list(
             geom = "density",
             fill = "lightblue",
             colour = "black"
           ),
           # 在边缘图上叠加红色正态拟合曲线
           panel.params = list(
             geom = "line",
             stat = "function",
             fun = dnorm,
             args = list(mean = mean(xy.df$x), sd = sd(xy.df$x)),
             colour = "red",
             size = 1
           )
)

这里通过stat="function"调用dnorm函数,基于数据的均值和标准差拟合正态曲线,用红色线条突出显示。

额外小贴士

  • 可以通过margins参数指定只添加某一侧的边缘图,比如margins = "x"只在顶部添加x变量的边缘分布
  • 除了density类型,还能选择histogram(直方图)、boxplot(箱线图)等其他边缘图类型

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

火山引擎 最新活动