Stacked column chart绘制求助:柱内值顺序颠倒+自定义颜色失效
问题修复方案
问题1:柱内数值顺序颠倒
你的代码里,data_long$A <- factor(data_long$A, levels = rev(levels(data_long$A)))这行写在了数据重塑之前,此时data_long还未生成,所以这行代码完全没有生效。
两种修复方式:
方式1:先重塑数据再调整因子水平
col_names <- c("A", "B", "C", "D","E", "F", "G","H") colnames(data) <- col_names # 先完成数据重塑 data_long <- tidyr::pivot_longer(data, cols = c(B:H), names_to = "X", values_to = "Value") # 再调整A的因子水平,反转默认顺序以匹配Excel效果 data_long$A <- factor(data_long$A, levels = rev(levels(data_long$A))) ggplot(data_long, aes(x = X, y = Value, fill = A)) + geom_col(position = "stack") + labs(x = "X轴", y = "Y轴", fill = "图例") + theme_minimal()
方式2:直接反转堆叠顺序
如果不想修改因子水平,可在geom_col中设置堆叠参数:
ggplot(data_long, aes(x = X, y = Value, fill = A)) + geom_col(position = position_stack(reverse = TRUE)) + # 反转堆叠顺序 labs(x = "X轴", y = "Y轴", fill = "图例") + theme_minimal()
问题2:自定义HEX颜色显示灰色
出现灰色通常是因为自定义颜色的数量和因子A的类别数量不匹配,或者颜色向量未与因子水平对应。
修复代码:
确保自定义颜色的数量与A列的类别数一致,用scale_fill_manual指定:
# 示例:根据A列实际类别数调整颜色数量 custom_colors <- c("#FF5733", "#33FF57", "#3357FF", "#FF33A6") ggplot(data_long, aes(x = X, y = Value, fill = A)) + geom_col(position = position_stack(reverse = TRUE)) + scale_fill_manual(values = custom_colors) + # 指定自定义HEX颜色 labs(x = "X轴", y = "Y轴", fill = "图例") + theme_minimal()
如果要严格绑定颜色与特定类别,可给颜色向量命名:
custom_colors <- c( "类别1" = "#FF5733", "类别2" = "#33FF57", "类别3" = "#3357FF", "类别4" = "#FF33A6" )
完整修复代码
col_names <- c("A", "B", "C", "D","E", "F", "G","H") colnames(data) <- col_names # 数据重塑 data_long <- tidyr::pivot_longer(data, cols = c(B:H), names_to = "X", values_to = "Value") # 自定义颜色(根据A列实际类别数量调整) custom_colors <- c("#FF5733", "#33FF57", "#3357FF", "#FF33A6", "#F3FF33") ggplot(data_long, aes(x = X, y = Value, fill = A)) + geom_col(position = position_stack(reverse = TRUE)) + # 修正堆叠顺序 scale_fill_manual(values = custom_colors) + # 自定义颜色 labs(x = "X轴", y = "Y轴", fill = "图例") + theme_minimal()
内容的提问来源于stack exchange,提问作者Erika Eri
相关产品推荐
相关产品推荐

