ggplot绘制填充柱状图移除NA失效 如何调整Y轴使0在底1在顶
解决方案
移除NA值不生效的问题
geom_bar()中的na.rm = TRUE仅会移除几何层计算过程中产生的缺失值,不会处理映射到fill属性的category列中的NA值——这类NA会被填充色标度默认识别为独立分类进行展示,因此仅在geom层加参数无法达到隐藏NA的效果。
两种修复方式二选一即可:
- 预处理数据:绘图前先过滤掉
category为NA的行library(dplyr) con_threat <- con_threat %>% filter(!is.na(category)) - 不修改源数据:在填充标度中添加参数关闭NA值的展示,不需要提前过滤数据,在
scale_fill_brewer()中设置na.translate = FALSE即可。
Y轴顺序调整
position = "fill"默认的Y轴规则就是0在底部、1在顶部,如果当前图轴顺序不符合预期,大概率是没有显式限定Y轴范围,或者误加了轴反转类的代码。显式调用Y轴连续标度强制固定范围和刻度即可,不需要加反转函数。
修正后完整代码
ggplot(con_threat, aes(fill= category, y=n, x=report_group.x)) + geom_bar(position="fill", stat="identity", na.rm = TRUE) + labs( x = 'Marine animal type', y = 'Percentage of animals in each status', title = 'Conservation status of 4 different marine animals' # 修正了原代码中mairne的拼写错误 ) + scale_fill_brewer(palette="Spectral", na.translate = FALSE) + # 隐藏NA分类 scale_y_continuous(limits = c(0, 1), breaks = seq(0, 1, 0.2)) + # 固定Y轴范围,确保0在底1在顶 theme(axis.text.x = element_text(angle = 30, vjust = 1, hjust=1))
内容的提问来源于stack exchange,提问作者rhelp
相关产品推荐
相关产品推荐

