合并ggplots但固定图形的大小/比例

3

我有两个图形需要合并。使用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的最小高度/宽度组合。

2个回答

9

如果你需要的话,还有其他几种选项可供选择*

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

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


3
respect=TRUE,这就是我需要的。我想知道为什么文档里没有提到。 - MERose
1
如果你问我,这个包的作者很懒。 - baptiste
1
我必须承认,我的热情有些过早了。Plot(在您的情况下为 p)是二次的,尽管其中的两个图也是二次的。这意味着图形要小得多,而文件 plot/p 的大部分是白色边框。在最终文档中调整大小是无用的。 - MERose
我真的不太明白。你是否有一个最小可重现的示例来说明你的问题(编辑你的问题)? - baptiste
是的,我指的是正方形。对于混淆我感到抱歉。我认为问题出在我在arrangeGrob()环境中添加轴标签(这不是第一个问题版本的一部分)。 - MERose

3
你可以在输出到设备时进行控制。例如,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轴长度将是y轴长度的3/132倍(换句话说,1个x单位将占据与1个y单位相同的物理长度,但只有3个x单位和132个y单位)。试着玩一下比率的值以看看它如何工作;对于您的图表,比率大约为0.02左右可能是合适的。例如,请尝试以下代码。在这里,我将比率设置为0.1,因此现在1个x单位需要占用每个y单位的10倍的物理长度(也就是说,x轴上的0到3与y轴上的0到30具有相同的物理长度)。
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()

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接