You need to enable JavaScript to run this app. 使用R语言ggplot2实现柱状图按数值从高到低排序的问题求助
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 15:18:01