如何用ggplot删除空面? [英] How to remove empty facet with ggplot?

查看:55
本文介绍了如何用ggplot删除空面?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用facet_grid与ggplot一起执行geom_point,但是我的facet为空,我不知道如何删除它们或如何将数据构造为没有空facet?

I am doing geom_point with ggplot using facet_grid, but i get facet empty and i do not know how to delete them or how to structure my data to not have empty facet ?

这是我的数据的示例:

data = data.frame(
  F1=c(0.69, 0.59, 0.6 , 0.52, 0.56, 0.58, 0.52, 0.53, 0.41, 0.57,
       0.54, 0.38, 0.48, 0.31, 0.35,
       0.43, 0.36, 0.38, 0.23, 0.48, 0.55, 0.48, 0.49, 0.46, 0.49,
       0.52, 0.48, 0.48, 0.35, 0.5 ,
       0.51, 0.58, 0.51, 0.59, 0.51, 0.57, 0.5 , 0.59, 0.47, 0.51,
       0.61, 0.58, 0.61, 0.59, 0.61, 0.67, 0.6 , 0.59, 0.47, 0.61,
       0.61, 0.52, 0.53, 0.60,0.62, 0.53, 0.62, 0.63, 0.24, 0.38),
  F2 = c(0.01, 0.01, 0.02, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01,
         0.42, 0.35, 0.43, 0.31, 0.34, 0.41, 0.34, 0.34, 0.42, 0.39, 0.44, 0.43,
         0.49, 0.43, 0.42, 0.53, 0.41, 0.42, 0.50, 0.40 ,
         0.53, 0.58, 0.57, 0.55, 0.51, 0.65, 0.51, 0.52, 0.62, 0.49,
         0.63, 0.68, 0.67, 0.66, 0.61, 0.66, 0.61, 0.62, 0.62, 0.49,
         0.84, 0.65, 0.69, 0.56, 0.72, 0.61, 0.73, 0.68, 0.72, 0.72),
  s1= c(rep(c("a"),10),
        rep(c("b"),10),
        rep(c("c"),10),
        rep(c("d"),10),
        rep(c("f"),10),
        rep(c("g"),10)),
  s2= c(rep(c("g1"),20),
        rep(c("g2"),40)),
  M=rep(c("M1",
          "M2",  
          "M3",    
          "M4",    
          "M5",   
          "M6",         
          "M7", 
          "M8",
          "M9",
          "M10"),6))

我的代码:

ggplot (data, aes (x = F1, y = F2, shape = M)) +
  facet_grid(s2 ~ s1) + scale_shape_manual(values=c(7,13,23,0,8,1,15,2,17,3,25))+
  geom_point () 

我明白了:

预计的地块:

推荐答案

我为我的问题找到了解决方案,并希望与您分享:

I found a solution for my question and I wanted to share it with you :

p <- qplot(data=data, x=F1, y=F2)+facet_wrap( ~ s1,ncol = 2)
z <- ggplotGrob(p)
gtable_show_layout(z)
z <- gtable_add_cols(z, unit(0.08, 'null'), 11)
gtable_show_layout(z)
z <- gtable_add_grob(z,
                     list(rectGrob(gp = gpar(col=NA, fill = gray(0.85), size = 0.5,face="bold")),  
                          textGrob("g1", 
                                   rot = -90, gp = gpar(col = gray(0),fontsize=12,fontface = 'bold'))),
                     7, 12,9,12, name = paste(runif(2)))
gtable_show_layout(z)
z <- gtable_add_grob(z,
                     list(rectGrob(gp = gpar(col=NA, fill = gray(0.85), size = 0.5,face="bold")),  
                          textGrob("g2", 
                                   rot = -90, gp = gpar(col = gray(0),fontsize=12,fontface = 'bold'))),
                     12, 12,18,12, name = paste(runif(2)))

z <- gtable_add_cols(z, unit(1/6, "line"),11)
grid.newpage()
grid.draw(z)

我希望我的解决方案对其他人有用!

I hope that my solution will be useful for other people !!

这篇关于如何用ggplot删除空面?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆