R语言 ggplot2标记位置未居中

xoshrz7s  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(101)

我想为每个图添加一个标签,理想情况下,标签应该放置在x轴的顶部和中心位置,下面是示例:

ggplot2::ggplot(mtcars) +
  ggplot2::geom_point(ggplot2::aes(mpg, wt)) +
  ggplot2::geom_smooth(ggplot2::aes(mpg, wt)) +
  ggplot2::scale_y_continuous(labels = function(x) paste0(x, " very very long label")) +
  ggplot2::labs(tag = "A", x = "mpg", y = "wt") +
  ggplot2::theme(plot.tag.position = "top")

字符串
输出如下:

我注意到,当y轴标签很长时,标签似乎位于整个面板的中心,而不是x轴的中心。如何修复它?

kyks70gy

kyks70gy1#

如果你不打算使用Map到数据的facet,你可以用一个固定的值创建一个假的facet,并使用strip.backgroundtheme元素对其进行样式化:

ggplot(mtcars) +
  geom_point(aes(mpg, wt)) +
  geom_smooth(aes(mpg, wt)) +
  scale_y_continuous(labels = function(x) paste0(x, " very very long label")) +
  facet_wrap(~ "A") +
  labs(x = "mpg", y = "wt") +
  theme(strip.background = element_rect(fill = "white"))

字符串
可能更好的选择是添加一个没有标签和断点的辅助x轴,并通过将theme上的axis.line.x.top设置为element_blank()来删除行:

ggplot(mtcars) +
  geom_point(aes(mpg, wt)) +
  geom_smooth(aes(mpg, wt)) +
  scale_y_continuous(labels = function(x) paste0(x, " very very long label")) +
  ###
  scale_x_continuous(sec.axis = dup_axis(name = "A", labels = NULL, breaks = NULL)) +
  ###
  labs(x = "mpg", y = "wt") +
  theme(axis.line.x.top = element_blank())

lg40wkob

lg40wkob2#

这里有一种替代方法,在theme中使用plot.margin来在图的顶部创建更多的空间(t = 40)。使用annotate函数,我们将标签A放置在顶部。使用y = Infvjust = -1.5,我们将顶部的标签移动到额外的边距空间,为此,我们还需要使用coord_cartesian(clip = "off"),它“允许”将注解放置在绘图区域之外。

library(ggplot2)

ggplot(mtcars) +
  geom_point(aes(mpg, wt)) +
  geom_smooth(aes(mpg, wt)) +
  scale_y_continuous(labels = function(x) paste0(x, " very very long label")) +
  labs(x = "mpg", y = "wt") +
  theme(
    plot.margin = margin(t = 40, r = 10, b = 10, l = 10)  
  ) +
  annotate("text", x = mean(range(mtcars$mpg)), y = Inf, label = "A", vjust = -1.5) +
  coord_cartesian(clip = "off")

字符串


的数据

相关问题