我花了很多时间试图在一个情节中拟合11个图表并使用gridExtra
进行排列,但我失败了,所以我转向你希望你可以提供帮助。
我有11个钻石分类(称之为size1
)和其他11个分类(size2
),我想绘制每个增加size1
和增加{{}的中位数价格的方式1}}(从1到6)因钻石的clarity
增加而变化,并在同一图表中绘制所有11个图。
我按照其他帖子的建议尝试使用size2
,但传说距离右侧很远,所有图表都向左压缩,请你帮我弄清楚{{{{{{ 1}}必须指定?我找不到任何好的解释。非常感谢你的帮助,我真的很感激...
我一直试图找到一个很好的例子来重新创建我的数据框,但也失败了。我希望这个数据框有助于理解我正在尝试做什么,我无法让它工作并且与我的相同,并且一些图表没有足够的数据,但重要的部分是使用{{ 1}}(虽然如果您对其他部分有其他意见,请告诉我):
gridExtra
答案 0 :(得分:3)
我不得不稍微改变qplot
循环调用(即将因子放在数据框中),因为它抛出了不匹配的大小错误。我不包括那一点,因为那部分显然在您的环境中工作,或者它是一个错误的粘贴。
尝试像这样调整widths
单位:
widths=unit(c(1000,50),"pt")
你会得到更接近你可能期望的东西:
而且,几个月后我可以粘贴代码: - )
library(ggplot2)
library(gridExtra)
df <- data.frame(price=matrix(sample(1:1000, 100, replace = TRUE), ncol = 1))
df$size1 = 1:nrow(df)
df$size1 = cut(df$size1, breaks=11)
df=df[sample(nrow(df)),]
df$size2 = 1:nrow(df)
df$size2 = cut(df$size2, breaks=11)
df=df[sample(nrow(df)),]
df$clarity = 1:nrow(df)
df$clarity = cut(df$clarity, breaks=6)
# Create one graph for each size1, plotting the median price vs. the size2 by clarity:
for (c in 1:length(table(df$size1))) {
mydf = df[df$size1==names(table(df$size1))[c],]
mydf = aggregate(mydf$price, by=list(mydf$size2, mydf$clarity),median);
names(mydf)[1] = 'size2'
names(mydf)[2] = 'clarity'
names(mydf)[3] = 'median_price'
mydf$clarity <- factor(mydf$clarity)
assign(paste("p", c, sep=""),
qplot(data=mydf,
x=as.numeric(size2),
y=median_price,
group=clarity,
geom="line", colour=clarity,
xlab = "number of samples",
ylab = "median price",
main = paste("region number is ",c, sep=''),
plot.title=element_text(size=10)) +
scale_colour_discrete(name = "clarity") +
theme_bw() + theme(axis.title.x=element_text(size = rel(0.8)),
axis.title.y=element_text(size = rel(0.8)),
axis.text.x=element_text(size=8),
axis.text.y=element_text(size=8) ))
}
# Use gridExtra to arrange the 11 plots:
g_legend<-function(a.gplot){
tmp <- ggplot_gtable(ggplot_build(a.gplot))
leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
legend <- tmp$grobs[[leg]]
return(legend)}
mylegend<-g_legend(p1)
grid.arrange(arrangeGrob(p1 + theme(legend.position="none"),
p2 + theme(legend.position="none"),
p3 + theme(legend.position="none"),
p4 + theme(legend.position="none"),
p5 + theme(legend.position="none"),
p6 + theme(legend.position="none"),
p7 + theme(legend.position="none"),
p8 + theme(legend.position="none"),
p9 + theme(legend.position="none"),
p10 + theme(legend.position="none"),
p11 + theme(legend.position="none"),
top ="Main title",
left = ""), mylegend,
widths=unit(c(1000,50),"pt"), nrow=1)
修改(2015年7月16日):gridExtra
&gt; = 2.0.0,main
参数已重命名为top
。