使用facet_grid&创建2个面板和2个hlines; R中的ggplot2

时间:2013-06-06 12:19:31

标签: r ggplot2

这是我第二次尝试提问。我希望这次我可以给你一个可重复的例子。

我有一个带变量DIS和Date的data.frame。我想用ggplot2绘制data.frame。 x轴上的日期,y轴上的DIS。

我想将它绘制在两个面板中,但在y轴上具有相同的比例。

第1小组:1Q1至4Q4。 第2小组:P1直到P3。 此外,我想绘制4条水平线:

对照组的下限(在Panel 1和Panel 2中应该相同) 对照组的上限(在第1小组和第2小组中应该相同) 第1小组的DIS平均值(仅在第1小组中可见) 第2小组的DIS平均值(应仅在第2小组中可见) 我尝试使用face_grid和geom_hline,但正如你所看到的,我得到了19个面板,水平线在所有面板上都可见。

DIS=c(0.1120, 0.1104, 0.3794, 0.3983, 0.3175, 0.2275, 0.2171, 0.1973, 0.2499, 0.1819, 0.2613, 0.2302, 0.3795, 0.2406, 0.2486, 0.2464, 0.1143, 0.2685, 0.2447)
    Date=c("1Q1","1Q2","1Q3","1Q4","2Q1","2Q2","2Q3","2Q4","3Q1","3Q2","3Q3","3Q4","4Q1","4Q2","4Q3","4Q4","P1","P2", "P3" )

Bush <- data.frame(Date, DIS)

require (ggplot2)

ggplot(Bush, aes(x = Date, y = DIS))+
  geom_point(shape=1)+
  ylim(0,0.5)+
  geom_hline(aes(yintercept=0.07), linetype="dotted")+ #that's the lower limit of the control group
  geom_hline(yintercept=0.19, linetype="dotted")+ # that's the upper limit of the control group
  geom_hline(yintercept=mean(Bush$DIS[1:16]), colour="blue")+ # that's the mean of the values from 1Q1 to 4Q4 - it should only range from 1Q1 until 4Q4 on the x-axis
  geom_hline(yintercept=mean(Bush$DIS[17:19]), colour="blue")+ # that's the mean of the values from P1 to P3 - it should only range from P1 to P3 on the x-axis
  facet_grid(.~ Date, scales="free_x") # it should be grouped in two panels - 1st from 1Q1 to 4Q4, 2nd from P1 to P3

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

你正面对你的x变量。如果您需要不同的分面行为,则需要创建一个与您想要查看的行为相匹配的特定变量:

Bush$grp <- rep(c('a','b'),times = c(16,3))

所以我创建了一个新的变量,它以你希望它们在面板中一起显示的方式对观察结果进行分组。然后你只是面对那个变量:

facet_grid(.~ grp, scales="free_x")

要使水平线显示在单独的面板中,策略是相同的。 (它总是一样的,这就是ggplot的诀窍!)你创建了一个数据框,其中包含一个描述所有内容的变量:

mean_df <- data.frame(grp = c('a','b'),
                      yint = with(Bush,c(mean(DIS[1:16]),mean(DIS[17:19]))))

然后将该数据框传递到geom_hline并将yintercept映射到yint

geom_hline(data = mean_df,aes(yintercept = yint),colour = "blue")