我正在尝试绘制多个绘图,使用ggplot2它们进行排列grid.arrange().由于我设法找到某人描述我遇到的确切问题,因此我引用了链接中的问题描述:
当我使用ggsave()后grid.arrange(),即
Run Code Online (Sandbox Code Playgroud)grid.arrange(sgcir1,sgcir2,sgcir3,ncol=2,nrow=2) ggsave("sgcirNIR.jpg")
我不保存网格图,而是保存最后一个ggplot.是否有任何方法可以通过grid.arrange()使用
ggsave()或类似的方式实际保存绘图?除了使用旧的方式
Run Code Online (Sandbox Code Playgroud)jpeg("sgcirNIR.jpg") grid.arrange(sgcir1,sgcir2,sgcir3,ncol=2,nrow=2) dev.off()
相同的链接提供以下解决方案:
require(grid)
require(gridExtra)
p <- arrangeGrob(qplot(1,1), textGrob("test"))
grid.draw(p) # interactive device
ggsave("saving.pdf", p) # need to specify what to save explicitly
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚如何使用以下代码ggsave()保存grid.arrange()调用的输出,该代码取自链接:
library(ggplot2)
library(gridExtra)
dsamp <- diamonds[sample(nrow(diamonds), 1000), ]
p1 <- qplot(carat, price, data=dsamp, colour=clarity)
p2 <- qplot(carat, price, data=dsamp, colour=clarity, geom="path")
g_legend<-function(a.gplot){
tmp <- ggplot_gtable(ggplot_build(a.gplot))
leg <- which(sapply(tmp$grobs, function(x) x$name) == …Run Code Online (Sandbox Code Playgroud) 我有两个水平对齐的ggplots grid.arrange.我查看了很多论坛帖子,但我尝试的所有内容似乎都是现在更新并命名为其他内容的命令.
我的数据看起来像这样;
# Data plot 1
axis1 axis2
group1 -0.212201 0.358867
group2 -0.279756 -0.126194
group3 0.186860 -0.203273
group4 0.417117 -0.002592
group1 -0.212201 0.358867
group2 -0.279756 -0.126194
group3 0.186860 -0.203273
group4 0.186860 -0.203273
# Data plot 2
axis1 axis2
group1 0.211826 -0.306214
group2 -0.072626 0.104988
group3 -0.072626 0.104988
group4 -0.072626 0.104988
group1 0.211826 -0.306214
group2 -0.072626 0.104988
group3 -0.072626 0.104988
group4 -0.072626 0.104988
#And I run this:
library(ggplot2)
library(gridExtra)
groups=c('group1','group2','group3','group4','group1','group2','group3','group4')
x1=data1[,1]
y1=data1[,2]
x2=data2[,1]
y2=data2[,2]
p1=ggplot(data1, aes(x=x1, y=y1,colour=groups)) + geom_point(position=position_jitter(w=0.04,h=0.02),size=1.8) …Run Code Online (Sandbox Code Playgroud) 我正在使用ggplot并且有两个图表,我希望彼此叠加显示.我使用grid.arrangegridExtra来堆叠它们.问题是,无论轴标签如何,我都希望图形的左边缘与右边缘对齐.(问题出现是因为一个图的标签很短而另一个图很长).
问题:
我该怎么做?我没有和grid.arrange结婚,但ggplot2是必须的.
我尝试了什么:
我尝试使用宽度和高度以及ncol和nrow来制作2 x 2网格并将视觉效果放在相对的角落然后玩宽度但我无法在对角处获得视觉效果.
require(ggplot2);require(gridExtra)
A <- ggplot(CO2, aes(x=Plant)) + geom_bar() +coord_flip()
B <- ggplot(CO2, aes(x=Type)) + geom_bar() +coord_flip()
grid.arrange(A, B, ncol=1)
Run Code Online (Sandbox Code Playgroud)

我已经设法使用grid.arrange创建一个2x2的绘图:
library(gridExtra)
grid.arrange(p1,p3,p2,p4, ncol=2, nrow=2, top = "Daily QC: Blue")
Run Code Online (Sandbox Code Playgroud)
这个多重图的主要标题非常小.有没有办法更改标题文字大小和字体.
我有三个图,我尝试将它们与grid.arrange结合起来.最后一个图的高度应小于前两个图,所有图的宽度应相同.
一个工作的例子:
p1 <- qplot(mpg, wt, data=mtcars)
p2 <- p1
p3 <- p1 + theme(axis.text.y=element_blank(), axis.title.y=element_blank())
grid.arrange(arrangeGrob(p1,p2, ncol=1, nrow=2),
arrangeGrob(p3, ncol=1, nrow=1), heights=c(4,1))
Run Code Online (Sandbox Code Playgroud)
这里,最后一个图的宽度大于前两个图.在我的真实数据中,即使我将文本和标题保留在y轴上,我仍然有第三个图的不同宽度.
我试图添加"宽度":
grid.arrange(arrangeGrob(p1,p2, ncol=1, nrow=2),
arrangeGrob(p3, ncol=1, nrow=1), heights=c(4,1), widths=c(2,1))
Run Code Online (Sandbox Code Playgroud)
但它变成了两列情节......
我还尝试了另一个代码:
p1 <- ggplotGrob(p1)
p2 <- ggplotGrob(p2)
p3 <- ggplotGrob(p3)
#
stripT <- subset(p2$layout, grepl("spacer", p2$layout$name))
p3 <- p3[-stripT$t, ]
grid.draw(rbind(p1, p2, p3, size = "first"))
Run Code Online (Sandbox Code Playgroud)
我有相同的宽度,但现在我不知道如何改变高度......
那么,有人可以帮助我将高度和宽度方面结合起来进行最终的情节吗?
我刚刚在Mac上更新了R,R Studio和一些软件包,包括ggplot2和gridExtras.现在gridExtras在基本绘图失败时出现错误:
"在'gList"中只允许'grobs'"
这里有一些应该有效的代码,但不是:
library(ggplot2)
p1 = qplot(1:10,rnorm(10))
p2 = qplot(1:10,rnorm(10))
library(gridExtra)
grid.arrange(p1, p2, ncol=2, main = "Main title")
Run Code Online (Sandbox Code Playgroud)
这会转储出以下错误:
Error in gList(list(grobs = list(list(x = 0.5, y = 0.5, width = 1, height = 1, :
only 'grobs' allowed in "gList"
In addition: Warning message:
In grob$wrapvp <- vp : Coercing LHS to a list
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏!
grid.arrange在gridExtra包中使用相对简单的方法在矩阵中排列多个图,但是ggplot2当一些图比其他图更大时,如何安排图(我正在处理的图)?在基础上,我可以使用layout()如下例子:
nf <- layout(matrix(c(1,1,1,2,3,1,1,1,4,5,6,7,8,9,9), byrow=TRUE, nrow=3))
layout.show(nf)
Run Code Online (Sandbox Code Playgroud)
ggplot情节的等价物是什么?

包含的一些情节
library(ggplot2)
p1 <- qplot(x=wt,y=mpg,geom="point",main="Scatterplot of wt vs. mpg", data=mtcars)
p2 <- qplot(x=wt,y=disp,geom="point",main="Scatterplot of wt vs disp", data=mtcars)
p3 <- qplot(wt,data=mtcars)
p4 <- qplot(wt,mpg,data=mtcars,geom="boxplot")
p5 <- qplot(wt,data=mtcars)
p6 <- qplot(mpg,data=mtcars)
p7 <- qplot(disp,data=mtcars)
p8 <- qplot(disp, y=..density.., geom="density", data=mtcars)
p9 <- qplot(mpg, y=..density.., geom="density", data=mtcars)
Run Code Online (Sandbox Code Playgroud) 知道如何调整tableGrob的字体大小吗?我正在使用gridExtra 2.0.0,它似乎与以前的0.9.3版本非常不同.
g <- tableGrob(mtcars)
grid.arrange(g)
Run Code Online (Sandbox Code Playgroud)
我希望调整表格,标题和rowname中文本的字体大小.
我有两个图表,我将它们放在另一个上面,方式如下:
library(ggplot2)
library(gridExtra)
p1 <- ggplot(mtcars, aes(mpg, wt)) + geom_point()
p2 <- ggplot(mtcars, aes(mpg, wt)) + geom_point()
p2 <- p2 + facet_grid(cyl ~ .)
grid.arrange(p1, p2, ncol=1)
Run Code Online (Sandbox Code Playgroud)
为此我需要顶部和底部图形的x轴排成一行,但是由于左边的条带,刻面图形比顶部图形窄.我可以使用以下方法使条带不可见:
theme(strip.text.y = element_blank())
theme(strip.background = element_blank())
Run Code Online (Sandbox Code Playgroud)
然而,这并没有摆脱条带所占据的空间.所以我要么需要一种方法来完全摆脱条带,或者有办法将我的分面图分割成单独的图形,但不知何故在它们之间共享相同的y轴标签.在我的图表中,我有两个不是很高的刻面板,并且没有足够的空间让每个都有一个像样的大小的y轴.
有什么建议?
题
如何组合单独的图(ggplot2),不同的y轴和不同的绘图高度,但保持对齐?
详情
将图表与grid.arrange(方法1)组合在一起时,使用不同的y轴单位时,它们不会对齐.解决这个问题的一种方法是使用gtable(method2),但我无法调整图的相对高度.
例
require(ggplot2)
#Make two plots, with different y axis
x = c(1, 5)
y= c(.1, .4)
data1<-data.frame(x,y)
top<-
ggplot(data1, aes(x=x, y=y))+
geom_line()
x = c(1, 5)
y= c(100000, 400000)
data2<-data.frame(x,y)
bottom<-
ggplot(data2, aes(x=x, y=y))+
geom_line()
# Method 1 - Grid Extra
require(gridExtra)
grid.arrange(top, bottom, heights=c(.6,.3))
Run Code Online (Sandbox Code Playgroud)
方法1导致此图,由于y轴标签的长度不同,该图未对齐:

#Method 2 - gtable
require(gtable)
#Extract Grobs
g1<-ggplotGrob(top)
g2<-ggplotGrob(bottom)
#Bind the tables
g<-gtable:::rbind_gtable(g1, g2, "first")
#Remove a row between the plots
g <- gtable_add_rows(g, unit(-1,"cm"), pos=nrow(g1)) …Run Code Online (Sandbox Code Playgroud)