首页 > 解决方案 > 为图形的特定部分添加 geom_vline,而不是所有图

问题描述

我有一个看起来像这样的图表在此处输入图像描述

使用此代码

ggplot(SurJagPred$estimates, aes(x=Primary, y=estimate, col=Sex)) + 
  geom_line(aes(), size = 1) + 
  geom_point()+
  geom_errorbar(aes(ymin = lcl, ymax = ucl ), alpha = 0.5) +
  geom_vline(xintercept = 2.5, linetype = "dotdash") +
  geom_vline(xintercept = 3.5, linetype = "dotdash") +
  geom_vline(xintercept = 4.5, linetype = "dotdash") +
  facet_wrap(~ grid)+
  labs(title = "Survival of Small Mammals", x = "Primary Periods", y = "Survival Rate (95% CI)") +
  theme_bw(base_size = 12)+ #text size
  theme(panel.grid = element_blank())

但是,点划线不应该到处重复。对于 A 地块,它应该只在 4.5 的位置,B 地块应该只在 2.5 的位置,C 应该只在 3.5 的位置。我尝试使用此代码创建具有这些细节的数据框

treatment<- c(2.5, 3.5, 4.5 )
letter<- c("B", "C", "A")
treat<- data.frame(treatment, letter)

但后来我不知道如何将它与另一个数据框合并到 ggplot 中。是否有捷径可寻?

编辑添加更多数据这是 SURJAGPred$Estimates

   vcv.index model.index par.index grid index  estimate         se       lcl       ucl fixed Primary Sex
1          6           6        16    A    16 0.8856129 0.07034495 0.6650065 0.9679442             1   F
2          7           7        17    A    17 0.6298085 0.06925362 0.4873071 0.7527946             2   F
3          8           8        18    A    18 0.6299329 0.06658399 0.4930294 0.7487096             3   F
4          9           9        19    A    19 0.6298073 0.05511803 0.5170043 0.7300226             4   F
5         10          10        20    A    20 0.7575780 0.05033492 0.6461752 0.8424570             5   F
6         21          21        61    B    61 0.8712803 0.07640191 0.6404038 0.9625845             1   F
7         22          22        62    B    62 0.6074361 0.06881164 0.4677850 0.7314780             2   F
8         23          23        63    B    63 0.6041038 0.06107390 0.4805314 0.7156737             3   F
9         24          24        64    B    64 0.5806663 0.06927518 0.4422311 0.7074705             4   F
10        25          25        65    B    65 0.7370924 0.05892159 0.6070616 0.8357368             5   F
11        41          41       121    C   121 0.8047651 0.09683670 0.5519029 0.9324112             1   F
12        42          42       122    C   122 0.5259543 0.07165185 0.3871407 0.6608688             2   F
13        43          43       123    C   123 0.5427102 0.07127190 0.4033297 0.6757102             3   F
14        44          44       124    C   124 0.5168940 0.06156377 0.3975699 0.6343222             4   F
15        45          45       125    C   125 0.6550035 0.07378427 0.5002863 0.7826314             5   F
16       196         196       586    A   586 0.8535576 0.08711021 0.5979391 0.9580602             1   M
17       197         197       587    A   587 0.5672181 0.07079460 0.4268475 0.6975683             2   M
18       198         198       588    A   588 0.5675404 0.06380437 0.4408554 0.6859682             3   M
19       199         199       589    A   589 0.5666988 0.06499677 0.4377245 0.6872281             4   M
20       200         200       590    A   590 0.7058527 0.05985742 0.5769525 0.8085129             5   M
21       211         211       631    B   631 0.8359801 0.09415382 0.5702268 0.9514068             1   M
22       212         212       632    B   632 0.5432876 0.07906137 0.3891407 0.6895670             2   M
23       213         213       633    B   633 0.5401000 0.06497578 0.4129088 0.6622738             3   M
24       214         214       634    B   634 0.5161817 0.06292617 0.3943413 0.6361283             4   M
25       215         215       635    B   635 0.6821666 0.07279913 0.5263900 0.8056259             5   M
26       226         226       676    C   676 0.7620894 0.10484134 0.5077061 0.9086707             1   M
27       227         227       677    C   677 0.4607459 0.07326857 0.3240289 0.6036357             2   M
28       228         228       678    C   678 0.4775193 0.08336355 0.3219411 0.6375852             3   M
29       229         229       679    C   679 0.4517796 0.06392891 0.3319493 0.5774748             4   M
30       230         230       680    C   680 0.5944339 0.07210424 0.4492079 0.7248249             5   M

标签: rggplot2

解决方案


试试@eipi10提到的这个(在缺乏数据的情况下未测试)。此外,当您使用颜色变量时,线条的数据应包含该变量,但您可以使用NA. 这里的代码:

library(ggplot2)
#Data
Primary<- c(2.5, 3.5, 4.5 )
grid<- c("B", "C", "A")
treat<- data.frame(grid, Primary,stringsAsFactors = F)
treat$col <- NA
#Plot
ggplot(SurJagPred$estimates, aes(x=Primary, y=estimate, col=Sex)) + 
  geom_line(aes(), size = 1) + 
  geom_point()+
  geom_errorbar(aes(ymin = lcl, ymax = ucl ), alpha = 0.5) +
  geom_vline(data=treat,aes(xintercept = Primary), linetype = "dotdash") +
  facet_wrap(~ grid)+
  labs(title = "Survival of Small Mammals", x = "Primary Periods",
       y = "Survival Rate (95% CI)") +
  theme_bw(base_size = 12)+ #text size
  theme(panel.grid = element_blank())

共享数据:

#Data
Primary<- c(2.5, 3.5, 4.5 )
grid<- c("B", "C", "A")
treat<- data.frame(grid, Primary,stringsAsFactors = F)
treat$col <- NA
#Plot
ggplot(df, aes(x=Primary, y=estimate, col=Sex)) + 
  geom_line(aes(), size = 1) + 
  geom_point()+
  geom_errorbar(aes(ymin = lcl, ymax = ucl ), alpha = 0.5) +
  geom_vline(data=treat,aes(xintercept = Primary), linetype = "dotdash") +
  facet_wrap(~ grid)+
  labs(title = "Survival of Small Mammals", x = "Primary Periods",
       y = "Survival Rate (95% CI)") +
  theme_bw(base_size = 12)+ #text size
  theme(panel.grid = element_blank())

输出:

在此处输入图像描述

使用的一些数据:

#Data
df <- structure(list(vcv.index = c(6L, 7L, 8L, 9L, 10L, 21L, 22L, 23L, 
24L, 25L, 41L, 42L, 43L, 44L, 45L, 196L, 197L, 198L, 199L, 200L, 
211L, 212L, 213L, 214L, 215L, 226L, 227L, 228L, 229L, 230L), 
    model.index = c(6L, 7L, 8L, 9L, 10L, 21L, 22L, 23L, 24L, 
    25L, 41L, 42L, 43L, 44L, 45L, 196L, 197L, 198L, 199L, 200L, 
    211L, 212L, 213L, 214L, 215L, 226L, 227L, 228L, 229L, 230L
    ), par.index = c(16L, 17L, 18L, 19L, 20L, 61L, 62L, 63L, 
    64L, 65L, 121L, 122L, 123L, 124L, 125L, 586L, 587L, 588L, 
    589L, 590L, 631L, 632L, 633L, 634L, 635L, 676L, 677L, 678L, 
    679L, 680L), grid = c("A", "A", "A", "A", "A", "B", "B", 
    "B", "B", "B", "C", "C", "C", "C", "C", "A", "A", "A", "A", 
    "A", "B", "B", "B", "B", "B", "C", "C", "C", "C", "C"), index = c(16L, 
    17L, 18L, 19L, 20L, 61L, 62L, 63L, 64L, 65L, 121L, 122L, 
    123L, 124L, 125L, 586L, 587L, 588L, 589L, 590L, 631L, 632L, 
    633L, 634L, 635L, 676L, 677L, 678L, 679L, 680L), estimate = c(0.8856129, 
    0.6298085, 0.6299329, 0.6298073, 0.757578, 0.8712803, 0.6074361, 
    0.6041038, 0.5806663, 0.7370924, 0.8047651, 0.5259543, 0.5427102, 
    0.516894, 0.6550035, 0.8535576, 0.5672181, 0.5675404, 0.5666988, 
    0.7058527, 0.8359801, 0.5432876, 0.5401, 0.5161817, 0.6821666, 
    0.7620894, 0.4607459, 0.4775193, 0.4517796, 0.5944339), se = c(0.07034495, 
    0.06925362, 0.06658399, 0.05511803, 0.05033492, 0.07640191, 
    0.06881164, 0.0610739, 0.06927518, 0.05892159, 0.0968367, 
    0.07165185, 0.0712719, 0.06156377, 0.07378427, 0.08711021, 
    0.0707946, 0.06380437, 0.06499677, 0.05985742, 0.09415382, 
    0.07906137, 0.06497578, 0.06292617, 0.07279913, 0.10484134, 
    0.07326857, 0.08336355, 0.06392891, 0.07210424), lcl = c(0.6650065, 
    0.4873071, 0.4930294, 0.5170043, 0.6461752, 0.6404038, 0.467785, 
    0.4805314, 0.4422311, 0.6070616, 0.5519029, 0.3871407, 0.4033297, 
    0.3975699, 0.5002863, 0.5979391, 0.4268475, 0.4408554, 0.4377245, 
    0.5769525, 0.5702268, 0.3891407, 0.4129088, 0.3943413, 0.52639, 
    0.5077061, 0.3240289, 0.3219411, 0.3319493, 0.4492079), ucl = c(0.9679442, 
    0.7527946, 0.7487096, 0.7300226, 0.842457, 0.9625845, 0.731478, 
    0.7156737, 0.7074705, 0.8357368, 0.9324112, 0.6608688, 0.6757102, 
    0.6343222, 0.7826314, 0.9580602, 0.6975683, 0.6859682, 0.6872281, 
    0.8085129, 0.9514068, 0.689567, 0.6622738, 0.6361283, 0.8056259, 
    0.9086707, 0.6036357, 0.6375852, 0.5774748, 0.7248249), Primary = c(1L, 
    2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 
    2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L), 
    Sex = c("F", "F", "F", "F", "F", "F", "F", "F", "F", "F", 
    "F", "F", "F", "F", "F", "M", "M", "M", "M", "M", "M", "M", 
    "M", "M", "M", "M", "M", "M", "M", "M")), row.names = c(NA, 
-30L), class = "data.frame")

推荐阅读