【问题标题】:Combine ggplots but fix the size/ratio of the plots合并 ggplots 但固定地块的大小/比例
【发布时间】:2014-09-28 19:30:14
【问题描述】:

我有两个要合并的情节。 arrangeGrob() 挤压它们,使新图像的大小与单独的相同。如何在保持比例/大小的同时排列它们?

require(ggplot2)
require(gridExtra)

dat <- read.csv("http://www.ats.ucla.edu/stat/data/fish.csv")

frqncy <- as.data.table(table(dat$child))#
frqncy$V1 <- as.numeric(frqncy$V1)

plot1 <- ggplot(frqncy, aes(x=V1, y= N)) +
    geom_histogram(stat="identity", binwidth = 2.5)
plot2 <- ggplot(frqncy, aes(x=V1, y= N)) +
    geom_density(stat="identity")

plot <- arrangeGrob(plot1, plot2)

Plot 看起来像

我在ggplot()arrangeGrob() 中没有找到任何固定输入比例的参数。

编辑:arrangeGrob() 中轴标签的定义会引起其他复杂情况,即

plot <- arrangeGrob(plot1, plot2, left="LHS label")

那么新文件不会自动收缩到plot1plot2的最小高度/宽度组合。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    还有其他几个选项,取决于您想要的*

    library(ggplot2)
    p = qplot(1, 1)
    grid.arrange(p, p, respect=TRUE) # both viewports are square
    grid.arrange(p, p, respect=TRUE, heights=c(1,2)) # relative heights
    
    p1 = p + theme(aspect.ratio=3)
    grid.arrange(p,p1, respect=TRUE) # one is square, the other thinner
    

    *:纵横比通常不是一个明确定义的绘图属性(除非手动设置),因为默认是将绘图扩展到绘图窗口/设备/视口定义的可用空间。

    【讨论】:

    • respect=TRUE,这就是我所需要的。我想知道为什么它不在纪录片中。
    • 包作者的懒惰,如果你问我
    • 我不得不承认我的热情还很早。 Plot(在您的情况下为 p)是二次的,尽管其中的两个图也是二次的。这意味着绘图要小得多,而大部分文件plot/p 是白色边框。在最终文档中调整大小是没有用的。
    • 我真的不明白。您是否有一个可重现的最小示例来说明您的问题(编辑您的问题)?
    • 是的,我的意思是正方形。对困惑感到抱歉。我认为问题在于我在 arrangeGrob() 环境中添加了轴标签(这不是问题的第一个版本的一部分)。
    【解决方案2】:

    您可以在输出到设备时对此进行控制。例如,一个 PDF 文件:

    pdf("plot.pdf", width=5,height=8)
    plot
    dev.off()
    

    另一个选项是使用coord_fixed(ratio=n) 在绘图本身中设置 x 和 y 坐标之间的固定比率,其中n 是 y/x 比率。这将根据每个轴的标称值范围设置 x 和 y 轴的相对物理长度。如果您使用coord_fixed(),则无论您使用何种设备尺寸进行输出,图表都将始终保持所需的纵横比。

    例如,在您的情况下,两个图表的 x 范围为 0 到 3,y 范围为 0 到 132。如果您设置 coord_fixed(ratio=1),您的图表将变得又高又瘦,因为 x 轴长度将为 3 /132 倍 y 轴长度(或者换一种说法,1 个 x 单位将占用相同的物理长度和 1 个 y 单位,但只有 3 个 x 单位和 132 个 y 单位)。玩弄 ratio 的值,看看它是如何工作的。大约 0.02 的比率可能适合您的图表。

    例如,试试下面的代码。这里我将比率设置为 0.1,所以现在 1 个 x-unit 占用每个 y-unit 物理长度的 10 倍(即 x 轴上的 0 到 3 与 0 到 30 上的物理长度相同) y 轴)。

    plot1 <-ggplot(frqncy, aes(x=V1, y= N)) +
      geom_histogram(stat="identity", binwidth = 2.5) + 
      coord_fixed(ratio=0.1)
    plot2 <- ggplot(frqncy, aes(x=V1, y= N)) +
      geom_density(stat="identity") +
      coord_fixed(ratio=0.1)
    
    plot <- arrangeGrob(plot1, plot2)
    
    pdf("plot.pdf", 5,8)
    plot
    dev.off()
    

    【讨论】:

      猜你喜欢
      • 2019-12-30
      • 1970-01-01
      • 2013-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-19
      • 1970-01-01
      • 2010-11-13
      相关资源
      最近更新 更多