双图在ggplot2中共享相同的x轴

时间:2013-11-26 01:50:24

标签: r

我有这种格式的数据集。

head(sppec.p)
    Wavelength_.nm.      Mean     Lower     Upper Species Feature_selection Count
1             400 0.1467549 0.1290778 0.2758327    ALAL            T-test     0
2             405 0.1454303 0.1271905 0.2726207    ALAL            T-test     0
3             410 0.1464431 0.1290472 0.2754903    ALAL            T-test     0
4             415 0.1468586 0.1298166 0.2766753    ALAL            T-test     0
5             420 0.1485061 0.1310419 0.2795480    ALAL            T-test     0
6             425 0.1517019 0.1342690 0.2859708    ALAL            T-test     0

我最初打算做一个双轴图,但在这里搜索之后,我意识到ggplot中的“不可能”,很多人建议不要使用这些图。因此,我已经确定了一个方面的情节。我尝试先做个别情节但我无法弄清楚如何使用facet_wrapscales = "free_y"来获得相同x轴但不同y轴的2个图。

各个图表的代码:

  myplot<-ggplot(sppec.p, aes(x=Wavelength_.nm., y=Mean, group=Species, linetype =   Species,
ymin = Lower, ymax =  Upper)) +
 geom_ribbon(alpha = 0.2,fill='gray') +
 geom_line() +  theme_bw() +scale_fill_grey(start = 0.1, end = 0.9) +
 opts(panel.background = theme_rect(fill='grey80')) +
 ylim(0,3)

myplot + theme_bw ()+ opts(axis.line = theme_segment(colour = "black"),
  panel.grid.major = theme_blank(),
  panel.grid.minor = theme_blank()) 

......生产 enter image description here

第二张图:

  cum.totals<-ggplot(sppec.p, aes(Wavelength_.nm., y=Count, fill =     factor(Feature_selection))) + geom_bar(stat="identity")
   cum.totals + theme_bw() +scale_fill_grey(start = 0.1, end = 0.9)+
opts(axis.line = theme_segment(colour = "black"),
panel.grid.major = theme_blank(),  
panel.grid.minor = theme_blank(),
panel.border = theme_blank(),
panel.background = theme_blank())

制作图表:

enter image description here

虽然两个y轴在数值上都是等价的,但它们代表不同的值。

我对ggplot不是很熟悉,我想知道如何使用facet_wrap或任何其他功能,这些功能可以让我在共享相同的a轴上获得2个图但在2中面。是否可以提高我的代码效率?

所以最终输出的布局基本上是这样的: enter image description here

1 个答案:

答案 0 :(得分:1)

当您将相同类型的图表细分为多个类别时,

Facet非常有用。你的情况有所不同。查看各种facet_gridfacet_wrap上的帮助条目,了解其中的差异。这可以帮助您入门 -

ggplot(mtcars, aes(mpg, wt)) + geom_point() + facet_grid(. ~ cyl)

enter image description here

我不是两个不同y轴对着相同x轴的忠实粉丝(如果我理解的话,那就是你要在那里做的事情)。相反,请使用参数gridExtra::arrangeGrob尝试ncol = 1,使您的图表垂直叠放在另一个上面,这样您就可以将相同的x轴相互叠加,并实现类似的效果。