如何告诉ggplot选择一个用``引用的列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何告诉ggplot选择一个用``引用的列相关的知识,希望对你有一定的参考价值。
我要做的是告诉ggplot geom_line一个用``引用的tibble列。
例如,如果我按字面意思写出它工作的列的“名称”:
这是生成的tibble:
Q <- as_tibble(data.frame(series = rep(c("diax","diay"),3),
value = c(3.25,3.30,3.31,3.36,3.38,3.42),
year = c(2018,2018,2019,2019,2020,2020))) %>%
select(year, series, value) %>% spread(key = "series", value = "value") %>%
rename(`2018-01-01` = diax, `2017-01-01` = diay)
这是ggplot命令:
ggplot(Q, aes(x = year)) +
geom_line(aes(y = `2018-01-01`), col = "red", size = 2, linetype = "dotdash") +
geom_line(aes(y = `2017-01-01`), col = "orange", size = 2, linetype = "dashed")
上面的代码工作得很好。
但是,如果我有一个带有列名称的字符串向量,我根本无法复制调用向量的先前结果。
也就是说,假设我有一个这样的向量:
nomes <- c("2018-01-01","2017-01-01")
然后我想ggplot这样的东西:
ggplot(Q, aes(x = year)) +
geom_line(aes(y = nomes[1]), col = "red", size = 2, linetype = "dotdash") +
geom_line(aes(y = nomes[2]), col = "orange", size = 2, linetype = "dashed")
我知道这不会起作用,但作为一个初学者,我猜想下面的行可以正常工作,但他们不会
ggplot(Q, aes(x = year)) +
geom_line(aes(y = !!quo(nomes[1])), col = "red", size = 2, linetype = "dotdash") +
geom_line(aes(y = !!quo(nomes[2])), col = "orange", size = 2, linetype = "dashed")
我意识到quo(nomes [1])并没有在向量的位置内提供名称,而我无法得到我想要尝试的一些替代方案。
你可以as.name
:
nomes <- c("2018-01-01","2017-01-01");
ggplot(Q, aes(x = year)) +
geom_line(aes(y = !!as.name(nomes[1])), col = "red", size = 2, linetype = "dotdash") +
geom_line(aes(y = !!as.name(nomes[2])), col = "orange", size = 2, linetype = "dashed");
或者使用rlang::sym
:
ggplot(Q, aes(x = year)) +
geom_line(aes(y = !!rlang::sym(nomes[1])), col = "red", size = 2, linetype = "dotdash") +
geom_line(aes(y = !!rlang::sym(nomes[2])), col = "orange", size = 2, linetype = "dashed");
说明:我们将字符串转换为带有as.name
或rlang::sym
的符号,然后使用!!
计算当前周围上下文中的符号。
据我所知,这与您正在寻找的相同,但没有命名麻烦。您可以将数据保存为长格式,并将颜色和线型映射到series
列。我使用来自fct_recode
的forcats
(作为tidyverse
的一部分)来改变series
的因子水平,但你也可以改变基数R的水平。
或者,你可以保持series
水平(diax,diay),只需改变它们出现在scale_color_manual
和scale_linetype_manual
的图例中的标签。
library(tidyverse)
df <- as_tibble(data.frame(series = rep(c("diax","diay"),3),
value = c(3.25,3.30,3.31,3.36,3.38,3.42),
year = c(2018,2018,2019,2019,2020,2020))) %>%
mutate(series = fct_recode(series, "2018-01-01" = "diax", "2017-01-01" = "diay"))
ggplot(df, aes(x = year, y = value, color = series, linetype = series)) +
geom_line(size = 2) +
scale_color_manual(values = c("2018-01-01" = "red", "2017-01-01" = "orange")) +
scale_linetype_manual(values = c("2018-01-01" = "dotdash", "2017-01-01" = "dashed"))
由reprex package创建于2018-05-07(v0.2.0)。
以上是关于如何告诉ggplot选择一个用``引用的列的主要内容,如果未能解决你的问题,请参考以下文章
如何在sum()语句中通过其位置引用data.table的列
在 ggplot2-R 中编辑和格式化箱形图(删除时间序列图中的列和箱宽)