【问题标题】:How can I adjust the size of two ggplots with a fixed aspect ratio in gridExtra?如何在gridExtra中调整两个具有固定纵横比的ggplots的大小?
【发布时间】:2021-06-19 11:00:34
【问题描述】:

我正在尝试使用ggplotgridArrange 绘制三个回归方程的结果图。但是,在尝试绘制这些回归的残差时,我注意到了一个问题。我试图在纵横比为 1 的固定坐标系上绘制这些图,因为它们都是数据集的残差,是相对于原始测量的比例残差。但是,当我在 ggExtra 中打印组合图时,我最终会发现一个图比另一个短得多,并且图的标题没有对齐。

我知道这是因为由于 coord_fixed 调用,两个图都设置为不同的宽度。但是,我不知道如何在最终图表中进行调整,因此两个图表的大小相同。我想要做的是增加较小图形的空白以使两个相同的尺寸但保持固定的 1:1: 纵横比相同。我发现包含 respect=TRUE 无法解决此问题。

下面是重现我的示例的代码。

library(gridExtra)
library(ggplot2)
data(mtcars)
lm1<-lm(disp~drat,data=mtcars)
lm2<-lm(hp~drat,data=mtcars)
lm3<-lm(disp~hp,data=mtcars)
residuals<-data.frame(lm1=residuals(lm1),lm2=residuals(lm2),lm3=residuals(lm3))
(resid2<-grid.arrange(
  ggplot(residuals,aes(lm1,lm2))+
    geom_point(size=3,shape=21,fill="gray")+
    theme_classic()+
    ggtitle("Plot1")+
    coord_fixed(),
  ggplot(residuals,aes(lm1,lm3))+
    geom_point(size=3,shape=21,fill="gray")+
    ggtitle("Plot2")+
    theme_classic()+
    coord_fixed(),
  nrow=1))

【问题讨论】:

  • 在 theme_classic 周围添加括号。这个问题对你有帮助吗? stackoverflow.com/questions/26088771/…
  • @Blacklivesmatter 我已经看到了上一个问题,这是我尝试尊重=TRUE 的地方。不幸的是,这个问题的答案似乎没有用。

标签: r ggplot2 data-visualization gridextra


【解决方案1】:

澄清后编辑: 我们可以在 plot1 中使用ylim(-150, 200)

library(gridExtra)
library(ggplot2)
data(mtcars)
lm1<-lm(disp~drat,data=mtcars)
lm2<-lm(hp~drat,data=mtcars)
lm3<-lm(disp~hp,data=mtcars)
residuals<-data.frame(lm1=residuals(lm1),lm2=residuals(lm2),lm3=residuals(lm3))
(resid2<-grid.arrange(
  ggplot(residuals,aes(lm1,lm2))+
    geom_point(size=3,shape=21,fill="gray")+
    ylim(-150, 200) +
    theme_classic()+
    ggtitle("Plot1")+
    coord_fixed(),
  ggplot(residuals,aes(lm1,lm3))+
    geom_point(size=3,shape=21,fill="gray")+
    ggtitle("Plot2")+
    theme_classic()+
    coord_fixed(),
  nrow=1))

【讨论】:

  • 这对我不起作用。我在答案中运行了确切的代码并收到错误消息“无法将p2 添加到 ggplot 对象”。此外,当我在答案中运行 gridExtra 代码时,我得到了与以前相同的情节。你知道我做错了什么吗?
  • 好的。你说的对。启动R new 后,我遇到了同样的错误。请参阅我的编辑。现在它应该可以工作了。
  • 它仍然没有做我想做的事情。我注意到通过背靠背调用这两个函数,新代码占用了整个绘图并拉伸了 y 轴。我试图向上扩展第一个 y 轴的空白区域,使其高度等于第二个,同时保持纵横比为 1。这里的代码也导致绘图轴消失。
  • 我很抱歉,但对我来说还不清楚你想要什么。扩大空白区域是什么意思(y的空白区域的哪一部分?)你想有相同的y轴刻度吗?
  • 基本上我要做的是将纵横比保持为 1:1 的长度和宽度,但只需向上和向下扩展 y 轴,以便两个图的高度相同。因此,对于原始的左图,而不是从 (150,-100) 延伸的 y 轴,它可能会转到 (200,-150),这样两个图的高度相同,但都具有相同的纵横比。
猜你喜欢
  • 2013-05-07
  • 1970-01-01
  • 2012-11-16
  • 2018-10-18
  • 2015-08-13
  • 2010-12-14
  • 2021-05-10
  • 1970-01-01
  • 2018-06-11
相关资源
最近更新 更多