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

