gpt4 book ai didi

r - 在ggplot2中获取绘图区域的宽度

转载 作者:行者123 更新时间:2023-12-04 04:48:27 25 4
gpt4 key购买 nike

有没有办法在网格窗口中获取绘图区域的宽度?例如,如果 plot.margin更改或 y 轴标签的字体大小增加。是隐藏在 str(p) 中的某处?

任何尺寸测量都可以。我需要能够测量不同场景下绘图区域宽度的相对变化,例如 y 轴标签的字体大小的变化。

enter image description here

df = data.frame(x = (1:3),One=c(12, 8, 13),Two=c(13, 7, 11),Three=c(11, 9, 11))
df.melt = melt(df, id.vars="x")

p = ggplot(df.melt, aes(x=x, y=value, color=variable)) +
geom_line() +
coord_cartesian(xlim=c(min(df.melt$x),max(df.melt$x))) +
theme(legend.position="none", plot.margin = unit(c(1, 4, 1, 1), "cm"))
p

更新 - 澄清:请帮我计算 a/b .

enter image description here
p = ggplot(df.melt, aes(x=x, y=value, color=variable)) + 
geom_line() + coord_cartesian(xlim=c(min(df.melt$x),max(df.melt$x))) +
theme(legend.position="none")

p1 = p + theme(plot.margin=unit(c(1,1,1,1),"cm"), axis.text.y=element_text(size=10))
p2 = p + theme(plot.margin=unit(c(1,1,1,2),"cm"), axis.text.y=element_text(size=30))
grid.arrange(p1, p2, ncol=2)

最佳答案

ggplot2 中的绘图使用网格图形。已制作的图形场景
使用 grid 图形包由 grobs 和 viewports 组成。

您可以使用网格调试 用于检查 grobs 的包装。

  • showGrob 显示用于绘制场景的 grobs 的位置和名称
          showGrob()
  • 获取 grob 的 gpath
      sceneListing <- grid.ls(viewports=T, print=FALSE)
    do.call("cbind", sceneListing)

    name gPath
    [1,] "ROOT" ""
    [2,] "GRID.gTableParent.45019" ""
    [3,] "background.1-5-6-1" "GRID.gTableParent.45019"
    [4,] "spacer.4-3-4-3" "GRID.gTableParent.45019"
    [5,] "panel.3-4-3-4" "GRID.gTableParent.45019"
    [6,] "grill.gTree.44997" "GRID.gTableParent.45019::panel.3-4-3-4"
  • 取回 gorb
    h <- grid.get(gPath="GRID.gTableParent.45019")
  • 获取 h 属性(例如)
    h$layoutvp$width

  • 应用:
    grid.get('x',grep=TRUE,global=T)
    (polyline[panel.grid.minor.x.polyline.21899], polyline[panel.grid.major.x.polyline.21903], gTableChild[axis-l.3-3-3-3], gTableChild[axis-b.4-4-4-4], gTableChild[xlab.5-4-5-4])
    > grid.get('x',grep=TRUE,global=T)[[3]]
    gTableChild[axis-l.3-3-3-3]
    > xx <- grid.get('x',grep=TRUE,global=T)[[3]]
    > grobWidth(xx)
    [1] sum(1grobwidth, 0.15cm+0.1cm)

    关于r - 在ggplot2中获取绘图区域的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13867325/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com