【问题标题】:Increasing margins of facet_grid text增加 facet_grid 文本的边距
【发布时间】:2020-12-16 15:45:51
【问题描述】:

我正在尝试制作facet_grid 图,如下例所示。其中一个方面的名称太长而无法正确显示,因此被截断。

我尝试在文本周围添加边距以正确显示完整的方面名称。但是,element_text 中的 margin 选项只允许我添加水平边距 - 文本字段的高度似乎是固定的。有没有办法也可以添加垂直边距?

library (ggplot2)    

x <- mtcars
x$cyl <- as.factor (x$cyl)
levels (x$cyl) <- c ("a", "b", "this is a very very long name")

ggplot (x, aes (x = mpg, disp)) +
  geom_point () +
  facet_grid (cyl ~ .) +
  theme (strip.text = element_text (margin = margin (30, 5, 30, 5))) # This line should increase the margins

版本信息:R 4.0.3,ggplot2 3.3.2

【问题讨论】:

    标签: r ggplot2 margins


    【解决方案1】:

    这里的问题是所有分面面板都需要具有相同的大小。如果您想保持整个绘图的大小相同并且文本大小相同,那么您只是没有足够的空间来玩了。一品脱的罐子里装不下一夸脱。

    我认为最优雅的解决方案是换行:

    levels(x$cyl) <- stringr::str_wrap(levels(x$cyl), width = 20)
    
    ggplot (x, aes (x = mpg, disp)) +
      geom_point () +
      facet_grid (cyl ~ .) +
      theme (strip.text = element_text (margin = margin (30, 5, 30, 5)))
    

    如果这对您不起作用,其他选项是常识选项:在 x 方向而不是 y 方向上刻面,或者缩短标签,或者缩小文本或增加绘图的分辨率。


    编辑

    如果您准备使用不同大小的刻面,您可以将绘图构建为ggplotGrob,然后找到您希望更改其高度的面板,并使用“npc”将其指定为总绘图高度的比例单位,像这样:

    p <- ggplot (x, aes (x = mpg, disp)) +
      geom_point () +
      facet_grid (cyl ~ .) +
      theme (strip.text = element_text (margin = margin (30, 5, 30, 5))) 
    
    b <- ggplotGrob(p)
    b$heights[11] <- unit(0.4, "npc")
    grid::grid.newpage()
    grid::grid.draw(b)
    

    【讨论】:

    • 谢谢!我喜欢换行的想法,但不幸的是,在我的用例中这并不是一个真正的选择。恐怕其他选项也一样。我正在寻找的是一种强制第三个面板具有指定最小高度的方法。
    • @karpfen 但这就是我的观点。所有面板都必须具有相同的高度。它们中最大的可以是你的地块高度的三分之一。如果您为一个设置了最小高度,那么您就是为所有三个设置了它。如果最小高度的三倍大于您可用的空间,那么您就没有足够的空间。你想改变三个面板的相对高度吗?如果不是,那么当您考虑时,您所要求的在逻辑上是不可能的。
    • 哦,我不介意它们的间距是否不规则。我也会对看起来像这样的东西感到满意:facet_grid (cyl ~ ., scales = "free", space = "free_y")。抱歉不清楚!
    • @karpfen 啊,那不一样。请参阅我的更新以了解如何实现这一点。我不认为它可以直接在ggplot中完成,但你可以调整它产生的网格对象以获得想要的结果
    【解决方案2】:

    一个选项可能是在文本中添加空格:

    library(ggplot2)
    #Code
    levels (x$cyl) <- c ("a", "b", "this is a very\n very long name")
    #Plot
    ggplot (x, aes (x = mpg, disp)) +
      geom_point () +
      facet_grid (cyl ~ .) +
      theme (strip.text = element_text(size=9, lineheight=1.5)) 
    

    输出:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 2011-02-01
      • 2021-11-24
      相关资源
      最近更新 更多