R-向刻面ggplot2对象添加打印(使用注释\自定义)

R-向刻面ggplot2对象添加打印(使用注释\自定义),r,ggplot2,R,Ggplot2,我正在尝试使用ggplot2和annotation\u custom插入一个绘图(该绘图实际上是我用来替换图例的地图)。但是,我也使用facet\u wrap生成多个面板,但是当与annotation\u custom一起使用时,这会在每个facet中复制绘图。是否有一种简单的方法可以只插入一次绘图,最好是在绘图区域之外 下面是一个简单的例子: #Generate fake data set.seed(9) df=data.frame(x=rnorm(100),y=rnorm(100),face

我正在尝试使用
ggplot2
annotation\u custom
插入一个绘图(该绘图实际上是我用来替换图例的地图)。但是,我也使用
facet\u wrap
生成多个面板,但是当与
annotation\u custom
一起使用时,这会在每个facet中复制绘图。是否有一种简单的方法可以只插入一次绘图,最好是在绘图区域之外

下面是一个简单的例子:

#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!
这将生成以下绘图: 当我想要更多的东西时:
感谢您的帮助。谢谢

annotation\u custom()
的帮助下,据说注释
“在每个面板中都是相同的”
,因此预期结果是在每个面(面板)中都有图例.plot

一种解决方案是将
主题(legend.position=“none”)
添加到基本绘图中,然后使用
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))

事实上,它确实这么说<代码>网格。排列似乎是最好的方式--谢谢!