在 R 中向 geom_line() 添加自定义图例

时间:2021-06-18 15:13:28

标签: r ggplot2

d_probe <- soread()
ggplot(d_probe) +
  geom_line(aes(x = identity, y = effect)) +
  geom_line(aes(x = identity, y = ULCI), linetype = "dotted") + 
  geom_line(aes(x = identity, y = LLCI), linetype = "dotted")

d_probe:

identity    effect        se         t         p      LLCI      ULCI
     2.0000   -0.8046    0.2984   -2.6965    0.0081   -1.3960   -0.2132
     2.1400   -0.7471    0.2768   -2.6993    0.0081   -1.2956   -0.1985
     2.2800   -0.6895    0.2554   -2.6997    0.0080   -1.1957   -0.1833
     2.4200   -0.6319    0.2344   -2.6959    0.0081   -1.0965   -0.1674
     2.5600   -0.5744    0.2139   -2.6855    0.0084   -0.9983   -0.1505
     2.7000   -0.5168    0.1940   -2.6643    0.0089   -0.9013   -0.1324
     2.8400   -0.4593    0.1749   -2.6257    0.0099   -0.8059   -0.1126
     2.9800   -0.4017    0.1570   -2.5590    0.0119   -0.7128   -0.0906
     3.1200   -0.3441    0.1406   -2.4475    0.0160   -0.6228   -0.0655
     3.2600   -0.2866    0.1264   -2.2668    0.0254   -0.5372   -0.0360
     3.4000   -0.2290    0.1152   -1.9875    0.0494   -0.4574   -0.0006
     3.4023   -0.2281    0.1151   -1.9820    0.0500   -0.4562    0.0000
     3.5400   -0.1715    0.1080   -1.5882    0.1151   -0.3854    0.0425
     3.6800   -0.1139    0.1054   -1.0804    0.2824   -0.3229    0.0951
     3.8200   -0.0563    0.1080   -0.5218    0.6028   -0.2703    0.1577
     3.9600    0.0012    0.1153    0.0105    0.9916   -0.2272    0.2296
     4.1000    0.0588    0.1265    0.4648    0.6430   -0.1919    0.3094
     4.2400    0.1163    0.1406    0.8272    0.4099   -0.1624    0.3951
     4.3800    0.1739    0.1570    1.1075    0.2705   -0.1373    0.4851
     4.5200    0.2315    0.1750    1.3230    0.1886   -0.1153    0.5782
     4.6600    0.2890    0.1940    1.4896    0.1392   -0.0955    0.6736
     4.8000    0.3466    0.2139    1.6201    0.1081   -0.0774    0.7706

如何在三行中添加自定义图例,以便读者了解其含义?示例图例可以是:“这是第 1 行”、“这是第 2 行”和“这是第 3 行”。谢谢!

1 个答案:

答案 0 :(得分:1)

这类问题通常与重塑数据有关。格式应该是长格式,数据是宽格式。请参阅this post,了解如何将数据从宽格式重新调整为长格式。

首先是基本剧情。图例将自动具有变量的名称,因为 effectLLCIULCI 现在位于长格式变量 name 下,映射到 linetype。< /p>

library(dplyr)
library(tidyr)
library(ggplot2)

g <- d_probe %>%
  pivot_longer(cols = c(effect, LLCI, ULCI)) %>%
  ggplot(aes(x = identity, y = value, linetype = name)) +
  geom_line()

现在,自定义线型。

lty <- c("solid", "dotted", "dotted")
g + scale_linetype_manual(values = lty)

enter image description here

要更改图例,请使用参数 labels,省略绘图。

labs <- c("this is line 1", "this is line 2", "this is line 3")
g + scale_linetype_manual(labels = labs, values = lty)

编辑

为了在图例行与其文本之间留出空间,请使用带有 theme 集的 legend.spacing。在这种情况下,它应该是 legend.spacing.x。并且左对齐文本也会使所有文本标签的间距相等。

g + scale_linetype_manual(values = lty) +
  theme(
    legend.spacing.x = unit(0, "cm"),
    legend.text.align = 0
  )