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

R语言中如何可视化多元正态分布的积分区域

R中3D正态分布积分区域的可视化方法

基础数据准备

先完成3D正态分布的网格数据生成,这是后续可视化的基础:

library(plotly)
library(mvtnorm)

# 生成XY网格(范围覆盖目标区域及周边)
x <- seq(-3, 3, length.out = 50)
y <- seq(-3, 3, length.out = 50)
grid <- expand.grid(X = x, Y = y)

# 计算二维正态分布密度(均值(0,0),单位协方差矩阵)
grid$Z <- dmvnorm(grid, mean = c(0,0), sigma = diag(2))

方法一:曲面着色高亮目标区域

直接将X∈[-1,1]、Y∈[-1,1]对应的曲面部分用不同颜色标记,比修改线框图颜色更直观:

# 标记目标区域
grid$region <- ifelse(grid$X >= -1 & grid$X <= 1 & grid$Y >= -1 & grid$Y <= 1, 
                      "积分区域", "其他区域")

# 绘制着色曲面
plot_ly(grid, x = ~X, y = ~Y, z = ~Z, color = ~region,
        colors = c("#1f77b4", "#ff7f0e"), type = "surface") %>%
  layout(scene = list(xaxis = list(title = "X"),
                      yaxis = list(title = "Y"),
                      zaxis = list(title = "密度值Z")))

如果坚持使用线框图,只需将type = "surface"改为type = "wireframe",但线框图的颜色区分效果弱于曲面。


方法二:填充层标记积分体积

若要突出“积分是曲面到XY平面的体积”这一概念,可添加半透明填充层覆盖目标区域的体积范围:

# 提取目标区域数据
target_grid <- subset(grid, X >= -1 & X <= 1 & Y >= -1 & Y <= 1)

# 生成底部填充数据(Z=0,即XY平面)
bottom_grid <- target_grid
bottom_grid$Z <- 0

# 组合数据用于绘制填充体积
fill_mesh <- rbind(target_grid, bottom_grid)

# 先画基础密度曲面,再叠加填充层
plot_ly(grid, x = ~X, y = ~Y, z = ~Z, type = "surface", opacity = 0.7, colors = "viridis") %>%
  add_mesh(data = fill_mesh, x = ~X, y = ~Y, z = ~Z, color = "rgba(255, 127, 14, 0.5)",
           alphahull = 0) %>%
  layout(scene = list(xaxis = list(title = "X"),
                      yaxis = list(title = "Y"),
                      zaxis = list(title = "密度值Z")))

方法三:结合积分数值标注

可视化的同时计算目标区域的积分值,标注在图中让结果更具参考性:

# 计算目标区域的积分值(二维正态分布的概率)
integral_value <- pmvnorm(lower = c(-1, -1), upper = c(1, 1), mean = c(0,0), sigma = diag(2))[[1]]

# 在图中添加数值标注(基于方法一的曲面图)
plot_ly(grid, x = ~X, y = ~Y, z = ~Z, color = ~region,
        colors = c("#1f77b4", "#ff7f0e"), type = "surface") %>%
  layout(scene = list(xaxis = list(title = "X"),
                      yaxis = list(title = "Y"),
                      zaxis = list(title = "密度值Z"))) %>%
  add_annotations(x = 0, y = 0, z = max(grid$Z)/2,
                  text = paste0("积分值: ", round(integral_value, 4)),
                  showarrow = FALSE, font = list(size = 12, color = "black"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 23:18:28