使用ggplot堆叠条形图对分类变量排序的技术咨询
解决ggplot条形图的排序与颜色填充问题
我来帮你排查一下代码里的问题,其实就是两个小细节没处理对:
1. 颜色填充的错误原因
你之前写的fill = 'WCEL name'是把填充色设置成了一个固定的字符串常量,所以所有条形都会显示同一种颜色,完全没有区分不同的WCEL name。
正确的做法是引用数据框里的变量WCEL name——因为这个变量名包含空格,需要用反引号把它包裹起来,这样ggplot才会识别这是一个分类变量,自动给不同的WCEL name分配不同的颜色。
2. 有序因子排序不生效的解决办法
虽然你的class已经定义为有序因子,但有时候ggplot会默认按照数据中出现的顺序绘制X轴,而不是严格遵循有序因子的层级。我们可以通过scale_x_discrete()强制指定X轴的顺序,直接调用你已经定义好的有序因子层级即可。
修正后的完整代码
堆叠条形图(默认样式)
ggplot(data = CE0008, aes(x = class, y = count, fill = `WCEL name`)) + geom_col() + scale_x_discrete(limits = levels(CE0008$class))
分组并排条形图(如果需要每个class下的WCEL name条形分开显示)
ggplot(data = CE0008, aes(x = class, y = count, fill = `WCEL name`)) + geom_col(position = position_dodge(width = 0.9)) + # 调整width控制条形间距 scale_x_discrete(limits = levels(CE0008$class))
额外验证步骤
如果排序还是有问题,可以先检查一下class变量的层级是否正确:
levels(CE0008$class)
如果输出不是从Class 0到Class 20的顺序,你可以重新定义有序因子:
CE0008$class <- factor(CE0008$class, levels = paste0("Class ", 0:20), ordered = TRUE)
这样调整后,你的条形图应该就能按照预期显示了:X轴严格按Class 0到Class 20排序,不同的WCEL name也会有对应的填充颜色。
内容的提问来源于stack exchange,提问作者TheGoat
相关产品推荐
相关产品推荐

