R 对子集进行排序和/或维护ggplot方面中的文件顺序
我正在使用R 对子集进行排序和/或维护ggplot方面中的文件顺序,r,sorting,ggplot2,R,Sorting,Ggplot2,我正在使用ggplot2创建一个效果大小的森林图(表示为或),根据其类型(X或Y)分面 我希望每个方面的第一行是该方面的总结效应大小(cite==“summary”),然后是每项研究的一行,按效应大小排序(我不特别关心它是上升还是下降)。虽然我可以很容易地创建一个与此对应的数据帧,但如果不对摘要效果大小进行排序,我似乎无法让它在两个方面都按顺序绘制 请假设数据点太多,无法手动指定它们的显示顺序-下面是一个最具代表性的子样本 cite <- as.factor(c("A","B","C","
ggplot2
创建一个效果大小的森林图(表示为或),根据其类型(X
或Y
)分面
我希望每个方面的第一行是该方面的总结效应大小(cite==“summary”
),然后是每项研究的一行,按效应大小排序(我不特别关心它是上升还是下降)。虽然我可以很容易地创建一个与此对应的数据帧,但如果不对摘要效果大小进行排序,我似乎无法让它在两个方面都按顺序绘制
请假设数据点太多,无法手动指定它们的显示顺序-下面是一个最具代表性的子样本
cite <- as.factor(c("A","B","C","B","A"))
or <- c(8.132075,3.475255,5.727273,4.334704,4.009901)
lowerCI <- c(4.6841118,1.5059889,-0.5582456,2.3612416,-2.6439191)
upperCI <- c(11.580039,5.444521,12.012791,6.308167,10.663721)
type <- as.factor(c("X","X","X","Y","Y"))
df <- data.frame(cite, or, lowerCI, upperCI, type)
df <- df[order(df$type, -xtfrm(df$or)), ] # Sorting within type by or
结果如下:
请注意,现在已对其进行了适当排序,但y轴标签在每个引用中仅打印一次 只需删除scales=“free”
?删除一种类型而非另一种类型中包含的引用需要一些scales=“free”
。@RomanLuštrik发布的解决方案看起来很有希望,但最终只在轴上打印每个引用标签的一个实例(即,它们不会在面上重复)。只需删除scales=“free”
?删除包含在一种类型而不是另一种类型中的引用需要一些scales=“free”
。@RomanLuštrik发布的解决方案看起来很有希望,但最终只在轴上打印每个引用标签的一个实例(即,它们不会在面上重复)。
X.row <- list(cite="Summary",or=3.506705,lowerCI=1.5375528,upperCI=5.475857,type="X")
df[nrow(df) + 1, names(X.row)] <- X.row
Y.row <- list(cite="Summary",or=4.332824,lowerCI=2.3594369,upperCI=6.306212,type="Y")
df[nrow(df) + 1, names(Y.row)] <- Y.row
df <- transform(df,cite=factor(cite,levels=unique(cite)))
plot<-ggplot(data=df, aes(y=cite, x=or, xmin=lowerCI, xmax=upperCI, shape = type)) +
geom_point(color = 'black', size=2)+
geom_errorbarh(height=.1)+
geom_point(data=subset(df,cite=='Summary'), color='black', size=5)+
facet_grid(type~., scales= 'free', space='free')+
scale_y_discrete(breaks=levels(df$cite),
labels=c(levels(df$cite)[1:3], expression(italic("Summary Effect"))))
Xdat<-subset(df, type=="X")
Ydat<-subset(df, type=="Y")
Xdat <- transform(Xdat,cite=factor(cite,levels=unique(cite)))
Ydat <- transform(Ydat,cite=factor(cite,levels=unique(cite)))
plot2<-ggplot(mapping=aes(y=cite, x=or, xmin=lowerCI, xmax=upperCI, shape = type)) +
geom_point(data=Xdat,color = 'black', size=2)+
geom_point(data=subset(Xdat,cite=='Summary'), color='black', size=7)+
geom_errorbarh(data=Xdat,height=.1)+
geom_point(data=Ydat,color = 'black', size=2)+
geom_point(data=subset(Ydat,cite=='Summary'), color='black', size=7)+
geom_errorbarh(data=Ydat,height=.1)+
facet_grid(type~., scales= 'free', space='free')+
scale_y_discrete(breaks=levels(df$cite),
labels=c(levels(df$cite)[1:3], expression(italic("Summary Effect"))))
df$type <- factor(df$type, levels = c("X","Y"))
df$cite.type <- with(df, paste(cite, type, sep = "_"))
df$cite.type <- as.factor(df$cite.type)
df <- transform(df,cite.type=factor(cite.type,levels=unique(cite.type)))
df <- transform(df,cite=factor(cite,levels=unique(cite)))
ggplot(data=df, aes(y=cite.type, x=or, xmin=lowerCI, xmax=upperCI, shape = type)) +
geom_point(color = 'black', size=2)+
geom_errorbarh(height=.1)+
geom_point(data=subset(df,cite=='Summary'), color='black', size=5)+
facet_grid(type~., scales= 'free', space='free')+
scale_y_discrete(breaks=levels(df$cite.type),
labels=c(levels(df$cite)[1:3], expression(italic("Summary Effect"))))