scatterplot avec histogrammes alpha transparents en R

comment des diagrammes de dispersion avec des histogrammes alpha transparents et sans échelle peuvent-ils être réalisés en R, comme cette figure?

on dirait qu'il n'est pas fait en ggplot2.enter image description here

quelqu'un sait-il quelle commande est utilisée?

18
demandé sur user248237dfsf 2013-06-28 21:30:24

2 réponses

library(ggplot2)
library(gridExtra)

set.seed(42)
DF <- data.frame(x=rnorm(100,mean=c(1,5)),y=rlnorm(100,meanlog=c(8,6)),group=1:2)

p1 <- ggplot(DF,aes(x=x,y=y,colour=factor(group))) + geom_point() +
  scale_x_continuous(expand=c(0.02,0)) +
  scale_y_continuous(expand=c(0.02,0)) +
  theme_bw() +
  theme(legend.position="none",plot.margin=unit(c(0,0,0,0),"points"))

theme0 <- function(...) theme( legend.position = "none",
                               panel.background = element_blank(),
                               panel.grid.major = element_blank(),
                               panel.grid.minor = element_blank(),
                               panel.margin = unit(0,"null"),
                               axis.ticks = element_blank(),
                               axis.text.x = element_blank(),
                               axis.text.y = element_blank(),
                               axis.title.x = element_blank(),
                               axis.title.y = element_blank(),
                               axis.ticks.length = unit(0,"null"),
                               axis.ticks.margin = unit(0,"null"),
                               panel.border=element_rect(color=NA),...)

p2 <- ggplot(DF,aes(x=x,colour=factor(group),fill=factor(group))) + 
  geom_density(alpha=0.5) + 
  scale_x_continuous(breaks=NULL,expand=c(0.02,0)) +
  scale_y_continuous(breaks=NULL,expand=c(0.02,0)) +
  theme_bw() +
  theme0(plot.margin = unit(c(1,0,0,2.2),"lines")) 

p3 <- ggplot(DF,aes(x=y,colour=factor(group),fill=factor(group))) + 
  geom_density(alpha=0.5) + 
  coord_flip()  + 
  scale_x_continuous(labels = NULL,breaks=NULL,expand=c(0.02,0)) +
  scale_y_continuous(labels = NULL,breaks=NULL,expand=c(0.02,0)) +
  theme_bw() +
  theme0(plot.margin = unit(c(0,1,1.2,0),"lines"))

grid.arrange(arrangeGrob(p2,ncol=2,widths=c(3,1)),
             arrangeGrob(p1,p3,ncol=2,widths=c(3,1)),
             heights=c(1,3))

enter image description here

Edit:

Je n'ai pas pu trouver ce qui cause l'espace sous les géoms de densités. Vous pouvez jouer avec le tracé des marges pour l'éviter, mais je n'aime pas vraiment ça.

p2 <- ggplot(DF,aes(x=x,colour=factor(group),fill=factor(group))) + 
  geom_density(alpha=0.5) + 
  scale_x_continuous(breaks=NULL,expand=c(0.02,0)) +
  scale_y_continuous(breaks=NULL,expand=c(0.00,0)) +
  theme_bw() +
  theme0(plot.margin = unit(c(1,0,-0.48,2.2),"lines")) 

p3 <- ggplot(DF,aes(x=y,colour=factor(group),fill=factor(group))) + 
  geom_density(alpha=0.5) + 
  coord_flip()  + 
  scale_x_continuous(labels = NULL,breaks=NULL,expand=c(0.02,0)) +
  scale_y_continuous(labels = NULL,breaks=NULL,expand=c(0.00,0)) +
  theme_bw() +
  theme0(plot.margin = unit(c(0,1,1.2,-0.48),"lines"))

enter image description here

33
répondu Roland 2013-07-01 08:57:23

Je n'ai aucune idée s'il y a un paquet qui fait cela directement, mais je suis sûr que cela être fait dans R. la Transparence est simple: vous ajoutez les deux chiffres de l'RVB spécification d'une couleur pour une transparence:

#FF0000 # red
#FF0000FF # full opacity
#FF000000 # full transparency
layout fonction. Comme pour la courbe de densité verticale, elle est identique à la courbe horizontale avec X et y commutés. L'exemple donné ici peut facilement être étendu à inclure des couleurs, de la plus petite des marges, etc. Je peux essayer de trouver un exemple plus élaboré si cette description n'est pas suffisante.

0
répondu January 2013-06-28 17:37:33