将带面包装图上的条形标签移动到每个图的内部

时间:2018-11-06 19:20:44

标签: r ggplot2

这是可复制的代码:

mpg %>%
    ggplot(aes(x = year, y = cty)) +
    geom_line() +
    geom_point() +
    facet_wrap(~manufacturer) +
    theme_bw() +
    theme(panel.grid.major = element_blank(),
          panel.grid.minor = element_blank(),
          strip.background = element_blank(),
          panel.border = element_rect(color = "black"),
          strip.text.x = element_text(vjust = -3))

Reproducible Graph - Not what I wanted 我想将制造商名称移到图的内部(每个图的黑色边框内),但是当我更改vjust参数时,制造商名称被隐藏在图的后面。我该如何解决?

2 个答案:

答案 0 :(得分:3)

您可以使用annotate向每个图形添加标题,并隐藏实际的构面标题以实现此效果。

mpg %>%
  ggplot(aes(x = year, y = cty)) +
  geom_line() +
  geom_point() +
  annotate("text", x= 2004, y = 30, label =unique(mpg$manufacturer))+
  facet_wrap(~manufacturer) +
  theme_bw() +
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        strip.background = element_blank(),
        panel.border = element_rect(color = "black"),
        strip.text.x = element_blank()) 

result

我可能错了,但我不认为facet_wrap支持该功能。

答案 1 :(得分:1)

我无法找到设置空白主题元素的好方法,但我可以提供这种技巧:如果标签本质上是1)构面变量(在这种情况下为manufacturer)的不同组合,2)x轴值的中点和3)y轴值的最大值,您可以创建标签的数据框。您可以内联做为data的{​​{1}}参数,但是将其显示在单独的数据框中比较干净。

geom_text

然后将默认的试条及其背景留为空白,通常会为试条保留的空间将被删除(我猜想有一个空白可以代替试条,所以这比我想象的要好)。

library(tidyverse) mpg_labels <- mpg %>% mutate(year = mean(c(min(year), max(year))), cty = max(cty)) %>% distinct(manufacturer, year, cty) head(mpg_labels) #> # A tibble: 6 x 3 #> manufacturer year cty #> <chr> <dbl> <dbl> #> 1 audi 2004. 35 #> 2 chevrolet 2004. 35 #> 3 dodge 2004. 35 #> 4 ford 2004. 35 #> 5 honda 2004. 35 #> 6 hyundai 2004. 35 可以代替annotate来工作,如果您事先确切知道标签的位置并且不需要缩放,但是我几乎总是选择geom_text以实现可缩放性和避免硬编码任何东西。

geom_text

reprex package(v0.2.1)于2018-11-06创建