这是可复制的代码:
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))
我想将制造商名称移到图的内部(每个图的黑色边框内),但是当我更改vjust
参数时,制造商名称被隐藏在图的后面。我该如何解决?
答案 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())
我可能错了,但我不认为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创建