在ggplot中为轴标签添加额外的文本

时间:2017-01-09 09:45:05

标签: r ggplot2

我想为我的数据框df创建一个很好的置信区间图:

> df 
       Estimate       Lower      Upper
A1  0.005414976 -0.01227699 0.02310694
A2  0.004046546 -0.01368911 0.02178220
A3  0.002761602 -0.01491484 0.02043804
A4 -0.002860038 -0.02049349 0.01477342
A5 -0.004197288 -0.02178773 0.01339316
A6  0.011004835 -0.12687561 0.14888529
B1 -0.001077768 -0.01130327 0.00914773
C1  0.137894575 -0.09659997 0.37238912
D1  0.128514414 -0.10866480 0.36569363
D2  0.168863152 -0.06347553 0.40120183
D3  0.139645665 -0.09431216 0.37360349
D4  0.028744139 -0.19562867 0.25311695

从数据集中可以看出,前6行代表一个因子的水平,然后有两个因子只有一个水平,最后一个是4个水平的因子。我希望以这样的方式显示它,以便明确水平属于一个因素。

我目前的情节如下:

ggplot(df, aes(x = rownames(df), y = Estimate, ymin = Lower, ymax = Upper)) +
geom_pointrange() +
geom_hline(yintercept = 0, linetype = 2) + 
coord_flip()

enter image description here

所需的输出应如下所示: enter image description here

我知道如何对因子进行分组还有其他选择,例如:请参阅this,但我想创建一些内容。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:5)

一个解决方案(使用版本2.2.0 ggplot2)是使用分面但将位置调整到与轴相同的一侧,然后将分面名称放在轴外,并改变文本方向和垂直位置。

首先,添加新变量以显示因子水平。

df$Level <- paste("Factor ",substr(rownames(df),1,1))

ggplot(df, aes(x = rownames(df), y = Estimate, ymin = Lower, ymax = Upper)) +
      geom_pointrange() +
      geom_hline(yintercept = 0, linetype = 2) + 
      coord_flip() +
      facet_grid(Level~.,scales = "free",space="free",switch = "both") +
      theme(strip.placement = "outside",
            strip.text.y = element_text(angle = 180,vjust=1, face = "bold"),
            strip.background = element_blank(),
            panel.spacing = unit(0,"cm"))

enter image description here