ggplot2,如何更改条带标签的位置或添加图例

ggplot2, how can I change the position of strip labels or add a legend

我在 ggplot2 中使用 facet_grid 创建了一对条形图。除了条形标签外,我已经按照自己的喜好定制了所有东西。我想出了如何使用 strip.text.y = element_blank() 关闭条带标签,并且我可以将标签移动到图表的左侧(开关)。然而,两者都不令人满意。我想将标签放在顶部或制作图例。如果我可以将它们放在每个图的顶部,我可能想删除条带背景并证明文本的位置合理,比如在每个图的右侧。我找到了对 strip.position 元素的引用,但它对我不起作用。

我试过 strip.position 但无法正常工作。事实上,在 R studio 中输入代码时,strip.position 并没有作为选项出现。

创建数据框

cage<-c(3:11)
sage<-c(2:8,10,12:16)
Age<-c(cage,sage)
c<-rep("Choptank",9)
s<-rep("Severn",13)
River<-c(c,s)
n<-c(2,35,19,4,1,52,4,3,2,1,2,39,11,5,2,57,2,1,3,4,2,2)
B<-data.frame(River,Age,n) %>% 
group_by(River,Age) %>% 
tally() %>% 
mutate(prop=n/sum(n))

条形图的主题

bartheme<- theme(panel.border = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.spacing.y=unit(1, "lines"),
axis.line = element_line(size = 1,colour = "black"),
axis.title = element_text(colour="black",
size = rel(1.5)),
plot.title = element_text(hjust = 0.5, size=14),
plot.subtitle = element_text(hjust = 0.5,size=14),
panel.background = element_rect(fill="whitesmoke"),
axis.text = element_text(colour = "black",
size = rel(1)))

多面条形图,1 个堆叠在另一个之上

Bplot <- ggplot(data = B,
aes(x = Age, y =prop))+ 
geom_bar(stat = 'identity', position = 
position_dodge(),fill="dodgerblue")+
geom_text(aes(label=round(prop,2)), vjust=-0.3, size=3.5)+
facet_grid(rows=vars(River))+
scale_y_continuous(limits=c(0,1), oob=rescale_none,expand=c(0,0))+
scale_x_continuous(breaks=c(2,3,4,5,6,7,8,9,10,11,12,13,14,15,16))

Bplot+bartheme+ggtitle("Age distribution of white 
perch")+ylab("Proportion")

我获得了预期的堆叠图,每个图的右侧都有条形标签(垂直文本)。我更喜欢将条形标签放置在每个图的顶部 - 最好对外观进行一些控制。

facet 的布局可以使用 facet_wrap 进行更精细的控制,您可以使用前缀为 strip 的主题元素来控制 facet 标签的外观。有关详细信息,请参阅 here

这是一个使用您的数据的示例,它将标签放在图表的顶部并删除了阴影,并右对齐了文本。我不确定这是否正是您要找的东西,但它应该会为您提供根据您的喜好进行调整的工具。

bartheme <- theme(panel.border = element_blank(),
                  panel.grid.major = element_blank(),
                  panel.grid.minor = element_blank(),
                  panel.spacing.y=unit(1, "lines"),
                  axis.line = element_line(size = 1,colour = "black"),
                  axis.title = element_text(colour="black", size = rel(1.5)),
                  plot.title = element_text(hjust = 0.5, size=14),
                  plot.subtitle = element_text(hjust = 0.5,size=14),
                  panel.background = element_rect(fill="whitesmoke"),
                  axis.text = element_text(colour = "black", size = rel(1)),
                  strip.background = element_blank(),
                  strip.text = element_text(hjust = 1)
)

Bplot <- 
  ggplot(data = B, aes(x = Age, y = prop)) +
    geom_bar(stat = 'identity', position = position_dodge(), fill = "dodgerblue") +
    geom_text(aes(label = round(prop, 2)), vjust = -0.3, size = 3.5) +
    facet_wrap(vars(River), ncol = 1) +
    scale_y_continuous(limits=c(0,1), oob=rescale_none,expand=c(0,0))+
    scale_x_continuous(breaks = c(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16))

Bplot + bartheme + ggtitle("Age distribution of white perch") + ylab("Proportion")