R语言哑铃图分面中统一垂直轴条件排序的实现方法
解决哑铃图分面垂直轴排序一致的问题
我来帮你搞定这个问题!要让两个分面的垂直轴(Condition)保持相同的排序,核心是先固定Condition列的因子水平顺序,这样ggplot就会严格按照你指定的顺序渲染y轴,不会因为分面而改变。
具体解决步骤:
- 先把
Condition的因子水平重新设置为你想要的("IPS", "CTR", "CEN"),覆盖数据里原来的默认顺序 - 绘图时保持其他代码不变,两个分面就会统一使用这个排序了
修改后的完整代码:
# 先重新设置Condition的因子顺序 data10 <- data10 %>% mutate(Condition = factor(Condition, levels = c("IPS", "CTR", "CEN"))) # 运行绘图代码 library(tidyverse) library(ggplot2) library(rlang) library(utils) library(data.table) library(dumbbell) dumbbell::dumbbell(data10, id="Condition", key="Group", leg = "Trial block", column1 = "EE_102", column2="EE_104", delt=1, lab1="Pretest", lab2="Posttest", p_col1 = "black", p_col2 = "grey40", textsize = 3, segsize = 1.5, pointsize = 2.5, title = "Change in Endpoint error (cm)") + xlim(5.5,8.5) + facet_wrap( Group ~., scales="free", ncol=1) + theme(axis.text.x = element_text(size = 11,face="bold"), axis.text.y = element_text(size = 10, face = "bold")) + theme(legend.position="right") + annotate('text', x = 2.8, y = "IPS", label="*", size =6)
原理说明:
在R中,离散变量的显示顺序由其因子水平的顺序决定。原来的数据里Condition的因子水平是c("CEN", "IPS", "CTR"),所以绘图时会按这个默认顺序排列。我们手动指定新的水平顺序后,不管是哪个分面,y轴都会严格遵循IPS → CTR → CEN的顺序展示啦。
内容的提问来源于stack exchange,提问作者Reuben Newton Addison




