将并排相关的图与ggplot2对齐

时间:2017-05-25 15:01:37

标签: ggplot2 gridextra

我有以下两部分图未对齐:

enter image description here

Side-by-side plots not aligned

这些图由以下代码生成:

require(ggplot2)
require(gridExtra) 

set.seed(0)
data <- data.frame(x=rpois(30,5),y=rpois(30,11),z=rpois(300,25))
left.plot   <- ggplot(data,aes(x,y)) 
               + geom_bin2d(binwidth=1)

margin.data <- as.data.frame( margin.table(table(data),1))
right.plot  <- ggplot(margin.data, aes(x=x,y=Freq))
               + geom_bar(stat="identity")+coord_flip()                                                        

grid.arrange(left.plot, right.plot, ncol=2)

如何将左图中的行与右图中的条对齐?

2 个答案:

答案 0 :(得分:0)

你的问题很简单,尽管是双重的。

最终,您需要使用scale_y_continuous()scale_x_continuous()来设置轴限制以匹配eatch数字。 x值是一个因素,这阻碍了这一点。将它转换为数字并进行一些缩放,你就可以了。

left.plot   <- ggplot(data,aes(x,y)) + 
  geom_bin2d(binwidth=1) + 
  scale_y_continuous(limits = c(1, 16))

margin.data <- as.data.frame( margin.table(table(data),1))
right.plot  <- ggplot(margin.data, aes(x=as.numeric(as.character(x)),y=Freq)) + 
  geom_bar(stat="identity") +
  scale_x_continuous(limits = c(1, 16)) + 
  xlab("x") + 
  coord_flip() 

enter image description here

答案 1 :(得分:0)

使用包ggExtra我能得到几乎解决方案

require(ggplot2)
require(ggExtra)

set.seed(0)
data <- data.frame(x=rpois(30,5),y=rpois(30,11),z=rpois(300,25))
left.plot <- ggplot(data,aes(x,y)) + geom_bin2d(binwidth=1)

ggMarginal(left.plot, margins="y", type = "histogram",  size=2,bins=(max(data$y)-min(data$y)+1),binwidth=1.06)      

我说几乎是因为我必须手动设置binwidth = 1.06以对齐条形和计数。

Manually aligned plots using ggExtra::ggMarginal