2016-12-17 47 views
1

我正在更新ggplot2(2.2.0)。根据this页面,一个很棒的新功能是可以沿着每个x轴绘制不均匀数量的图。如何使用facet_wrap在ggplot2中包含所有x轴标签,包括缺失数据?

我想绘制在每个面的相同的x轴。但是,当缺少数据时,这不起作用。作为一个例子,我将借鉴this问题中的示例数据。

# Example dataset 
dataf <- data.frame(x=c(1:30), A=rnorm(30,20,5), B=rnorm(30,15,0.5)) 
datam <- melt(dataf, id="x") 
# Plot in ggplot2 
ggplot(datam, aes(factor(x), value)) + 
    geom_bar(stat="identity") + 
    facet_wrap(~variable,nrow = 2,scales = "free") 

当我删除特定行并引入缺失数据(如每低于我代码),我不再具有相同的x轴标签两者“A”和“B”。

# Remove certain rows to introduce missing data 
datam <- datam[-c(2, 4, 58), ] 

我可以绘制缺失值和对齐用scales = fixed底部x轴虽然我不再有X轴的刻度标记标签在所述小基团“A”。

ggplot(datam, aes(factor(x), value)) + 
    geom_bar(stat="identity") + 
    facet_wrap(~variable,nrow = 2,scales = "fixed") 

即使在缺少数据的情况下,每个方面如何显示完全相同的x轴标签?

谢谢。

+0

@hadley - 是否有ggplot2中的功能,请不要在下面的答案中使用解决方法以上做到上述做? – user2716568

回答

1

你可以这样做:

library(reshape2) 
library(ggplot2) 
dataf <- data.frame(x=c(1:30), A=rnorm(30,20,5), B=rnorm(30,15,0.5)) 
datam <- melt(dataf, id="x") 
datam2 <- datam[-c(2, 4, 58), ] #mising rows 
graph<-ggplot(datam2, aes(factor(x), value)) + 
    geom_bar(stat="identity") + 
    facet_wrap(~variable,nrow = 2,scales = "fixed") 
library(gtable) 
library(grid) 
g <- ggplotGrob(graph) #retrieve grob from graph 
panels <- grep("panel", g$layout$name) 
top <- unique(g$layout$t[panels]) 
all <- gtable:::rbind_gtable(gtable:::rbind_gtable(g[seq.int(min(top)), ], 
                g[max(top)+1,], "first"), 
          g[seq(min(top)+1, nrow(g)),], "first") 
grid.newpage() 
grid.draw(all) 

enter image description here
相当肯定的解决方案我SO发现在某些时候。但不记得原来的帖子。

+1

太好了,感谢您的解决方法!这是一个耻辱,它不能通过秤选项解决。我将如何添加我的y轴标签(不是原始帖子)? – user2716568

相关问题