【发布时间】:2022-01-14 08:16:47
【问题描述】:
我正在 R 中创建一个散点图,用户可以在其中添加或删除显示固定参考值的水平线。在此过程中,我注意到更改参考线的名称会重新排列图例,因此水平线有时会出现在散布图例元素之前,有时会出现在之后。
比较:
到
下面是一个可复制的例子
YEAR = as.integer(rep(2010:2020,5))
SERIES_NAME = rep(LETTERS[1:5], each = 11)
OBS_VALUE = runif(n = 55, min = -5, max = 20)
EA = ifelse(SERIES_NAME=='A', 'Option 1', 'Option 2')
df <- data.frame(YEAR=YEAR,
SERIES_NAME=SERIES_NAME,
OBS_VALUE=OBS_VALUE,
EA=EA)
注释掉两条线中的一条或另一条,以生成一个图形,在其中命名图例上的水平线。
aaaaaaa <- "RGCUZYMSFP" # appears above
aaaaaaa <- "IZTCYUXGBO" # appears below
然后生成图表:
df %>%
select(YEAR,SERIES_NAME, OBS_VALUE, EA) %>%
ggplot() +
ggplot2::geom_point(
ggplot2::aes(
x = YEAR,
y = OBS_VALUE,
col = EA),
size = 2) +
ggplot2::guides(
color = ggplot2::guide_legend(nrow = 2,
byrow = TRUE))+
scale_linetype_manual(values = 2) +
scale_x_continuous(breaks = seq(2010,2020,5))+
geom_hline(aes(yintercept = EAMean,
linetype = aaaaaaa),
size = 1, color = "black")
我还注意到更改变量的名称会更改输出。如果我将变量的名称从 aaaaaaaa(字母 a 的 8 倍)更改为 aaaaaaa(字母 a 的 7 倍)并相应地更新水平线的代码,则图例会重新排序
有没有一种方法可以让我更加一致地控制我的图例项目的去向?
【问题讨论】:
-
您可以通过 scale_xxx_yyy(..., guide = guide_legend(order = 1)) 设置图例的顺序,以使图例出现在顶部, ... = 2 用于第二个等等在。根据文档,ggplot2 将由
... a secret algorithm选择(参见?guide_legend)。 (: