在ggplot2中为每个facet添加不同的辅助x轴

时间:2018-05-23 09:56:06

标签: r ggplot2

我想为每个方面添加不同的辅助轴。这是我的工作示例:

library(ggplot2)
library(data.table)

#Create the data:
data<-data.table(cohort=sample(c(1946,1947,1948),10000,replace=TRUE),
                 works=sample(c(0,1),10000,replace=TRUE),
                 year=sample(seq(2006,2013),10000,replace=TRUE))
data[,age_cohort:=year-cohort]
data[,prop_works:=mean(works),by=c("cohort","year")]

#Prepare data for plotting:
data_to_plot<-unique(data,by=c("cohort","year"))

#Plot what I want:
ggplot(data_to_plot,aes(x=age_cohort,y=prop_works))+geom_point()+geom_line()+
  facet_wrap(~ cohort)

该图显示特定群体中有多少人在特定年龄工作。我想添加一个辅助x轴,显示哪个年份对应于不同群组的特定年龄。

1 个答案:

答案 0 :(得分:1)

由于您具有要在数据集中使用的实际值,因此一种解决方法是将它们绘制为附加的geom_text层:

ggplot(data_to_plot,
       aes(x = age_cohort, y = prop_works, label = year))+
  geom_point() +
  geom_line() +
  geom_text(aes(y = min(prop_works)),
            hjust = 1.5, angle = 90) +           # rotate to save space
  expand_limits(y = 0.44) +
  scale_x_continuous(breaks = seq(58, 70, 1)) +  # ensure x-axis breaks are at whole numbers
  scale_y_continuous(labels = scales::percent) +
  facet_wrap(~ cohort, scales = "free_x") +      # show only relevant age cohorts in each facet
  theme(panel.grid.minor.x = element_blank())    # hide minor grid lines for cleaner look

您可以根据所需输出的尺寸来调整hjust中的geom_text()值和y中的expand_limits()值,以获得合理的外观。

plot

(如果数据中缺少年份,则需要进行更多的数据处理,但我认为这里不是这种情况。)