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.
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))
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"))
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