我试图在不修改数据框的情况下更改构面标签,并在绘图中添加垂直线以增强易懂性。
library(ggplot2)
df <- data.frame(weeks = rep(-3:3, each = 2),
is_manual = rep(c(TRUE, FALSE), times = 7),
value = c(rnorm(7, 10), rnorm(7, 20)))
# Plotting
ggplot(df, aes(x = weeks, y = value)) + geom_line() +
facet_grid(is_manual ~ .) +
geom_vline(xintercept = 0, color = "blue", linetype = 2)
给我这个,效果很好:
现在,我想更改构面标签,以便每个人都知道TRUE和FALSE是什么。
ggplot(df, aes(x = weeks, y = value)) + geom_line() +
facet_grid(ifelse(is_manual, "Manual", "Uploaded") ~ .) +
geom_vline(xintercept = 0, color = "blue", linetype = 2)
,但返回错误:
ifelse中的错误(is_manual,“手动”,“已上传”):找不到对象“ is_manual”
但是,一旦我删除了该geom_vline
部件,它就可以正常工作,这意味着应该可以找到“ is_manual”。
ggplot(df, aes(x = weeks, y = value)) + geom_line() +
facet_grid(ifelse(is_manual, "Manual", "Uploaded") ~ .)
我可以通过解决
df$is_manual <- ifelse(df$is_manual, "Manual", "Uploaded")
ggplot(df, aes(x = weeks, y = value)) + geom_line() +
facet_grid(is_manual ~ .) +
geom_vline(xintercept = 0, color = "blue", linetype = 2)
,但它会更改我的基础数据。
有没有一种方法可以更改构面标签并同时添加垂直线,而又不更改数据框内容?还是这是一个需要报告的错误?
只是在这里猜测,但是也许geom_vline
是从原始数据帧中将构面标签名称df
传递给ggplot
,而不是从中使用的更新公式中获取构面标签名称facet_grid
,从而在geom_vline
无法确定构面的位置时导致错误。
在任何情况下,您都可以使用dplyr
管道(%>%
)快速更新基础数据,而不必更改基础数据,从而避免出现以下错误:
library(tidyverse)
ggplot(df %>% mutate(is_manual = ifelse(is_manual, "Manual", "Uploaded"),
aes(x = weeks, y = value)) + geom_line() +
facet_grid(is_manual ~ .) +
geom_vline(xintercept = 0, color = "blue", linetype = 2)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句