r - 如何使用不同的 y 轴文本长度获得相同的面板宽度

标签 r ggplot2

我正在通过一个循环绘制数百个图。每个图都有不同的参数,这导致 y 轴标签的范围从一些图中的 0.1-0.9 到其他图中的 100-1000。现在,绘制它们时,绘图的总大小保持不变,这意味着当 y 轴标签较长时,y 轴的位置向右移动,或者当标签很短。

我想固定所有地 block 的面板宽度。本质上,如果标签很短,y 轴标题的左侧会有空白。

我的问题与此有些相似,但我对 gtable 的了解不足,无法根据需要修改解决方案。 How achieve identical facet sizes and scales in several multi-facet ggplot2 graphics?

玩具示例:

df <- data.frame(x = c(rnorm(10, 0.1, 0.1), rnorm(10, 1000, 100)), 
y = c(rnorm(10, 0.1, 0.1), rnorm(10, 10000, 100)), 
name = c(rep(1, 10), rep(2, 10)))

for(i in 1:2){

p <- ggplot(df[df$name == i,]) +
    geom_point(aes(x = x, y = y))

filename <- paste("fig", i, ".jpg", sep = "")
jpeg(filename, width = 6.5, height = 5.5, units = "in", pointsize = 12, quality = 100, res = 500)
print(p)
dev.off()
    }

最佳答案

您可以使用完整数据集生成一个虚拟图“p”,使用“g=ggplotGrob(p)”将其转换为 gtable,存储其宽度“w=g$widths”,并将每个图存储在循环将 gtable 的宽度替换为“w”。

p <- ggplot(df) +
  geom_point(aes(x = x, y = y))
g <- ggplotGrob(p)
w <- g$widths

pdf("test.pdf")
for(i in 1:2){

  p <- ggplot(df[df$name == i,]) +
    geom_point(aes(x = x, y = y))
  g <- ggplotGrob(p)
  g$widths <- w
  grid::grid.newpage()
  grid::grid.draw(g)
}
dev.off()

enter image description here

关于r - 如何使用不同的 y 轴文本长度获得相同的面板宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34694632/

相关文章:

r - 绘制大型数据集的堆积条形图并在 r 中设置绘图的条形限制

r - 如何在R中的嵌套列表中取元素的并集

r - 组合ggplot2对象时在拼凑中设置轴限制

r - 使用 ggplot 叠加箱形图并添加线条

r - 在 R 中,如何根据另一个数据框中的范围对一个数据框中的值进行分类?

r - 如何将 Highcharter 图保存为本地磁盘上的图像?

r - 列表中每个数据帧的最长更改运行时间

r - 如何使用 ggplot 在 R 中创建不均匀的 facet_wrap 网格?

r - 从数据框中的点创建 shapefile

r - 照片与 r 中的图形对齐