在ggplot绘制箱线图时为X轴分类设置标签报错求助
解决ggplot箱线图自定义X轴分类标签的报错问题
咱们先拆解一下你遇到的两个问题:报错和标签位置不对,其实根源都是错误地把labels参数传给了as.logical()函数——这个函数根本不支持这个参数,所以才会抛出unused argument的错误;同时你把整个带labels的表达式作为x轴映射,ggplot就把这个表达式当成了x轴的标题,自然标签不会出现在分类上。
下面给你两种简单的解决方法,选哪种都可以:
方法1:先把变量转成带标签的因子(推荐,更清晰)
在数据预处理阶段,用factor()函数把survived转换成带有自定义标签的因子,再映射到x轴:
tidy_titanic %>% # 把survived转成因子,指定原始水平和对应标签 mutate(survived_fct = factor(survived, levels = c(0, 1), labels = c("Died", "Survived"))) %>% ggplot(mapping = aes(x = survived_fct, y = fare)) + geom_boxplot() + scale_y_log10()
这里要注意levels的顺序要和原始数据里survived的取值对应(比如0代表死亡,1代表存活),labels就填你想要显示的文本。
方法2:用scale_x_discrete()直接修改轴标签
如果不想修改原始数据,可以在ggplot的图层后添加scale_x_discrete()来替换默认的分类标签:
tidy_titanic %>% ggplot(mapping = aes(x = as.logical(survived), y = fare)) + geom_boxplot() + scale_y_log10() + # 替换x轴的分类标签,顺序要和逻辑值的默认顺序对应(FALSE在前,TRUE在后) scale_x_discrete(labels = c("Died", "Survived"))
这种方式是在绘图层面直接覆盖默认标签,适合快速调整的场景。
再啰嗦一下错误原因
as.logical()的作用只是把输入转换成逻辑值(TRUE/FALSE),它只接受一个向量参数,没有labels这个参数选项,你强行传入就会触发报错;同时你把as.logical(survived, labels("Died", "Survived"))作为x的映射,ggplot会把这个完整表达式当作x轴的名称,这就是为什么你看到标签跑到轴标题里的原因。
内容的提问来源于stack exchange,提问作者Victor Ogbolu
相关产品推荐
相关产品推荐

