R 更改面网格中的面标签并同时添加几何线时出错
我试图在不修改数据框的情况下更改刻面标签,并在绘图中添加一条垂直线以增强可理解性R 更改面网格中的面标签并同时添加几何线时出错,r,ggplot2,facet,R,Ggplot2,Facet,我试图在不修改数据框的情况下更改刻面标签,并在绘图中添加一条垂直线以增强可理解性 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
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)
,但它返回一个错误:
ifelse中出错(is_manual、“manual”、“Upload”):找不到对象is_manual
但是,一旦我删除了geom\u vline
部分,它就会正常工作,这意味着应该能够找到“is\u 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)
df$在这里只是猜测,但可能geom\u vline
是从传递到ggplot
的原始数据帧df
中获取面标签名称,而不是从facet\u grid
中使用的更新公式中获取,从而在geom\u 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)
我突然想到:如果你的理论成立吗?ggplot(df,aes(x=weeks,y=value))+geom\u-line()+geom\u-vline(xintercept=0,color=“blue”,linetype=2)+facet\u-grid(if-else(is\u-manual,“manual”,“Uploaded”)~)
显示了同样的错误?在这种情况下,垂直线在刻面之前绘制。谢谢。我认为facet\u grid
语句在序列中的位置并不重要,因为在生成几何体之前,数据必须按facet分割。只有geom订单才重要。对于可能感兴趣的人,我已经在GitHub上打开了一个。
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)