R自定义ggplot绘图函数传HTML色值报invalid argument type错误
错误原因
!!是rlang提供的非标准求值操作符,仅可在aes()函数内部用于解析动态传入的列名,你在geom_violin、geom_label的固定色值参数上误用了该操作符,才会触发参数类型错误。- 你传入的
color参数本身就是合法的字符串色值,不需要额外用!!、as.character()做解析转换。
修复方案
直接删除geom_violin和geom_label中色值参数包裹的!!as.character()即可,修改后的完整函数如下:
violin_rating_by_time <- function(df,var,color,title){ label <- df %>% filter(!is.na(Decade)) %>% filter(!is.na(!!as.name(var))) %>% mutate(Decade = fct_reorder(factor(Decade),Release.Date)) %>% group_by(Decade) %>% summarise(temp=median(!!as.name(var))) names(label)[names(label)=="temp"] <- var plot <- df %>% filter(!is.na(Decade)) %>% mutate(Decade = fct_reorder(factor(Decade),Release.Date)) %>% ggplot(aes(x=Decade,y=!!as.name(var)))+ # 去掉色值参数的!!as.character包裹 geom_violin(color=color,fill=color,position="dodge",outlier.colour="transparent",alpha = 0.4,draw_quantiles = c(0.5))+ # 这里的color参数也同样去掉!!as.character包裹 geom_label(data = label, aes(label = !!as.name(var)),color=color,vjust=-0.4,hjust=0.9)+ theme_aes()+ # 补充小优化:隐藏图例应该传NA(无引号),传字符串"NA"可能会引发警告 theme(legend.position = NA) + ggtitle(title) return(plot) }
修改后你原来的调用代码无需调整,即可正常运行出图。
内容的提问来源于stack exchange,提问作者aStarIsCorn
相关产品推荐
相关产品推荐

