Python中ggplot2自定义排序:将Other类别移至柱状图末尾
解决方法
要把"Other"固定在柱状图底部(翻转后的x轴末尾),核心是手动控制因子的顺序——不能依赖reorder自动排序,因为它会把"Other"也纳入排序逻辑。具体步骤如下:
先整理汇总数据(如果还没完成)
按国家分组计算总支出,确保"Other"类别已经合并完成:library(dplyr) library(ggplot2) # 假设原始数据为df,先计算各国总支出 df_summary <- df %>% group_by(customer_country) %>% summarise(Total_Expenditure = sum(Total_Expenditure)) %>% ungroup()自定义国家的排序顺序
先把除"Other"外的国家按总支出降序排列,再将"Other"追加到最后,然后把customer_country转为指定顺序的因子:# 提取非Other的国家,按总支出降序排序 sorted_countries <- df_summary %>% filter(customer_country != "Other") %>% arrange(desc(Total_Expenditure)) %>% pull(customer_country) # 组合最终顺序:排序后的国家 + Other final_order <- c(sorted_countries, "Other") # 设置因子水平,强制ggplot按该顺序绘图 df_summary$customer_country <- factor(df_summary$customer_country, levels = final_order)修改ggplot代码(注意去掉变量的引号!)
你原代码里把变量用引号包裹了,这会导致ggplot无法识别实际变量,必须去掉引号。修改后的绘图代码:ggplot(df_summary, aes(x = customer_country, y = Total_Expenditure, fill = Total_Expenditure)) + geom_bar(stat = "identity") + coord_flip() + scale_fill_cmap(cmap_name = "RdYlGn")
这样绘图后,所有非Other的国家会按总支出从高到低排列,"Other"固定在翻转后的x轴最底部(柱状图的最后一位)。
内容的提问来源于stack exchange,提问作者diana
相关产品推荐
相关产品推荐

