[R] Arranging ggplot2 objects with ggplotGrob()

Rui Barradas ru|pb@rr@d@@ @end|ng |rom @@po@pt
Sat Jul 25 18:36:24 CEST 2020


Hello,

Inline.

Às 16:54 de 25/07/2020, H escreveu:
> On 07/24/2020 05:56 PM, Rui Barradas wrote:
>> Hello,
>>
>> I've just tried it.
>>
>> library(ggplot2)
>> #library(grid)
>> library(cowplot)
>>
>> s <- ggplot(data = subset(iris, Species == 'virginica'), aes(Sepal.Length, Sepal.Width)) + geom_point()
>> v <- ggplot(data = subset(iris, Species == 'setosa'), aes(Sepal.Length, Sepal.Width)) + geom_point()
>>
>> #g2 <- ggplotGrob(s)
>> #g3 <- ggplotGrob(v)
>> #g <- rbind(g2, g3, size = "first")
>>
>> cowplot::plot_grid(s, v, align = "h", nrow = 2, rel_heights = 2:1)
>>
>>
>> Hope this helps,
>>
>> Rui Barradas
>>
>> Às 19:57 de 24/07/2020, Felipe Carrillo via R-help escreveu:
>>> What about cowplot?
>>> https://cran.r-project.org/web/packages/cowplot/vignettes/introduction.html
>>>
>>>       On Friday, July 24, 2020, 11:51:17 AM PDT, H <agents using meddatainc.com> wrote:
>>>      On 07/24/2020 02:03 PM, Jeff Newmiller wrote:
>>>> The set of people interested in helping when you supply a minimal reproducible example is rather larger than the set of people willing to read the documentation for you (hint) and guess what aspect of alignment you are having trouble with.
>>>>
>>>> On July 24, 2020 10:46:57 AM PDT, H <agents using meddatainc.com> wrote:
>>>>> On 07/24/2020 01:14 PM, John Kane wrote:
>>>>>> <i>Well, I am not looking for help debugging my code but for
>>>>> information to better understand arranging plots vertically. The code
>>>>> above aligns them horizontally as expected.</i>
>>>>>> Sigh, we know the code works but we do not know what the plots are
>>>>> and we cannot play around with them to see if we can help you if we
>>>>> have nothing to work with.
>>>>>> On Fri, 24 Jul 2020 at 12:12, H <agents using meddatainc.com
>>>>> <mailto:agents using meddatainc.com>> wrote:
>>>>>>       On 07/24/2020 05:29 AM, Erich Subscriptions wrote:
>>>>>>       > Hav a look at the packages cowplot and patchwork
>>>>>>       >
>>>>>>       >> On 24.07.2020, at 02:36, H <agents using meddatainc.com
>>>>> <mailto:agents using meddatainc.com>> wrote:
>>>>>>       >>
>>>>>>       >> I am trying to arrange two plots vertically, ie plot 2 below
>>>>> plot 1, where I want the plots to align columnwise but have a height
>>>>> ratio of eg 3:1.
>>>>>>       >>
>>>>>>       >> My attempts so far after consulting various webpages is that
>>>>> the following code aligns them columnwise correctly but I have, so far,
>>>>> failed in setting the relative heights...
>>>>>>       >>
>>>>>>       >> g2<-ggplotGrob(s)
>>>>>>       >> g3<-ggplotGrob(v)
>>>>>>       >> g<-rbind(g2, g3, size = "first")
>>>>>>       >> g$widths<-unit.pmax(g2$widths, g3$widths)
>>>>>>       >>
>>>>>>       >> what would the appropriate statement for the relative heights
>>>>> to add here be?
>>>>>>       >>
>>>>>>       >> grid.newpage()
>>>>>>       >> grid.draw(g)
>>>>>>       >>
>>>>>>       >> Thank you!
>>>>>>       >>
>>>>>>       >> ______________________________________________
>>>>>>       >> R-help using r-project.org <mailto:R-help using r-project.org> mailing
>>>>> list -- To UNSUBSCRIBE and more, see
>>>>>>       >> https://stat.ethz.ch/mailman/listinfo/r-help
>>>>>>       >> PLEASE do read the posting guide
>>>>> http://www.R-project.org/posting-guide.html
>>>>>>       >> and provide commented, minimal, self-contained, reproducible
>>>>> code.
>>>>>>       So this is not possible without using one of those two packages?
>>>>> I got the impression I should be able to use grid.arrange to do so but
>>>>> was not able to get it to work without disturbing the width alignment
>>>>> above...
>>>>>>       ______________________________________________
>>>>>>       R-help using r-project.org <mailto:R-help using r-project.org> mailing list
>>>>> -- To UNSUBSCRIBE and more, see
>>>>>>       https://stat.ethz.ch/mailman/listinfo/r-help
>>>>>>       PLEASE do read the posting guide
>>>>> http://www.R-project.org/posting-guide.html
>>>>>>       and provide commented, minimal, self-contained, reproducible
>>>>> code.
>>>>>> -- 
>>>>>> John Kane
>>>>>> Kingston ON Canada
>>>>> No need to play around with anything. I am simply looking for
>>>>> assistance on how to use eg arrangeGrob to not only align two plots
>>>>> columnwise but also adjust their heights relative to each other rather
>>>>> than 1:1.
>>>>>
>>>>> Can arrangeGrob() be used for that?
>>>>>
>>>>>
>>>>>       [[alternative HTML version deleted]]
>>>>>
>>>>> ______________________________________________
>>>>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>>>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>>>> PLEASE do read the posting guide
>>>>> http://www.R-project.org/posting-guide.html
>>>>> and provide commented, minimal, self-contained, reproducible code.
>>> Look at https://cran.r-project.org/web/packages/egg/vignettes/Ecosystem.html where there are two mpg charts, one above the other. What would I need to add to:
>>>
>>> |library(gtable) g2 <-ggplotGrob(p2) g3 <-ggplotGrob(p3) g <-rbind(g2, g3, size = "first") g$widths <-unit.pmax(g2$widths, g3$widths) grid.newpage() grid.draw(g) |
>>>
>>> |to make the second chart 1/2 the size of the top one?|
>>>
>>> ||
>>>
>>>
>>>       [[alternative HTML version deleted]]
>>>
>>> ______________________________________________
>>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>>>         [[alternative HTML version deleted]]
>>>
>>> ______________________________________________
>>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>>
> Thank you for your example. However, this does not align the plot areas horizontally. It happens to do so in this example because the y-axis labels are the same length etc but when this is not the case, it fails.

Maybe it fails but can you give an example?
The question, as far as I understand it, is about the plots' relative 
heights, not about horizontal alignment. And (all) others have asked you 
to give a reproducible example, please don't ask us to guess a use case 
axis labels lengths (!), which is impossible to do.

Anyway, the function cowplot::plot_grid has an argument `align`. One of 
the possible values is "hv" for both horizontal and vertical alignment.

Hope this helps,

Rui Barradas

>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.


-- 
Este e-mail foi verificado em termos de vírus pelo software antivírus Avast.
https://www.avast.com/antivirus



More information about the R-help mailing list