使用R语言ggplot2实现柱状图按数值从高到低排序的问题求助
解决方法
ggplot2默认将字符型分类变量按字母顺序排序,要让柱子按指定数值从高到低排列,只需调整分类变量的因子水平即可,推荐使用tidyverse内置的forcats包的fct_reorder()函数实现,修改后的完整可运行代码如下:
# 未加载依赖包请先运行这行 library(tidyverse) advertisement <- c("A", "B", "C") times_shown <- c(900, 1000, 800) clicks <- c(140, 180, 105) leads <- c(55, 54, 40) advertisement_all <- data.frame(advertisement, times_shown, clicks, leads) advertisement_all %>% # 按leads数值降序调整advertisement的因子顺序,也可替换为你需要的排序指标 mutate(advertisement = fct_reorder(advertisement, desc(leads))) %>% ggplot(aes(x = advertisement, y = leads, fill = advertisement)) + geom_col(position = "dodge") + labs(title = "Flanders' Roofing广告效果", subtitle = "线索量 vs 曝光次数", caption = "分析者:B. P. Newton") + xlab("广告类型") + ylab("线索数量 (#)") + scale_fill_discrete(name = "广告类型", labels = c("A", "B", "C"))
补充说明
- 如果你需要按其他指标排序,比如曝光量
times_shown,只需把fct_reorder里的desc(leads)换成desc(times_shown)即可 - 不想依赖forcats包也可以手动指定因子水平:
mutate(advertisement = factor(advertisement, levels = c("A", "B", "C"))),直接在levels里按你想要的顺序填写即可
内容的提问来源于stack exchange,提问作者Benjamin Newton
相关产品推荐
相关产品推荐

