2014-02-24 29 views
2

我想從一個情節exctact傳說:保存傳奇旁邊傳奇

a<-rnorm(100) 
b<-runif(100) 
ba<-cbind(a,b) 
colnames(ba)<-c("a","b") 
ba<-melt(ba,id.vars=1:1) 
colnames(ba)<-c("c","variable","value") 
plot1<-ggplot(q,aes(x=c,y=value,colour=variable,size=variable))+geom_point()+theme(legend.position="right") 

現在我提取從GROB傳說:

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)} 


legend<-g_legend(plot1) 

我可以 PDF( 「plot.pdf」) grid.draw(圖例) dev.off()

所得圖像將包含圖例瓦特:通過使用grid.draw保存此說明ith很多空白。有沒有一種方法只能繪製圖例,但不能在旁邊有太多空間?

+1

我認爲使用'pdf'或'png'確實有效。 'ggsave'可能不起作用,因爲'grid.draw'的輸出不是ggplot對象。 –

+0

對,但是我應該在pdf後面加上什麼? PDF(grid.draw(傳奇))?或者如何? – user1723765

+0

'pdf(「filename.pdf」)',那麼你所有的繪圖命令,然後'dev.off()' – josliber

回答

2
gg <- gtable::gtable_filter(x=ggplotGrob(plot1), 
       pattern="guide", trim=TRUE)[["grobs"]][[1]][["grobs"]][[1]] 

pdf("legend.pdf", 
    width=convertWidth(sum(gg$width), "in", valueOnly=TRUE), 
    height=convertHeight(sum(gg$heights), "in", valueOnly=TRUE)) 
grid.draw(gg) 
dev.off() 
+0

現在好多了,但仍然有很多空間。 – user1723765

+0

'?theme'您需要自己做一些Google搜索和腿部練習。就像我建議'pdf'一樣。如果你不知道如何使用它,至少應該試試'?pdf'。 –

+0

圖例邊距有問題,其中一些不可定製(請參閱github問題跟蹤器)。 – baptiste