Diagrama de dispersión con contorno / superposición de calor


23

Vi este gráfico en el suplemento de un artículo reciente y me encantaría poder reproducirlo usando R. Es un diagrama de dispersión, pero para arreglar el trazado excesivo hay líneas de contorno que son de "calor" de color azul a rojo correspondientes al Densidad de trazado excesivo. ¿Cómo haría esto?

ingrese la descripción de la imagen aquí


55
Esta pregunta de StackOverflow muestra un par de opciones de ggplot2 para este tipo de gráfico, incluidos los puntos de diagrama de dispersión +.
joran

Respuestas:


30

Aquí está mi opinión, usando funciones básicas solo para dibujar cosas:

library(MASS)  # in case it is not already loaded 
set.seed(101)
n <- 1000
X <- mvrnorm(n, mu=c(.5,2.5), Sigma=matrix(c(1,.6,.6,1), ncol=2))

## some pretty colors
library(RColorBrewer)
k <- 11
my.cols <- rev(brewer.pal(k, "RdYlBu"))

## compute 2D kernel density, see MASS book, pp. 130-131
z <- kde2d(X[,1], X[,2], n=50)

plot(X, xlab="X label", ylab="Y label", pch=19, cex=.4)
contour(z, drawlabels=FALSE, nlevels=k, col=my.cols, add=TRUE)
abline(h=mean(X[,2]), v=mean(X[,1]), lwd=2)
legend("topleft", paste("R=", round(cor(X)[1,2],2)), bty="n")

ingrese la descripción de la imagen aquí

Para una representación más elegante, es posible que desee echar un vistazo a ggplot2 y stat_density2d(). Otra función que me gusta es smoothScatter():

smoothScatter(X, nrpoints=.3*n, colramp=colorRampPalette(my.cols), pch=19, cex=.8)

ingrese la descripción de la imagen aquí


2
Sería bueno si uno pudiera controlar la gráfica de contorno para incluir cuantiles / percentiles / deciles especificados (o lo que tenga).
Roman Luštrik 01 de

Impresionante, he estado buscando algo así durante mucho tiempo, trama de buena calidad
WAF

26

Nadie ha sugerido ggplot2 para esto?

library(MASS)
library(ggplot2)
n <- 1000
x <- mvrnorm(n, mu=c(.5,2.5), Sigma=matrix(c(1,.6,.6,1), ncol=2))
df = data.frame(x); colnames(df) = c("x","y")

commonTheme = list(labs(color="Density",fill="Density",
                        x="RNA-seq Expression",
                        y="Microarray Expression"),
                   theme_bw(),
                   theme(legend.position=c(0,1),
                         legend.justification=c(0,1)))

ggplot(data=df,aes(x,y)) + 
  geom_density2d(aes(colour=..level..)) + 
  scale_colour_gradient(low="green",high="red") + 
  geom_point() + commonTheme

Lo que produce lo siguiente:

Ejemplo 1

Sin embargo, también se pueden hacer otras cosas, con bastante facilidad, como las siguientes:

ggplot(data=df,aes(x,y)) + 
  stat_density2d(aes(fill=..level..,alpha=..level..),geom='polygon',colour='black') + 
  scale_fill_continuous(low="green",high="red") +
  geom_smooth(method=lm,linetype=2,colour="red",se=F) + 
  guides(alpha="none") +
  geom_point() + commonTheme

Lo que produce lo siguiente:

ingrese la descripción de la imagen aquí

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.