2013-06-28 31 views
18

如何用alpha透明散點圖,可以在R中製作無標度直方圖,如圖所示?散點圖與R中的alpha透明直方圖

看起來好像不是在ggplot2中製作的。 enter image description here

有誰知道使用了什麼命令?

+0

該線程被關閉,但可能不太想要的位置是:http://stackoverflow.com/questions/8545035/scatterplot-with-marginal-histograms-in- ggplot2 –

+1

參見http://blog.mckuhn.de/2009/09/learning-ggplot2-2d-plot-with.html –

回答

33
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

編輯:

我無法找出是什麼原因導致下面的密度geoms的空間。你可以擺弄劇情邊緣來避開它,但我不太喜歡那個。

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

+0

非常好!你怎麼能讓密度圖更接近軸線,以便它們像原始圖中那樣觸摸圖的邊界框? – user248237dfsf

0

我不知道是否有一個包直接做,但我確定這可以在R.完成。透明度很容易:你添加另一個兩位數的顏色的RGB規範的一個給定透明度:

#FF0000 # red 
#FF0000FF # full opacity 
#FF000000 # full transparency 

使用layout函數也可以輕鬆地組合不同的圖。至於垂直密度圖,它與切換x和y的水平圖相同。給出的例子here可以很容易地擴展爲包括顏色,較小的邊距等。如果這種描述不夠充分,我可以嘗試提出一個更詳細的例子。