ggplot柱状图调整顺序_1.3 让ggplot2的柱状图根据y的大小依次排列

本文介绍了如何使用ggplot2中的reorder函数来调整柱状图的顺序,使其根据y轴的值(Change)从小到大或从大到小排列。通过在ggplot的aes函数中将x轴映射为reorder(Abb, Change)或reorder(Abb, -Change),可以实现柱状图的顺序变化。" 134868474,7337247,人工智能在体育:预测、训练优化与运动员分析,"['人工智能', '机器学习', '体育数据', '比赛预测', '运动员训练优化']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法:映射时使用reorder函数,将映射给x的横坐标的变量()的次序,依据映射给y的变量的大小排列。

一、基本柱形图

#先看一个常见的柱状图,此处的fill是给每一条的柱状图同一个颜色,所以没有写在ggplot语句中;当然默认先把映射给x的Abb变量转化为因子变量(factor)

ggplot(upc, aes(x = Abb, y = Change)) +

geom_col(fill = "#669933")

812db2fff7419892fe52231d8c87c0dc.png

发现: 柱子的大小没有任何规律,原因在于下面的x轴的坐标。虽然没有专门设置x轴字体,不是清晰,但可以看到x轴的排列是根据ggplot中映射给x的每个因子变量的首字母排列的,A、B、C...

所以要想生成我们想要的顺序的柱状图:要么手动设置因子的顺序,要么按照按照一定的逻辑排列:比如,按照y轴的值从小到大排列。那么:

二、使用reorder函数让柱状图有顺序

# 映射给x的不是简单的变量名为Abb的变量,而是将Abb变量根据Change变量(默认从小到大)reorder后的Abb变量

ggplot(upc, aes(x = reorder(Abb,Change), y = Change)) +

geom_col(fill

ggplot2调整堆积柱状图(stacked bar chart)的图例顺序,通常可以通过修改因子变量的水平(factor levels)来实现。图例的顺序默认是根据因子水平排列的,因此只需重新排序因子的 level 即可控制图例项的显示顺序。 ### 使用 `forcats` 包中的 `fct_relevel()` 或 `fct_reorder()` 函数 可以使用 `forcats::fct_relevel()` 显式指定因子的顺序,或使用 `forcats::fct_reorder()` 根据某个数值变量对因子进行排序。例如,在以下示例中,假设 `drv` 是用于填充颜色的因子变量: ```r library(ggplot2) library(forcats) # 示例数据集 mpg mpg$drv <- fct_relevel(mpg$drv, "r", "f", "4") # 手动设定图例顺序为 rear-wheel drive, front-wheel drive, four-wheel drive ggplot(mpg, aes(x = class, fill = drv)) + geom_bar(position = "stack") + labs(title = "Stacked Bar Chart with Reordered Legend", x = "Car Class", y = "Count") ``` 这样设置后,图例将按照 `"r"`(后轮驱动)、`"f"`(前轮驱动)、`"4"`(四轮驱动)的顺序排列[^1]。 ### 使用 `scale_fill_discrete()` 控制图例顺序 另一种方式是通过 `scale_fill_discrete()` 的 `breaks` 参数显式定义图例的顺序,而不改变原始数据的因子水平: ```r ggplot(mpg, aes(x = class, fill = drv)) + geom_bar(position = "stack") + scale_fill_discrete(breaks = c("r", "f", "4")) + labs(title = "Stacked Bar Chart with Custom Legend Order", x = "Car Class", y = "Count") ``` 这会强制图例按照指定顺序显示,适用于不希望修改原始数据结构的情况[^1]。 ### 使用 `guides()` 和 `guide_legend()` 自定义图例排序 如果需要更复杂的图例定制,也可以结合 `guides()` 和 `guide_legend()` 来调整图例顺序: ```r ggplot(mpg, aes(x = class, fill = drv)) + geom_bar(position = "stack") + guides(fill = guide_legend(order = 1)) + # 图例按此顺序排序 labs(title = "Stacked Bar Chart with Guide-based Legend Ordering", x = "Car Class", y = "Count") ``` 还可以进一步配合 `breaks` 参数来精确定义顺序: ```r ggplot(mpg, aes(x = class, fill = drv)) + geom_bar(position = "stack") + guides(fill = guide_legend(breaks = c("4", "f", "r"))) + labs(title = "Custom Legend Order Using guide_legend()", x = "Car Class", y = "Count") ``` 这种方式提供了灵活的图例控制能力,尤其适合复杂图表的最终润色需求。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值