问题描述
我想按最大OR排序变量“ test”。
structure(list(test = c("a","b","c","d","e","f","g"),OR = c(2.78,1.74,1.32,1.16,0.92,0.75,0.53),LowerLimit = c(2.11,0.96,1.11,0.74,0.61,0.52,0.4),UpperLimit = c(3.72,3.25,1.58,1.85,1.4,1.09,0.71),Group = 1:7),class = "data.frame",row.names = c(NA,-7L)
p = ggplot(data=table,aes(x = reorder (test,-OR),y = OR,ymin = LowerLimit,ymax = UpperLimit )) +
geom_pointrange(aes(col=test),size = 1.5)+
geom_hline(aes(fill=test),yintercept =1,linetype=2)+
xlab('test')+
ylab("Odd's Ratio (95% Confidence Interval)")+
geom_errorbar(aes(ymin=LowerLimit,ymax=UpperLimit,col=test),width=0.5,cex=1)+
facet_wrap(~test,strip.position="left",nrow=9,scales = "free_y") +
theme(plot.title=element_text(size=16,face="bold"),axis.text.y=element_blank(),axis.ticks.y=element_blank(),axis.text.x=element_text(face="bold"),axis.title=element_text(size=12,strip.text.y = element_text(hjust=0,vjust = 1,angle=180,face="bold"))+
coord_flip()
p
我已审查了该帖子 Order Bars in ggplot2 bar graph
我尝试了reorder命令,还尝试了创建“位置”列表的示例,但均无济于事。
解决方法
如果您先reorder
变量test
,而不是尝试在aes
函数中对数据进行突变,则可以按预期工作。
比较:
table %>%
mutate(test = reorder(test,OR)) %>%
ggplot(aes(x = test,y = OR,ymin = LowerLimit,ymax = UpperLimit )) +
geom_pointrange(aes(col = test),size = 1.5) +
geom_hline(yintercept = 1,linetype = 2) +
geom_errorbar(aes(ymin = LowerLimit,ymax = UpperLimit,col = test),width = 0.5,cex = 1) +
coord_flip() +
facet_wrap(~test,strip.position = "left",nrow = 9,scales = "free_y") +
xlab('test') +
ylab("Odds Ratio (95% Confidence Interval)") +
theme(plot.title = element_text(size=16,face="bold"),axis.text.y = element_blank(),axis.ticks.y = element_blank(),axis.text.x = element_text(face="bold"),axis.title = element_text(size=12,strip.text.y = element_text(hjust = 0,vjust = 1,angle = 180,face = "bold"))
要在-
内OR
的前面加上reorder
符号的完全相同的代码:
table %>%
mutate(test = reorder(test,-OR)) %>%
ggplot(aes(x = test,face = "bold"))