简体   繁体   中英

How to create grid of kernel density plots in R

I have some some samples of a high dimensional density that I would like to plot. I like to create a grid of them where their bivariate density is plotted when they cross. For example, in Bayes and Big Data - The Consensus Monte Carlo Algorithm, Scott et al. (2016) has the following plot:

在此处输入图像描述

In this plot, above the diagonal are the distributions on a scale just large enough to fit the plots. In the below diagonal, the bivariate densities are plotted on a common scale.

Does anyone know how I can achieve such a plot?

For instance if I have just generated a 5-dimensional Gaussian distribution using:

library(MASS)

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

This is relatively easy using the facet_matrix() from the ggforce package. You just have to specify which layer goes on what part of the plot (ie layer.upper = 1 says that the first layer ( geom_density2d() ) should go in the upper triangular part of the matrix. The geom_autodensity() makes sure that the KDE touches the bottom part of the plot.

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)

在此处输入图像描述

More details about facet_matrix() are posted here .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM