分面ggplot中轴文本的条件格式

时间:2017-05-17 00:46:12

标签: r ggplot2

我试图通过几种研究制作一个效果大小的森林图,其类型(X或Y)可以表示。数据集包括表示类型X研究的摘要统计数据的行和由study=="Summary"指定的类型Y的研究。

study <- as.factor(c("A","B","C","A","B","Summary","Summary"))
mean  <- c(1.29,0.76,2.43,1.68,1.22,1.7,0.76) 
lowerCI <- c(0.84,0.50,1.58,1.1,0.8,1.11,0.50)
upperCI <- c(1.95,1.16,3.67,2.54,1.85,2.56,1.16)
type <- as.factor(c("X","X","X","Y","Y","X","Y"))

df <- data.frame(study, mean, lowerCI, upperCI, type)
df$study <- as.factor(df$study)

我想为汇总效果大小加粗轴刻度标签。出于某种原因,当我进行子集时,使用ifelse语句不起作用。在此示例代码中,只有类型X的摘要标签以粗体显示,而两者都应以粗体显示。在我真实的,更复杂的代码中,摘要标签都没有粗体。

library(ggplot2)
plot <- ggplot(data=df, aes(y=study, x=mean, xmin=lowerCI, xmax=upperCI, shape = type)) +
  geom_point(color = 'black', size=2)+
  geom_errorbarh(height=.1)+
  geom_point(data=subset(df,study=='Summary'), color='black', size=5)+
  facet_grid(type~., scales= 'free', space='free')+
  theme(axis.text.y= element_text(face=ifelse(levels(df$study)=="Summary","bold","plain")))
print(plot)

似乎罪魁祸首是scales='free'代码,因为如果我只删除它或将其更改为scales='free_x',则摘要适当加粗两次。但是,因为我想删除一个子集而不是另一个子集中的冗余行(在本例中为研究C),我需要包含此代码。

有解决方法吗?

1 个答案:

答案 0 :(得分:3)

您可以使用scale_y_discrete为所有方面格式化给定刻度标签的每个实例,方法是将所需的labels值(包括格式代码)分配给相应的breaks值:

ggplot(data=df, aes(y=study, x=mean, xmin=lowerCI, xmax=upperCI, shape = type)) +
  geom_point(color = 'black', size=2)+
  geom_errorbarh(height=.1)+
  geom_point(data=subset(df,study=='Summary'), color='black', size=5)+
  facet_grid(type~., scales= 'free', space='free') +
  scale_y_discrete(breaks=levels(df$study),
                   labels=c(levels(df$study)[1:3], expression(bold("Summary"))))

enter image description here