我想使用ggplot2包并排放置两个图,即相当于par(mfrow=c(1,2)).
例如,我希望以下两个图表以相同的比例并排显示.
x <- rnorm(100)
eps <- rnorm(100,0,.2)
qplot(x,3*x+eps)
qplot(x,2*x+eps)
Run Code Online (Sandbox Code Playgroud)
我需要将它们放在相同的data.frame中吗?
qplot(displ, hwy, data=mpg, facets = . ~ year) + geom_smooth()
Run Code Online (Sandbox Code Playgroud) 作为一个新的ggplot2用户,我有点失去了可能性,并努力在网上找到一个简单的答案,我认为是一个简单的问题.
我想在同一张纸上显示来自ggplot2的多个图,但是知道这些图来自for循环.
下面的例子没有编译,只是为了说明:
for(i in c(1:n)){
for(j in c(1:m)){
.......... # some data production
p <- ggplot(df.all) + geom_bar(aes_string(x=class.names[i],fill=var.names[j])
}}
Run Code Online (Sandbox Code Playgroud)
在这里,p被覆盖了,但是我希望有一个矩阵或一个列表,我可以将所有p放在它们生成的位置,然后像一个简单的函数,如
display_in_a_grid(list_of_ggplot_plots)
Run Code Online (Sandbox Code Playgroud)
但据我所知,我无法制作一个绘图矩阵列表,也无法找到只接受一个参数输入的函数.
关于我看过的事情:
包gridExtra中的"arrangeGrob"不起作用,因为它需要每个绘图的显式名称(例如:p1,p2,p3,...),如http://code.google.com/p/gridextra/wiki/ arrangeGrob
ggplot2的"facet"方法不适合我的数据集的组织(或相反:p)
你有一个简单的方法来管理这个吗?
谢谢,
弗朗索瓦
我正在使用以下代码在惊人的包ggplot2中创建三组图:
w<-rnorm(100)
x<-rnorm(100)
y<-rnorm(100)
z<-rnorm(100)
g<-rep(factor(LETTERS[1:4]), 25)
d<-data.frame(g,w,x,y,z)
library(ggplot2)
pw<-ggplot(d, aes(w, y))
px<-ggplot(d, aes(x, y))
pz<-ggplot(d, aes(z, y))
pw+geom_point()+facet_grid(.~g, scales='fixed')+coord_equal()+stat_smooth(method='lm')
px+geom_point()+facet_grid(.~g, scales='fixed')+coord_equal()+stat_smooth(method='lm')
pz+geom_point()+facet_grid(.~g, scales='fixed')+coord_equal()+stat_smooth(method='lm')
Run Code Online (Sandbox Code Playgroud)
我会制作一个PDF文件,将这三组图中的每一组打印在同一页上.我的理解是,split.screen(c(3,1))并且par(mfrow=c(3,1))不能使用ggplot2图形,但是grid.layout()从网格包中可以使用,所以我试过:
pdf(file="test.pdf")
pushViewport(viewport(layout=grid.layout(3,1)))
print(pw+geom_point()+facet_grid(.~g, scales='fixed')+coord_equal()+stat_smooth(method='lm'))
print(px+geom_point()+facet_grid(.~g, scales='fixed')+coord_equal()+stat_smooth(method='lm'))
print(pz+geom_point()+facet_grid(.~g, scales='fixed')+coord_equal()+stat_smooth(method='lm'))
dev.off()
Run Code Online (Sandbox Code Playgroud)
但这最终是一个四页的PDF文件,第一页是空白的,每组数字跟随每页一个,x轴标签在底部向下.有没有办法在同一页面上制作包含所有图形集的PDF文件(并且没有空白页面引导!)?
我试图使用从散点图另一个调色板ggpairs来自GGally于R.库见这里类似的问题.
library(ggplot2)
library(GGally)
Run Code Online (Sandbox Code Playgroud)
作品
ggplot(iris, aes(x=Sepal.Width, colour=Species)) + stat_ecdf() + scale_color_brewer(palette="Spectral")
Run Code Online (Sandbox Code Playgroud)

也有效
ggplot <- function(...) ggplot2::ggplot(...) + scale_color_brewer(palette="Spectral")
ggplot(iris, aes(x=Sepal.Width, colour=Species)) + stat_ecdf()
Run Code Online (Sandbox Code Playgroud)

不行
ggplot <- function(...) ggplot2::ggplot(...) + scale_color_brewer(palette="Spectral")
ggpairs(iris,
columns=, c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width"),
colour='Species',
lower=list(continuous='points'),
axisLabels='none',
upper=list(continuous='blank')
)
Run Code Online (Sandbox Code Playgroud)
但补充一点
putPlot(p, ggplot(iris, aes(x=Sepal.Length, colour=Species)) + stat_ecdf(), 1,1)
Run Code Online (Sandbox Code Playgroud)
添加正确颜色的图表.

解决方法
之后我可以使用getPlot更改绘图,但这并不漂亮..
subplot <- getPlot(a, 2, 1) # retrieve the top left chart
subplotNew <- subplot + scale_color_brewer(palette="Spectral")
a <- putPlot(a, subplotNew, 2, 1) …Run Code Online (Sandbox Code Playgroud)