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

如何用ggplot2叠加两个不同颜色的二元高斯分布等高线?

叠加两条二元高斯分布等高线的解决方案

没问题!我来帮你调整代码,实现两条二元高斯分布等高线的叠加,还能给每条等高线设置专属颜色。你之前尝试stat_density2d没成功,是因为这个函数是基于样本数据计算密度,而我们这里是直接生成理论二元高斯密度值,所以直接用geom_contour配合预先计算好的概率值就可以,核心是让ggplot能区分两个分布的数据。

修改后的可复现代码

# 加载依赖包
library(ggplot2)
library(mvtnorm)

set.seed(13)
# 定义第一个二元高斯分布参数
m1 <- c(.5, -.5)
sigma1 <- matrix(c(1,.5,.5,1), nrow=2)
# 定义第二个二元高斯分布参数
m2 <- c(0, 0)
sigma2 <- matrix(c(140,67,67,42), nrow=2)

# 生成网格数据
data.grid <- expand.grid(s.1 = seq(-25, 25, length.out=200), 
                         s.2 = seq(-25, 25, length.out=200))

# 计算两个分布的概率值,同时添加分组标识
q.samp1 <- cbind(data.grid, 
                 prob = mvtnorm::dmvnorm(data.grid, mean = m1, sigma = sigma1),
                 group = "分布1")
q.samp2 <- cbind(data.grid, 
                 prob = mvtnorm::dmvnorm(data.grid, mean = m2, sigma = sigma2),
                 group = "分布2")

# 合并成长格式数据框,方便ggplot分组绘制
q.samp_combined <- rbind(q.samp1, q.samp2)

# 绘制叠加等高线
ggplot(q.samp_combined, aes(x = s.1, y = s.2, z = prob, color = group)) +
  geom_contour() +
  # 自定义颜色(可选,你可以换成自己喜欢的颜色)
  scale_color_manual(values = c("分布1" = "#2ca02c", "分布2" = "#d62728")) +
  coord_fixed(xlim = c(-25, 25), ylim = c(-25, 25), ratio = 1) +
  labs(title = "两条二元高斯分布等高线叠加", x = "s.1", y = "s.2", color = "分布类型")

更简洁的图层叠加方式

如果你不想合并数据框,也可以直接添加两个geom_contour图层,每个图层指定独立的数据源和颜色:

ggplot() +
  # 第一条等高线
  geom_contour(data = q.samp1, aes(x = s.1, y = s.2, z = prob), 
               color = "#2ca02c", size = 0.8) +
  # 第二条等高线
  geom_contour(data = q.samp2, aes(x = s.1, y = s.2, z = prob), 
               color = "#d62728", size = 0.8) +
  coord_fixed(xlim = c(-25, 25), ylim = c(-25, 25), ratio = 1) +
  labs(title = "两条二元高斯分布等高线叠加", x = "s.1", y = "s.2")

小提示

你定义的第二个分布协方差矩阵sigma2数值很大,导致它的分布极其分散,在-25到25的坐标范围内可能只能看到最外围的1-2条等高线。如果想看到更多细节,可以适当缩小x/y轴范围,或者调整协方差矩阵的数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:30:53