ggplot2:添加带标签的第二个x轴

时间:2014-07-16 09:22:51

标签: r ggplot2

我正在寻找类似的东西。就我而言,我在x轴上有6个不同的标签 - 让它成为" 1月"," 2月"," 6月"," 7月& #34;和"九月","十月"。正如您所看到的,2个月总是可以分为一个季节:"冬天","夏天"和"秋天"。我有六个值(每月一个),让它成为温度。现在我的x-Axis有6个刻度和标签。但是,我想在第二个轴上添加" Winter"出现在" 1月"和"二月"等等。 关于它如何起作用的任何想法?

到目前为止,这是我的代码:

p1 <- ggplot(df, aes(colour=group, y= temperature, x= month))
p1 <- p1 + geom_point(aes(shape=c("15", "15", "16", "16", "17", "17")),size = 1.5)+               
  geom_errorbar(limits2, width=0.1, size = 0.5) +                                        
  scale_y_continuous(limits=c(0,5), name = "Temperature")+                                
  theme(axis.title.y = element_text(vjust=0.4))+                                          
  scale_x_discrete(name = "MONTH", labels=c("January", "February", "June", "July", "September", "October"))+
  theme(axis.title.x = element_text(vjust=-0.2))
p1

非常感谢!

1 个答案:

答案 0 :(得分:1)

这是在主图和轴标签下添加文本的一种不太优雅的方式。由于我没有原始数据,让我举例说明使用“mtcars”数据:

library(ggplot2)
library(gridExtra)
(g0 <- ggplot(mtcars, aes(gear, mpg, colour=factor(am))) + geom_point(size=4) +
   theme(plot.margin = unit(c(1,1,3,1), "cm")))

Text1 <- textGrob("Spring")
Text2 <- textGrob("Summer")
Text3 <- textGrob("Fall")
(g1 <- g0 + annotation_custom(grob = Text1,  xmin = 3, xmax = 3, ymin = 5, ymax = 5) +
   annotation_custom(grob = Text2,  xmin = 4, xmax = 4, ymin = 5, ymax = 5) +
   annotation_custom(grob = Text3,  xmin = 5, xmax = 5, ymin = 5, ymax = 5))

gg_table <- ggplot_gtable(ggplot_build(g1))
gg_table$layout$clip[gg_table$layout$name=="panel"] <- "off"
grid.draw(gg_table)

您可以调整ymin和xmin值以移动文本。

如果要将gg_table保存为grob,则需要使用arrangeGrob()和“克隆ggsave并绕过类检查”(根据the answer to a similar question):

g <- arrangeGrob(gg_table)
ggsave <- ggplot2::ggsave
body(ggsave) <- body(ggplot2::ggsave)[-2]
ggsave(file="./figs/figure.png", g)

enter image description here