ggplot2: 如何在 facet_grid 图中改变 strip.text 的位置

13

您可以设置图例在绘图区域内的位置,例如:

... + theme(legend.justification=c(1,0), legend.position=c(1,0))
有没有类似简单的方法可以改变条带文本的位置(或者在分组图中改变因子水平)?
library(reshape2); library(ggplot2)

sp <- ggplot(tips, aes(x=total_bill, y=tip/total_bill)) + geom_point() +
  facet_grid(. ~ sex)

sp

enter image description here

(http://www.cookbook-r.com/Graphs/Facets_%28ggplot2%29/)

使用lattice,我会像这样使用strip.text = levels(dat$Y)[panel.number()] 和panel.text(...),但也可能会有更简洁的方法...

谢谢,Christof


2
您可以使用geom_text在图表任意位置添加文本。 - MLavoie
MLavoie,谢谢,但是我该如何获取strip.text和绘图区域(在lattice中类似于panel.number()和current.panel.limits())...我想自动化这个过程,并不需要为了这个确切的示例而知道strip.text和位置。 - ckluss
1
如果您手动设置了 scale_x_continuous 的限制,您可以预测文本可能出现的位置,并根据字符数来进行补偿以调整水平位置。 - Roman Luštrik
2个回答

14

这里有一种方法:

ggplot(tips, aes(x = total_bill, y = tip / total_bill)) +
  geom_point() +
  facet_grid(. ~ sex) +
  geom_text(aes(label = sex), x = Inf, y = Inf, hjust = 1.5, vjust = 1.5) +
  theme(
      strip.background = element_blank(),
            strip.text = element_blank()
  )
然而,这并不是移动strip.text,而是添加了一个geom_text元素并关闭了strip.backgroundstrip.text,但我认为它达到了预期的结果。

图表


1
在@JasonAizkalns的建议上稍作补充,可以在geom_text中添加check_overlap = T选项,以避免多个相同标签的叠加。
  ggplot(tips, aes(x = total_bill, y = tip / total_bill)) +
  geom_point() +
  facet_grid(. ~ sex) +
  geom_text(aes(label = sex), x = Inf, y = Inf, hjust = 1.5, vjust = 1.5, check_overlap = TRUE) +
  theme(
      strip.background = element_blank(),
            strip.text = element_blank()
  )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接