标签: gridextra

ggplot2:使用grid.arrange()作为do.call()的参数定义绘图布局

我想获得一个不平衡的情节网格,如

require(ggplot2)
require(gridExtra)

df <- data.frame(value1 = rnorm(200),
                 value2 = rnorm(200),
                 value3 = rnorm(200),
                 value4 = rnorm(200))

p1 <- ggplot(df) + geom_density(aes(x=value1))
p2 <- ggplot(df) + geom_density(aes(x=value2))
p3 <- ggplot(df) + geom_density(aes(x=value3))
p4 <- ggplot(df) + geom_density(aes(x=value4))

grid.arrange(p1, arrangeGrob(p2,p3,p4, ncol=3), heights=c(2.5/4, 1.5/4), ncol=1)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是使用了一个功能

myplot <- function(i){
  p <- ggplot(df) + geom_density(aes_string(x=i))
  return(p)
}
Run Code Online (Sandbox Code Playgroud)

和一个lapply电话

p <- lapply(c("value1","value2","value3","value4"), myplot)
do.call(grid.arrange, c(p))
Run Code Online (Sandbox Code Playgroud)

在这种情况下,grid.arrange将图分布在2×2矩阵中.但是我希望得到一个不平衡的布局

grid.arrange(p1, arrangeGrob(p2,p3,p4, ncol=3), heights=c(2.5/4, 1.5/4), ncol=1)
Run Code Online (Sandbox Code Playgroud)

r ggplot2 gridextra

14
推荐指数
1
解决办法
3万
查看次数

gridExtra 2.0.0更改标题大小

我知道gridExtra已经更新.结果,我想知道如何更改标题大小.这不再有效

   grid.arrange(a, b, c, d,ncol=2, 
      nrow=2, main=textGrob("Title", gp=gpar(fontsize=15,font=8)))
Run Code Online (Sandbox Code Playgroud)

这不再有效,main的选项已经改为top但我无法弄清楚textGrob功能来改变字体大小).有线索吗?谢谢

plot r gridextra

14
推荐指数
2
解决办法
2万
查看次数

ggplot2:绘制多个页面

我正在使用ggplot2绘制图形,我有facet_wrap制作多个图形(~51)的功能,但它们都出现在一个页面上.现在搜索后,我发现ggplot2无法在多个页面上放置图形.

有没有办法做到这一点?我看了这个问题(使用ggplot在多个页面上多个图表)并尝试了代码,但收效甚微.

这是我的图形代码,它在一个页面上生成约51个图形,使它们非常小而且难以看到,如果我可以在pdf中将每页打印到1个图形,那将是很好的:

ggplot(indbill, aes(x = prey, y = weight), tab) +
geom_polygon(aes(group = load, color = capture), fill = NA, size = 0.75) +
facet_wrap(~ individual) +
theme(axis.ticks.x = element_blank(),
    axis.text.x = element_text(size=rel(0.5)),
    axis.ticks.y = element_blank(),
    axis.text.y = element_blank()) +
xlab("") + ylab("") +
guides(color = guide_legend(ncol=2)) +
coord_radar()
Run Code Online (Sandbox Code Playgroud)

如果有人可以写一些代码并向我解释,那就太好了!

谢谢!

plot r ggplot2 radar-chart gridextra

14
推荐指数
2
解决办法
1万
查看次数

R使用viewPorts将数据表添加到ggplot图:缩放Grob

我正在尝试将数据表添加到ggplot中创建的图形中(类似于excel功能,但可以灵活地将轴更改为on)

我已经做了一些事情,并继续遇到缩放的问题所以尝试1)

library(grid)
library(gridExtra)
library(ggplot2)
xta=data.frame(f=rnorm(37,mean=400,sd=50))
xta$n=0
for(i in 1:37){xta$n[i]<-paste(sample(letters,4),collapse='')}
xta$c=0
for(i in 1:37){xta$c[i]<-sample((1:6),1)}
rect=data.frame(xmi=seq(0.5,36.5,1),xma=seq(1.5,37.5,1),ymi=0,yma=10)
xta=cbind(xta,rect)
a = ggplot(data=xta,aes(x=n,y=f,fill=c)) + geom_bar(stat='identity')
b = ggplot(data=xta,aes(x=n,y=5,label=round(f,1))) + geom_text(size=4) + geom_rect(aes(xmin=xmi,xmax=xma,ymin=ymi,ymax=yma),alpha=0,color='black')
z = theme(axis.text=element_blank(),panel.background=element_rect(fill='white'),axis.ticks=element_blank(),axis.title=element_blank())
b=b+z
la=grid.layout(nrow=2,ncol=1,heights=c(0.15,2),default.units=c('null','null'))
grid.show.layout(la)
grid.newpage()
pushViewport(viewport(layout=la))
print(a,vp=viewport(layout.pos.row=2,layout.pos.col=1))
print(b,vp=viewport(layout.pos.row=1,layout.pos.col=1))
Run Code Online (Sandbox Code Playgroud)

哪个产生了

2 ggplots

第二次尝试2)

xta1=data.frame(t(round(xta$f,1)))
xtb=tableGrob(xta1,show.rownames=F,show.colnames=F,show.vlines=T,gpar.corefill=gpar(fill='white',col='black'),gp=gpar(fontsize=12),vp=viewport(layout.pos.row=1,layout.pos.col=1))
grid.newpage()
la=grid.layout(nrow=2,ncol=1,heights=c(0.15,2),default.units=c('null','null'))
grid.show.layout(la)
grid.newpage()
pushViewport(viewport(layout=la))
print(a,vp=viewport(layout.pos.row=2,layout.pos.col=1))
grid.draw(xtb)
Run Code Online (Sandbox Code Playgroud)

哪个产生了

使用直表grob和grid.draw

最后3)是

grid.newpage()
print(a + annotation_custom(grob=xtb,xmin=0,xmax=37,ymin=450,ymax=460))
Run Code Online (Sandbox Code Playgroud)

哪个产生了

使用annotate_custom

其中选项2将是最好的,如果我可以将tableGrob缩放到与绘图相同的大小,但我不知道如何做到这一点.关于如何进一步采取行动的任何指示?- 谢谢

r viewport ggplot2 gridextra r-grid

13
推荐指数
2
解决办法
8710
查看次数

如何在gridExtra中通过arrange.grid创建的图表周围添加边框,其中包含一组ggplot2散点图

我正在使用以下代码:

# Libs
require(ggplot2); require(gridExtra); require(grid)

# Generate separate charts
chrts_list_scts <- list()

# Data
data("mtcars")

# A
chrts_list_scts$a <- ggplot(mtcars) +
  geom_point(size = 2, aes(x = mpg, y = disp,
                           colour = as.factor(cyl))) +
  geom_smooth(aes(x = mpg, y = disp),
              method = "auto") +
  xlab("MPG") +
  ylab("Disp") +
  theme_bw() +
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        legend.position = "none")

# B
chrts_list_scts$b <- ggplot(mtcars) +
  geom_point(size = 2, aes(x = mpg, y = drat,
                           colour = as.factor(cyl))) +
  geom_smooth(aes(x …
Run Code Online (Sandbox Code Playgroud)

r border scatter-plot ggplot2 gridextra

13
推荐指数
1
解决办法
3913
查看次数

R抑制网格表中的rownames

我可以使用gridExtra生成一个表:

例如:

    library(gridExtra)
    grid.table(head(iris))
Run Code Online (Sandbox Code Playgroud)

但这会产生一个rownames列1:6.有没有办法能够抑制rownames列,以便它不会出现在表中?

谢谢您的帮助.

r gridextra

12
推荐指数
1
解决办法
5702
查看次数

将gridExtra :: grid.arrange的输出存储到对象中

我将多个绘图放在一个图像中,gridExtra::grid.arrange并且希望可以选择将组合绘图保存为可以作为返回对象列表的一部分从函数内返回的对象.理想情况下,我想在不打印绘图对象的情况下执行此操作.

下面的代码创建了两个图,将它们组合在一起grid.arrange,并尝试将结果保存到x.但是,x评估NULL并打印图表.可以使用关闭grid.arrange我的文档arrangeGrob和建议绘图plot=FALSE,但是当我尝试这个因为FALSE不是grob对象时我收到错误.

对我不理解的任何建议?

# R under development
# Windows 7 (32 bit)
# ggplot2 1.0.0
# gridExtra 0.9.1

p1 <- ggplot(mtcars, aes(x=factor(cyl), y=mpg)) + geom_boxplot()

p2 <- ggplot(mtcars, aes(x=factor(cyl), y=wt)) + geom_boxplot()

x <- gridExtra::grid.arrange(p1, p2)

x
Run Code Online (Sandbox Code Playgroud)

根据评论,我正在添加此编辑.当我尝试时arrangeGrob,我根本没有输出.

> gridExtra::arrangeGrob(p1, p2)
> print(gridExtra::arrangeGrob(p1, p2))
Error: No layers in plot
> x <- gridExtra::arrangeGrob(p1, p2)
> x
Error: No layers in …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 gridextra

12
推荐指数
1
解决办法
6733
查看次数

减少grid.arrange图之间的空间

我在这里问了一个关于电网排列的问题并得到了很好的回应.我想现在减少绘图之间的空间但是会出错.首先,我介绍有效的代码,然后是错误代码(我尝试过的).我实际上找不到grid.arrange并且一直认为它来自gridExtra但我可能是不正确的.

所以2部分:

  1. 如何通过网格排列减少绘图之间的空间
  2. 我在哪里可以找到有关的文档grid.arrange(Baptiste我知道你维护gridExtra所以如果我没有按照预期的方式使用它,请纠正我的想法或使用包.)

好代码坏空间

require(ggplot2);require(gridExtra)
A <- ggplot(CO2, aes(x=Plant)) + geom_bar() +
    coord_flip() + ylab("")
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)
 grid.arrange(gA, gB, ncol=1)
Run Code Online (Sandbox Code Playgroud)

糟糕的代码(我的尝试)

require(ggplot2);require(gridExtra)
A <- ggplot(CO2, aes(x=Plant)) + geom_bar() +
    coord_flip() + ylab("") + theme(plot.margin= unit(1, "cm"))
B <- ggplot(CO2, aes(x=Type)) + geom_bar() +coord_flip() 


 gA <- ggplot_gtable(ggplot_build(A))
 gB <- ggplot_gtable(ggplot_build(B))
 maxWidth …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 gridextra

11
推荐指数
1
解决办法
1万
查看次数

R - 如何为复杂的ggplot图像分配屏幕空间

我正在尝试编写一个脚本,在单个图像中生成四个不同的图.具体来说,我想尽可能地重新创建这个图形:

复杂情节

我当前的脚本生成了四个类似于这些的图,但我无法弄清楚如何相应地分配屏幕空间.我想要:

  1. 修改图的高度和宽度,使四个都有均匀的宽度,一个比其他高度均匀的高度高一些
  2. 通过坐标定义图例的位置,以便我可以有效地使用屏幕空间
  3. 根据需要明确地修改我的图像的整体形状(也许我需要它在某个点更接近方形)

生成一些数据

pt_id = c(1:279) # DEFINE PATIENT IDs
smoke = rbinom(279,1,0.5) # DEFINE SMOKING STATUS
hpv = rbinom(279,1,0.3) # DEFINE HPV STATUS
data = data.frame(pt_id, smoke, hpv) # PRODUCE DATA FRAME
Run Code Online (Sandbox Code Playgroud)

添加解剖学站点数据

data$site = sample(1:4, 279, replace = T)
data$site[data$site == 1] = "Hypopharynx"
data$site[data$site == 2] = "Larynx"
data$site[data$site == 3] = "Oral Cavity"
data$site[data$site == 4] = "Oropharynx"
data$site_known = 1  # HACK TO FACILITATE PRODUCING BARPLOTS
Run Code Online (Sandbox Code Playgroud)

添加变异频率数据

data$freq = sample(1:1000, 279, replace …
Run Code Online (Sandbox Code Playgroud)

plot r ggplot2 gridextra

11
推荐指数
1
解决办法
616
查看次数

如何完美地对齐不等数量的图(ggplot2,gridExtra)

我想完美地对齐这些情节:

未对齐的情节

这是R代码:

library(tidyverse)
library(gridExtra)
groupes <- tribble(~type, ~group, ~prof, ~var,
                   1,1,1,12,
                   1,1,2,-24,
                   1,2,1,-11,
                   1,2,2,7,
                   2,1,1,10,
                   2,1,2,5,
                   2,2,1,-25,
                   2,2,2,2,
                   2,3,1,10,
                   2,3,2,3,
                   3,1,1,10,
                   3,1,2,-5,
                   3,2,1,25,
                   3,2,2,2,
                   3,3,1,-10,
                   3,3,2,3,
                   3,4,1,25,
                   3,4,2,-18)


hlay <- rbind(c(1,2,3),
              c(1,2,3),
              c(NA,2,3),
              c(NA,NA,3))

p1 <-  groupes %>% filter(type==1) %>% ggplot(aes(prof,var)) + geom_col() + facet_wrap(~group,ncol=1) +
  coord_cartesian(ylim=c(-25,25)) +
  labs(title="type 1",x="",y="")
p2 <-  groupes %>% filter(type==2) %>% ggplot(aes(prof,var)) + geom_col() + facet_wrap(~group,ncol=1) +
  coord_cartesian(ylim=c(-25,25)) +
  labs(title="type 2",x="",y="")
p3 <-  groupes %>% filter(type==3) %>% ggplot(aes(prof,var)) + geom_col() + facet_wrap(~group,ncol=1) +
  coord_cartesian(ylim=c(-25,25)) + …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 gridextra

11
推荐指数
1
解决办法
346
查看次数

标签 统计

gridextra ×10

r ×10

ggplot2 ×8

plot ×3

border ×1

r-grid ×1

radar-chart ×1

scatter-plot ×1

viewport ×1