如何在ggplot2中仅基于ret变量对条形图进行降序排序?
有两种简单的方法可以实现只按variable == 'ret'的数值对行业降序排序:
方法一:直接在reorder中指定排序依据
修改ggplot的x轴映射,用ifelse筛选出ret组的value,让reorder只基于这些值排序:
ggplot(df_bar, aes(x = reorder(Industry, -ifelse(variable == 'ret', value, NA), na.rm = TRUE), y = value, fill = variable)) + geom_bar(stat = 'identity', position = 'dodge')
这里ifelse(variable == 'ret', value, NA)会把非ret组的数值替换为NA,na.rm = TRUE让reorder忽略这些NA,只根据ret的value对Industry降序排列。
方法二:先预处理数据设置因子顺序
如果更习惯先整理数据再绘图,可以先提取每个行业的ret数值,然后把Industry转换成指定顺序的因子:
# 需要先加载dplyr包 library(dplyr) # 提取每个行业对应的ret数值并按降序排序 ret_rank <- df_bar %>% filter(variable == 'ret') %>% arrange(desc(value)) %>% pull(Industry) # 将Industry转为因子,按ret的降序设置层级 df_bar$Industry <- factor(df_bar$Industry, levels = ret_rank) # 正常绘图即可 ggplot(df_bar, aes(x = Industry, y = value, fill = variable)) + geom_bar(stat = 'identity', position = 'dodge')
这样绘图时,x轴的行业就会严格按照ret组的数值从高到低排列了。
内容的提问来源于stack exchange,提问作者user19107602
相关产品推荐
相关产品推荐

