在ggplot2中使用边缘直方图的散点图

在ggplot2中使用边缘直方图的散点图

有没有办法用边缘直方图创建散点图,就像下面的示例一样ggplot2?在Matlab中它是scatterhist()函数,并且R也存在等价物。但是,我还没有看到ggplot2。

我开始尝试创建单个图形,但不知道如何正确排列它们。

 require(ggplot2)
 x<-rnorm(300)
 y<-rt(300,df=2)
 xy<-data.frame(x,y)
     xhist <- qplot(x, geom="histogram") + scale_x_continuous(limits=c(min(x),max(x))) + opts(axis.text.x = theme_blank(), axis.title.x=theme_blank(), axis.ticks = theme_blank(), aspect.ratio = 5/16, axis.text.y = theme_blank(), axis.title.y=theme_blank(), background.colour="white")
     yhist <- qplot(y, geom="histogram") + coord_flip() + opts(background.fill = "white", background.color ="black")

     yhist <- yhist + scale_x_continuous(limits=c(min(x),max(x))) + opts(axis.text.x = theme_blank(), axis.title.x=theme_blank(), axis.ticks = theme_blank(), aspect.ratio = 16/5, axis.text.y = theme_blank(), axis.title.y=theme_blank() )


     scatter <- qplot(x,y, data=xy)  + scale_x_continuous(limits=c(min(x),max(x))) + scale_y_continuous(limits=c(min(y),max(y)))none <- qplot(x,y, data=xy) + geom_blank()

并使用此处发布的功能安排它们。但长话短说:有没有办法创建这些图表?

Smart猫小萌
浏览 905回答 3
3回答

拉丁的传说

该gridExtra包应该在这里工作。首先制作每个ggplot对象:hist_top&nbsp;<-&nbsp;ggplot()+geom_histogram(aes(rnorm(100)))empty&nbsp;<-&nbsp;ggplot()+geom_point(aes(1,1),&nbsp;colour="white")+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;theme(axis.ticks=element_blank(),&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;panel.background=element_blank(),&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;axis.text.x=element_blank(),&nbsp;axis.text.y=element_blank(),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;axis.title.x=element_blank(),&nbsp;axis.title.y=element_blank())scatter&nbsp;<-&nbsp;ggplot()+geom_point(aes(rnorm(100),&nbsp;rnorm(100)))hist_right&nbsp;<-&nbsp;ggplot()+geom_histogram(aes(rnorm(100)))+coord_flip()然后使用grid.arrange函数:grid.arrange(hist_top,&nbsp;empty,&nbsp;scatter,&nbsp;hist_right,&nbsp;ncol=2,&nbsp;nrow=2,&nbsp;widths=c(4,&nbsp;1),&nbsp;heights=c(1,&nbsp;4))

慕桂英3389331

这不是一个完全响应的答案,但它非常简单。它说明了显示边际密度的另一种方法,以及如何将alpha级别用于支持透明度的图形输出:scatter&nbsp;<-&nbsp;qplot(x,y,&nbsp;data=xy)&nbsp;&nbsp;+&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scale_x_continuous(limits=c(min(x),max(x)))&nbsp;+&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scale_y_continuous(limits=c(min(y),max(y)))&nbsp;+&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;geom_rug(col=rgb(.5,0,0,alpha=.2))scatter

德玛西亚99

这可能有点晚了,但我决定为此创建一个package(ggExtra),因为它涉及一些代码并且编写起来可能很乏味。该软件包还试图解决一些常见问题,例如确保即使有标题或文本被放大,这些图仍将是彼此内联的。基本思想类似于这里给出的答案,但它有点超出了这个范围。以下是如何将边缘直方图添加到1000个点的随机集中的示例。希望这可以使将来更容易添加直方图/密度图。链接到ggExtra包library(ggplot2)df&nbsp;<-&nbsp;data.frame(x&nbsp;=&nbsp;rnorm(1000,&nbsp;50,&nbsp;10),&nbsp;y&nbsp;=&nbsp;rnorm(1000,&nbsp;50,&nbsp;10))p&nbsp;<-&nbsp;ggplot(df,&nbsp;aes(x,&nbsp;y))&nbsp;+&nbsp;geom_point()&nbsp;+&nbsp;theme_classic()ggExtra::ggMarginal(p,&nbsp;type&nbsp;=&nbsp;"histogram")
打开App,查看更多内容
随时随地看视频慕课网APP