【问题标题】:Adjust the size of panels plotted through ggplot() and facet_grid调整通过 ggplot() 和 facet_grid 绘制的面板的大小
【发布时间】:2020-05-04 20:53:04
【问题描述】:

我有一个数据框来绘制具有相同 x 轴和不同 y 轴的多个面板。列数可能会有所不同。我使用 ggplot 和 facet_grid 来绘制这些面板。

问题在于整体情节的大小似乎相同,因此当面板出现更多时,每个面板的大小都非常小。

有没有办法固定每个面板的大小,图形的整体大小取决于列数和面板数?谢谢。

【问题讨论】:

  • 如果您在 R 终端、RStudio 或类似设备中交谈,答案是:没关系,因为 R 不控制底层画布窗口的大小,所以您无法控制那个方面。如果您使用 rmarkdown 或 sweave 并渲染为 PDF,那么 使用 knitr 块控制画布大小。如果您在网页上交谈,它可能很重要(您可以控制它),但您需要防止调整大小和流动架构。不过,无论如何,这个问题缺乏能够提供很大帮助的背景。
  • 感谢您的评论。我正在使用 Shiny 开发 UI,并希望在那里显示这样一个带有多个面板的图形。所以尺寸对我来说很重要。我是这个问题的新手,所以不确定我是否仍然错过了一些上下文。你能给我关于这个问题的任何线索吗?
  • 也许它闪亮的事实并不能真正解决我的所有问题,但是有一个能证明你的问题的代表会很有用。您可以使用“人体尺寸”来控制一些主题美学,例如,theme(plot.margin = margin(2, 2, 2, 2, "cm")),也许其他领域可以使用相同的技术。

标签: r ggplot2 facet-grid


【解决方案1】:

我很抱歉无意中自我推销,但我不久前写了一个函数来更精确地控制面板的大小。我把它放在 github CRAN 上的一个包中。我不确定它如何与闪亮的应用程序一起使用,但这是您在 ggplot2 中使用它的方式。

您可以通过为行/列设置普通数字来控制宽度/高度的相对大小。

library(ggplot2)
library(ggh4x)

df <- expand.grid(1:12, 3:5)
df$x <- 1

ggplot(df, aes(x, x)) +
  geom_point() +
  facet_grid(Var1 ~ Var2) +
  force_panelsizes(rows = 1, cols = 2, TRUE)

您还可以通过设置unit 对象来控制面板的绝对大小。请注意,如果您事先知道面板的数量,也可以为单独的行和列设置它们。

ggplot(df, aes(x, x)) +
  geom_point() +
  facet_grid(Var1 ~ Var2) +
  force_panelsizes(rows = unit(runif(12) + 0.1, "cm"), 
                   cols = unit(c(1, 5, 2), "cm"), 
                   TRUE)

reprex package (v0.3.0) 于 2020-05-05 创建

希望有所帮助。

【讨论】:

  • 自我推销是绝对有道理的——虽然我承认我一直想知道你的包裹的名字......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-20
  • 2023-03-04
  • 2017-09-30
相关资源
最近更新 更多