如何在R中创建内核密度图的网格

时间:2019-11-13 11:19:40

标签: r ggplot2

我想绘制一些高尺寸密度的样本。我喜欢创建它们的网格,在它们交叉时绘制其双变量密度。例如,在《贝叶斯与大数据-共识蒙特卡洛算法》中,Scott等人。 (2016)具有以下情节:

enter image description here

在此图中,对角线上方是正好足以适合图的比例尺上的分布。在下面的对角线中,以共同比例绘制双变量密度。

有人知道我如何实现这样的情节吗?

例如,如果我刚刚使用以下命令生成了5维高斯分布:

library(MASS)

data <- MASS::mvrnorm(n=10000, mu=c(1,2,3,4,5), Sigma = diag(5))

1 个答案:

答案 0 :(得分:3)

使用ggforce软件包中的facet_matrix()相对容易。您只需要指定在图的哪一部分上的哪一层(即layer.upper = 1表示第一层(geom_density2d())应该位于矩阵的上三角部分。geom_autodensity()确保KDE接触到图的底部。

library(MASS)
library(ggforce)

data <- MASS::mvrnorm(n=10000, mu=c(1,2,3,4,5), Sigma = diag(5))

df <- as.data.frame(data)

ggplot(df) +
  geom_density2d(aes(x = .panel_x, y = .panel_y)) +
  geom_autodensity() +
  geom_point(aes(x = .panel_x, y = .panel_y)) +
  facet_matrix(vars(V1:V5), layer.upper = 1, layer.diag = 2)

enter image description here

关于facet_matrix()的更多详细信息发布在here