ggplot2分组点须图如何交换不同数据集类别的展示位置
解决方法
ggplot中分组元素的展示顺序由分类变量的因子水平(levels)决定,默认按照字母顺序排列,调整data列的因子顺序即可交换两个数据集的展示位置,操作如下:
- 首先修正你示例数据构造的笔误:原代码构建数据框时引用的变量名和实际定义的不一致,修正后的数据构造代码为:
term <- c("male", "male", "female", "female") estimate <- c(1.5, 2.1, 1.1, 1.3) conf.low <- c(0.2, 1.1, 0.9, 0.3) conf.high <- c(1.9, 2.2, 1.6, 1.6) data <- c("Africa", "Asia", "Africa", "Asia") # 修正变量名错误 df <- data.frame(term, estimate, conf.low, conf.high, data)
- 方法1:直接修改原数据中
data列的因子水平顺序,逻辑更清晰,优先推荐
# 手动指定因子水平顺序,排在前面的水平在dodge时会优先展示在左侧(coord_flip后为上侧) df$data <- factor(df$data, levels = c("Asia", "Africa"))
修改后直接运行你原来的ggplot代码,即可看到两个数据集的位置已经交换。
- 方法2:不需要修改原数据,直接在ggplot代码中添加颜色尺度的limits参数调整顺序
在你原有的ggplot代码末尾新增一行scale_color_discrete(limits = c("Asia", "Africa"))即可,完整代码如下:
ggplot(df, aes(term, estimate, color=data)) + theme_bw() + geom_errorbar(aes(ymin=conf.low, ymax=conf.high), width=0, size=1.3, position = position_dodge(width = 0.5)) + labs(x ="", y = "Estimate")+ geom_point(size=4, position = position_dodge(width = 0.5)) + coord_flip() + # 新增这行调整分组顺序 scale_color_discrete(limits = c("Asia", "Africa"))
如果需要同时自定义两个分组的颜色,可以将scale_color_discrete替换为scale_color_manual,示例:
scale_color_manual(values = c("Asia" = "red", "Africa" = "blue"), limits = c("Asia", "Africa"))
内容的提问来源于stack exchange,提问作者vfdgfhtrg11
相关产品推荐
相关产品推荐

