标签: gridextra

使用gtable对象arrangeGrob

/sf/answers/930711631/,我学会了如何安排两个具有对齐绘图区域的图.

我的问题是:我怎样才能得到被安排的地块的对象?

例:

require(ggplot2)
require(gridExtra)

A <- ggplot(CO2, aes(x=Plant)) + geom_bar() +coord_flip() 
B <- ggplot(CO2, aes(x=Type)) + geom_bar() +coord_flip() 

gA <- ggplot_gtable(ggplot_build(A))
gB <- ggplot_gtable(ggplot_build(B))
maxWidth = grid::unit.pmax(gA$widths[2:3], gB$widths[2:3])
gA$widths[2:3] <- as.list(maxWidth)
gB$widths[2:3] <- as.list(maxWidth)

## works:
grid.arrange(gA, gB, ncol=1)

## does not work:
theplot <- grid.arrange(gA, gB, ncol=1, plot=FALSE)
Run Code Online (Sandbox Code Playgroud)

r ggplot2 gridextra

4
推荐指数
1
解决办法
3922
查看次数

将ggplot图设置为在点图行之间具有相同的x轴宽度和相同的空间

更新了问题以纳入已在SO上回答的部分解决方案

我正在使用ggplot2创建几个图并将图gridExtra组合成一个图,其中包含多个面板,所有图都在一列中.我的问题是我不能让点图行之间的空间在两个图中都是一致的.

在此输入图像描述

library(ggplot2)
# data
  dat1 <- data.frame(VARIABLES=c("Item 1", "Item 2 is a little longer"),
                     est=c(.3, .5),
                     min=c(.2, .4),
                     max=c(.4, .7))
  dat2 <- data.frame(VARIABLES=c("Item 3", 
                                 "Item 4 is even longer if you can believe it",
                                 "And there is a third item",
                                 "And a fourth item"),
                     est=c(.3, .5, .3, .5),
                     min=c(.2, .4, .2, .4),
                     max=c(.4, .7, .4, .7))
  dat <- c("dat1", "dat2")
  labs <- c("Plot 1", "Plot2")
# create plots
  count <- 1
  for (i in dat) …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 gridextra

4
推荐指数
1
解决办法
3495
查看次数

控制由R markdown中的ggplot循环生成的每个pdf页面的图形的大小和数量

我想使用R markdown生成一个pdf文档,以显示在for循环中使用ggplot创建的一系列图.是否可以控制每页上的绘图数量,例如,每页有2 X 2的绘图网格?

我想保持灵活性,以便我可以更改图形的总数,以便它在适当数量的页面上分割.

我在下面尝试使用ggplot2和gridExtra包,但我无法控制每页的图形数量,似乎只想将它们压缩到一个sinlge页面.我已经尝试在grid.arrange中更改ncol,nrow,height,width参数但它似乎没有帮助.

    ---
    title: "ggplot Layout"
output: pdf_document
    ---

    ```{r,figure2 fig.height=8, fig.width=6,echo=FALSE,message=FALSE}


    library(ggplot2)
    library(gridExtra) 

    graphlist<-list()
    count <- 1
    colnums<-c(1,5,6,7,8,9,10)

    for (i in colnums) {
    plot.x.name<-names(diamonds[i])
    p <- ggplot(data=diamonds,aes_string(x = plot.x.name)) + geom_histogram() 
    graphlist[[count]]<-p
    count <- count+1

    }

    do.call("grid.arrange",c(graphlist,ncol=2))



    ```
Run Code Online (Sandbox Code Playgroud)

我正在寻找的东西的类型由此代码(改编自http://kbroman.github.io/knitr_knutshell/pages/figs_tables.html)证明 ,但不幸的是,这不适用于ggplot.

---
title: "Example Layout"
output: pdf_document
---


```{r bunch_o_figs,fig.height=8, fig.width=6, message=FALSE,echo=FALSE}
n <- 100
x <- rnorm(n)
par(mfrow=c(2,2), las=1)
for(i in 1:20) {
  y <- i*x + rnorm(n)
  plot(x, y, main=i) …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 pandoc knitr gridextra

4
推荐指数
1
解决办法
4038
查看次数

R gridExtra 2.0.0:tableGrob垂直和水平填充

我想知道如何在 gridExtra 2.0.0 中执行以前版本中可以执行的操作来更改表格宽度/高度填充,例如:

grid.arrange(tableGrob(mtcars,padding.h=unit(1,"mm"),padding.v=unit(1,"mm")))
Run Code Online (Sandbox Code Playgroud)

(抱歉,我无法测试上面的代码,因为我没有安装旧版本的 gridExtra)

我不想缩小文本,只是想将所有内容收紧在一起,以便表格适合我将其放在 PDF 页面上的位置。

我可以看到“widths”属性在每个条目上都有“+4mm”,但我不知道如何将它们更改为+2mm

当然,如果有一个我"padding"可以更改的简单属性,我会更愿意。

我的问题与此类似。

r gridextra

4
推荐指数
1
解决办法
4335
查看次数

marrangeGrob给出了nrow的错误

我正在尝试使用for循环创建一堆ggplot2图,然后将它们保存在多页pdf文档中,而我遇到了marrangeGrob问题.这是一些示例代码:

 Plots <- list()
 Plots[[1]] <- qplot(mtcars$mpg, mtcars$wt)
 Plots[[2]] <- qplot(mtcars$cyl, mtcars$wt)
 Plots[[3]] <- qplot(mtcars$mpg, mtcars$qsec)
 Plots[[4]] <- qplot(mtcars$cyl, mtcars$drat)

 # install.packages("gridExtra", dependencies = TRUE)
 library(gridExtra)

 MyPlots <- do.call(marrangeGrob, c(Plots, nrow = 1, ncol = 2))
 ggsave("My plots on multiple pages.pdf", MyPlots)
Run Code Online (Sandbox Code Playgroud)

我过去使用过类似版本的do.call(marrangeGrob...线程并让它们工作,但现在,当我尝试执行该行时,我收到此错误:Error: nrow * ncol >= n is not TRUE.类似于以前的代码工作的事实使我认为其中一个包中的某些内容已经更新.对于如何解决这个问题,有任何的建议吗?

r ggplot2 gridextra r-grid

4
推荐指数
1
解决办法
1508
查看次数

向 R 中的刻面图添加刻度线

我希望在刻面图中添加刻度线。例如,对于这样的分面图:

require(ggplot2)

p <- ggplot(mpg, aes(displ, hwy)) + 
     geom_point() + 
     theme_minimal() +
     geom_hline(yintercept=10, linetype="solid") +
     geom_vline(xintercept=1.0, linetype="solid") +
     scale_x_continuous(limits=c(1,8), expand =c(0,0), 
     breaks = rep(2:7)) +
     scale_y_continuous(limits = c(10, 50), expand = c(0,0), 
     breaks = c(20,30,40)) +
     facet_wrap(~cyl) +   
     theme(panel.margin.x=unit(1.2, "lines"),
     panel.margin.y=unit(1.2, "lines"))
p
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我希望添加刻度线,使其看起来像这样(请注意,虽然刻度线已添加到所有方面,但刻度标签仅显示在左侧和底部方面):

在此处输入图片说明

我试过使用该annotation_custom函数向轴添加线条格子。但是我的尝试不起作用。

require(gridExtra)
require(grid)   
x.breaks = rep(2:7)
y.breaks = c(20,30,40)

for (i in 1:length(x.breaks))   {
  p = p + annotation_custom(grob = linesGrob(y = unit(c(0, 5), "npc"),
                       gp=gpar(col= "black")),  
                       xmin = x.breaks[i], 
                       xmax = x.breaks[i], 
                       ymin …
Run Code Online (Sandbox Code Playgroud)

r facet ggplot2 gridextra r-grid

4
推荐指数
1
解决办法
1737
查看次数

在多个页面上使用grid.arrange或通过layout_matrix使用marrangeGrob

我想在多个页面上使用以下layout_matrix布置图。

在此处输入图片说明

代表 例如

library(gridExtra)
library(ggplot2)

layout <- rbind(c(1,2,3,4),
                    c(1,2,3,4),
                    c(1,2,3,4),
                    c(5,5,5,5))
p <- list()
for(i in 1:15) {
    ifelse(i %% 5 > 0,
        p[[i]] <- ggplot(mtcars, aes(wt, mpg)) + geom_point() + ggtitle(paste("plot:",i)),
        p[[i]] <- tableGrob(mtcars[5:7,],rows = NULL)
    )
}
Run Code Online (Sandbox Code Playgroud)

如果我只有一页:(简单)

grid.arrange(grobs=p[1:5],layout_matrix=layout)
Run Code Online (Sandbox Code Playgroud)

如果我要多个页面:(我松开了所有图案)

marrangeGrob(grobs=p,nrow=4,ncol=2)
Run Code Online (Sandbox Code Playgroud)

请帮助我提供一个通用解决方案,使多个页面上都有一个layout_matrix。

r ggplot2 gridextra r-grid

4
推荐指数
1
解决办法
3848
查看次数

增加 tableGrob 列标题大小和单元格大小

有没有办法增加tableGrob项目中列名的单元格?

library(grid)
d <- head(iris, 3)
g <- tableGrob(d)
grid.newpage()
grid.draw(g)
Run Code Online (Sandbox Code Playgroud)

默认:

在此处输入图片说明

我想要实现的目标(这是在 photoshop 中完成的): 在此处输入图片说明

任何帮助深表感谢。

r gridextra grob

4
推荐指数
1
解决办法
1889
查看次数

在 grid.arrange 的左上角找到标题

我有两个与gridExtra::grid.arrange. 我可以用top参数在它们上面加上一个标题。问题是,我被要求在情节的左上角找到标题。

一个可重现的例子:

library(ggplot2)
library(gridExtra)

p1 <- qplot(1:20)
p2 <- qplot(30, 35)
grid.arrange(p1, p2, nrow = 1, top = "Title")
Run Code Online (Sandbox Code Playgroud)

产生

在此处输入图片说明

但我需要的是:

在此处输入图片说明

我读了好几次?arrangeGrob文件(我认为这是我的答案),但还没有想出如何实现它。

r gridextra grob

4
推荐指数
1
解决办法
3565
查看次数

如何使用tableGrob显示表标题?

考虑这个例子

library(gridExtra)
library(grid)

d1 <- head(iris[,1:3]) %>% as_tibble()
d2 <- head(iris[,2:5]) %>% as_tibble()

grid.arrange(tableGrob(d1),
             tableGrob(d2))
Run Code Online (Sandbox Code Playgroud)

这使 在此处输入图片说明

真的很好,但是我缺少数据框的标题!如何将它们自动添加到图片中?

谢谢!

r gridextra grob

4
推荐指数
1
解决办法
328
查看次数

标签 统计

gridextra ×10

r ×10

ggplot2 ×6

grob ×3

r-grid ×3

facet ×1

knitr ×1

pandoc ×1