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

如何使用geom_bar()绘制按值排序且每柱配色不同的条形图

R语言geom_bar实现排序自定义配色条形图方案

完整可运行代码

# 加载绘图依赖包
library(ggplot2)

# 原始数据
df <- data.frame(name1 = c("Chi", "Ron", "Gen", "Ral", "Cha", "Det", "Har", "Was"),
                 value1 = c(641, 548, 459, 367, 366, 324, 317, 309))

# ----------------------
# 第一步:调整分类顺序
# ----------------------
# 若需要按value1降序排列(条形从左到右数值从高到低)
df$name1 <- factor(df$name1, levels = df$name1[order(-df$value1)])

# 若需要按value1升序排列(条形从左到右数值从低到高),替换成下行代码即可
# df$name1 <- factor(df$name1, levels = df$name1[order(df$value1)])

# ----------------------
# 第二步:绘制条形图
# ----------------------
ggplot(df, aes(x = name1, y = value1, fill = name1)) +
  geom_bar(stat = "identity") +
  # 可选:自定义坐标轴、图例标题
  labs(x = "分类名称", y = "数值", fill = "分类对应图例") +
  # 可选:替换默认配色,可自行修改palette参数取值
  scale_fill_brewer(palette = "Set3")

关键逻辑说明

  • 排序实现:ggplot2的分类轴展示顺序由因子的levels属性决定,通过order()函数对value1排序后,将对应name1设置为因子水平,即可实现按数值大小排列条形。
  • 颜色与图例实现:在全局美学映射中将fill参数绑定到name1列,ggplot会自动为每个name1分配唯一填充色,同时生成一一对应的图例,无需额外配置。
  • geom_bar参数说明:必须设置stat = "identity",geom_bar默认统计分组计数,设置为identity后会直接使用value1的数值作为条形高度。

可选优化

如果需要横向条形图,只需在绘图代码末尾添加+ coord_flip()即可。

内容的提问来源于stack exchange,提问作者stack_sks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:54:03