0

ggplot2andを使用してプロットを挿入しようとしていますannotation_custom(プロットは、実際には凡例を置き換えるために使用しているマップです)。ただし、facet_wrap複数のパネルを生成するためにも使用していますが、 で使用するとannotation_custom、各ファセットのプロットが再現されます。できればプロット領域の外にプロットを一度だけ挿入する簡単な方法はありますか?

以下に簡単な例を示します。

#Generate fake data
set.seed(9)
df=data.frame(x=rnorm(100),y=rnorm(100),facets=rep(letters[1:2]),
              colors=rep(c("red","blue"),each=50))
#Create base plot
p=ggplot(df,aes(x,y,col=colors))+geom_point()+facet_wrap(~facets)
#Create plot to replace legend
legend.plot=ggplotGrob(
  ggplot(data=data.frame(colors=c("red","blue"),x=c(1,1),y=c(1,2)),
         aes(x,y,shape=colors,col=colors))+geom_point(size=16)+
         theme(legend.position="none") )
#Insert plot using annotation_custom
p+annotation_custom(legend.plot)+theme(legend.position="none") 
#this puts plot on each facet!

これにより、次のプロットが生成 されプロット1 ます プロット 。ありがとう!

4

1 に答える 1

2

の助けを借りてannotation_custom()、注釈は言われている"are the same in every panel"ので、各ファセット(パネル)にlegend.plotを持つことが期待されます。

theme(legend.position="none")1 つの解決策は、ベース プロットに追加してからgrid.arrange()(library gridExtra) を使用して両方のプロットをプロットすることです。

library(gridExtra)
p=ggplot(df,aes(x,y,col=colors))+geom_point()+facet_wrap(~facets)+
         theme(legend.position="none") 

grid.arrange(p,legend.plot,ncol=2,widths=c(3/4,1/4))

ここに画像の説明を入力

于 2013-10-30T15:46:14.900 に答える