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

如何修改R代码生成目标样式的等高线图?

修改R代码生成目标样式等高线图

我当前用以下R代码生成了线条式等高线图,希望调整代码生成填充式的目标等高线图:

library(MASS)
library(ggplot2)
# first contour
m <- c(0,0)
n<-c(2*sqrt(2),2*sqrt(2))
sigma <- matrix(c(2,0,.0,2), nrow=2)
data.grid <- expand.grid(s.1 = seq(-6, 10, length.out=100), s.2 = seq(-6, 10, length.out=100))
q.samp <- cbind(data.grid, prob = mvtnorm::dmvnorm(data.grid, mean = m, sigma = sigma))
ggplot(q.samp, aes(x = s.1, y = s.2, z = prob)) +
  stat_contour(color = 'red') + 
  stat_contour(data = q.samp, aes(x = s.1, y = s.2, z = prob), color = 'green')

#sigma1 <- matrix(c(1,-.5,-.5,1), nrow=2)
set.seed(10)
data.grid1 <- expand.grid(s.1 = seq(-6, 40, length.out=200), s.2 = seq(-6, 40, length.out=200))
q.samp1 <- cbind(data.grid1, prob = mvtnorm::dmvnorm(data.grid1, mean = n, sigma = matrix(c(2, 1.2, 1.2, 2), nrow = 2)))
ggplot(q.samp1, aes(x = s.1, y = s.2, z = prob)) +
  stat_contour(color = 'red',bins = 12 ) + 
  stat_contour(data = q.samp, aes(x = s.1, y = s.2, z = prob), color = 'green',bins = 12)+geom_point(aes(x = 0, y =0))+
  geom_point(aes(x=2*sqrt(2),y=2*sqrt(2)))+xlab("Random slop")+ylab("Random intercept")

修改后的代码(匹配目标样式)

library(ggplot2)
library(mvtnorm)

# 定义两个二维正态分布参数
mean1 <- c(0, 0)
sigma1 <- matrix(c(2, 0, 0, 2), nrow = 2)
mean2 <- c(2*sqrt(2), 2*sqrt(2))
sigma2 <- matrix(c(2, 1.2, 1.2, 2), nrow = 2)

# 生成统一网格,确保两个分布都在可视范围内
data.grid <- expand.grid(s.1 = seq(-6, 10, length.out = 200), 
                         s.2 = seq(-6, 10, length.out = 200))

# 计算两个分布的概率密度
q_samp1 <- cbind(data.grid, prob = mvtnorm::dmvnorm(data.grid, mean = mean1, sigma = sigma1))
q_samp2 <- cbind(data.grid, prob = mvtnorm::dmvnorm(data.grid, mean = mean2, sigma = sigma2))

# 绘制填充式等高线图
ggplot() +
  # 第一个分布的填充等高线(带透明度)
  stat_contour_filled(data = q_samp1, aes(x = s.1, y = s.2, z = prob), alpha = 0.6, bins = 12) +
  # 第二个分布的填充等高线(带透明度)
  stat_contour_filled(data = q_samp2, aes(x = s.1, y = s.2, z = prob), alpha = 0.6, bins = 12) +
  # 添加均值点(放大尺寸)
  geom_point(aes(x = mean1[1], y = mean1[2]), size = 3, color = "black") +
  geom_point(aes(x = mean2[1], y = mean2[2]), size = 3, color = "black") +
  # 添加点标签
  geom_text(aes(x = mean1[1], y = mean1[2], label = "(0, 0)"), vjust = -1) +
  geom_text(aes(x = mean2[1], y = mean2[2], label = "(2.83, 2.83)"), vjust = -1) +
  # 坐标轴标签修正(原代码slop拼写错误)
  xlab("Random slope") +
  ylab("Random intercept") +
  # 简洁主题
  theme_minimal() +
  # 区分度高的填充颜色
  scale_fill_viridis_d(option = "plasma", guide = "none") +
  # 固定坐标轴范围
  coord_cartesian(xlim = c(-6, 10), ylim = c(-6, 10))

关键修改说明

  • 替换线条等高线为填充式等高线:用stat_contour_filled替代stat_contour,生成目标图的填充色块样式
  • 统一坐标轴范围:修正原代码中第二个图过大的坐标轴,确保两个分布都清晰展示
  • 添加透明度:通过alpha=0.6让两个分布的填充区域重叠时互不遮挡
  • 优化均值点:放大点尺寸并添加标签,明确标注分布中心
  • 修正拼写错误:将原代码的Random slop改为Random slope
  • 调整颜色方案:使用viridis色系,提升颜色区分度并隐藏冗余图例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:44:54