如何使用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
相关产品推荐
相关产品推荐

