我试图在不修改数据框的情况下更改构面标签,并在图中添加一条垂直线以增强可理解性。
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)
给了我这个,工作正常:
现在我想更改构面标签,以便每个人都知道什么是真和假。
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)
,但它会更改我的基础数据。
当不更改数据框内容时,有没有办法可以同时更改构面标签并添加垂直线?或者这是一个需要报告的错误?
答案 0 :(得分:3)
只是猜测一下,但是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)