R - 分别在 3d 中绘制两个二元法线及其轮廓

标签 r plot normal-distribution

我一直在玩 MASS 包,可以简单地使用 image 和 par(new=TRUE) 绘制两个二元法线,例如:

# lets first simulate a bivariate normal sample
library(MASS)
bivn <- mvrnorm(1000, mu = c(0, 0), Sigma = matrix(c(1, .5, .5, 1), 2))
bivn2 <- mvrnorm(1000, mu = c(0, 0), Sigma = matrix(c(1.5, 1.5, 1.5, 1.5), 2))

# now we do a kernel density estimate
bivn.kde <- kde2d(bivn[,1], bivn[,2], n = 50)
bivn.kde2 <- kde2d(bivn2[,1], bivn[,2], n = 50)

# fancy perspective
persp(bivn.kde, phi = 45, theta = 30, shade = .1, border = NA)
par(new=TRUE)
persp(bivn.kde2, phi = 45, theta = 30, shade = .1, border = NA)

这看起来不太好,我想我必须玩转轴和其他东西。
但是,如果我对轮廓尝试类似的方法,则图不会重叠。它们被简单地替换:
# fancy contour with image
image(bivn.kde); contour(bivn.kde, add = T)
par(new=TRUE)
image(bivn.kde2); contour(bivn.kde, add = T)

这是我想要的最好的方法还是我只是在强制自己?欢迎任何建议。谢谢!

最佳答案

也许你可以使用 rgl图书馆。它允许您创建交互式 3d 图。

require(rgl)

col1 <- rainbow(length(bivn.kde$z))[rank(bivn.kde$z)]
col2 <- heat.colors(length(bivn.kde2$z))[rank(bivn.kde2$z)]
persp3d(x=bivn.kde, col = col1)
with(bivn.kde2, surface3d(x,y,z, color = col2))

enter image description here

如果要绘制两个曲面之间的差异,则可以执行以下操作。
res <- list(x = bivn.kde$x, y = bivn.kde$y, z = bivn.kde$z - bivn.kde2$z)
col3 <- heat.colors(length(res$z))[rank(res$z)]
persp3d(res, col = col3)

enter image description here

关于R - 分别在 3d 中绘制两个二元法线及其轮廓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15396551/

相关文章:

python - matplotlib 中未显示绘图窗口

javascript - Shiny:如何检测选择了哪些 Accordion 元素?

r - 为每一行计算一个变量在 data.table 中的百分比

r - ggplot 使用分组日期变量(例如 year_month)

r - 在 knitr 中开始一个新的 R session

ios - 核心图:如何绘制 Y 轴平均值的图表?

r - 如何将嵌套的 plot_grid 缩放到相同的大小?

C++ 在函数中生成随机数

c++ - 使用 Boost 的多元正态分布样本

matlab - 如何在octave/matlab中从均值和st.dev向量生成多重随机分布?