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

如何按time1组的val升序重新排序ggplot分组条形图?

解决方案:按time1的val值排序分组条形图x轴

要实现按time == "time1"时的val值对x轴的ID进行升序排列,你需要让reorder()仅参考time1对应的val数据,而非所有time的累计值。以下是两种可行方法:

方法一:在ggplot中直接指定排序依据

利用索引筛选出time1对应的val值,作为reorder()的排序基准:

ggplot(df1, aes(x=reorder(ID, val[time == "time1"]), y=val, fill=time)) +
  geom_bar(stat="identity", width=0.5, position=position_dodge())

这里val[time == "time1"]会提取每个ID在time1时的val值,reorder()会基于这个值对ID进行升序排列。

方法二:预处理数据(更清晰易读)

先单独提取time1的val数据并合并到原数据框,再用这个独立字段排序:

# 提取time1的ID和对应val值
time1_vals <- df1[df1$time == "time1", c("ID", "val")]
names(time1_vals)[2] <- "time1_val"

# 合并到原数据框
df1_updated <- merge(df1, time1_vals, by = "ID")

# 基于time1_val排序ID并绘图
ggplot(df1_updated, aes(x=reorder(ID, time1_val), y=val, fill=time)) +
  geom_bar(stat="identity", width=0.5, position=position_dodge())

这种方法把排序逻辑单独抽离,代码可读性更强,后续调整排序规则也更方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:06:04