Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 对子集进行排序和/或维护ggplot方面中的文件顺序_R_Sorting_Ggplot2 - Fatal编程技术网

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"))))