You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:42:25