如何在R中自定义分组条形图的分组与图例排序?
解决ggplot分组条形图排序问题
要让分组和图例按before、during、after的顺序显示,核心是手动指定time因子的水平顺序,而非依赖默认的字母排序规则。
修改步骤
把原代码中df$time = as.factor(df$time)这一行,替换为手动定义因子水平的代码,明确指定你需要的顺序:
df$time = factor(df$time, levels = c("before", "during", "after"))
修改后的完整代码
df <- data.frame(time = c("after","before","during","before","after","before","during","after","after","during", "during","after","before","during","before"), variable = c("granny", "red del", "other", "golden", "star", "granny", "red del", "other", "golden", "star", "granny", "red del", "other", "golden", "star"), value = c(34,66,7,12,99,35,66,82,55,48, 27,55,82,42,26)) # 手动指定time因子的水平顺序 df$time = factor(df$time, levels = c("before", "during", "after")) df$variable = as.factor(df$variable) ggplot(df, aes(x = variable, y = value, fill = time)) + geom_bar(position='dodge', stat='identity') + theme_minimal() + labs(x=' ', y=' ', title=' ') + theme(plot.title = element_text(hjust=0.5, size=20, face='bold')) + theme_bw() + theme(axis.line = element_line(color='black'), plot.background = element_blank(), panel.grid.minor = element_blank(), panel.grid.major = element_blank())
原理说明
默认as.factor()函数会按字母顺序为因子水平排序,所以after会排在最前。手动设置levels参数后,ggplot会严格遵循你指定的顺序渲染分组条形和图例。
内容的提问来源于stack exchange,提问作者ithoughtso
相关产品推荐
相关产品推荐

