多个ggplot2图与情节

时间:2015-10-05 18:14:23

标签: r ggplot2 plotly

我想使用ggplot2和grid.arrange一起生成多个绘图。 有些类似的事情:

library(ggplot2)
library(gridExtra)
library(plotly)


g1<-ggplot(mpg, aes(displ, hwy, color=factor(year)))+geom_point()

g2<-ggplot(mpg, aes(cyl, hwy, color=factor(year)))+geom_point()

g<-grid.arrange(g1,g2,ncol=2)

ggplotly(g)

然而,我得到了“gg2list(p)中的错误:情节中没有图层”

任何建议

2 个答案:

答案 0 :(得分:11)

使用plotly的子图功能:

subplot(p1, p2, nrows = 2, margin = 0.04, heights = c(0.6, 0.4))

答案 1 :(得分:3)

我自己遇到了这个问题,我认为目前不存在以你所描述的方式做到这一点的解决方案。

ggplotly调用中包含的gg2list函数希望能够迭代ggplot对象的图层来创建相应的plotly对象。如果您使用RStudio的调试器进入ggplotly函数,您可以看到它尝试迭代它接收的对象以提取其属性的各种方式。

它不知道如何处理arrangeGrob函数返回的对象,因为它不仅仅是一个ggplot对象(它是一个grob排列等)。

对有问题的对象调用class()有点说明了这一点。

> class(g1)  
[1] "gg"     "ggplot"

> class(g)  
[1] "arrange" "ggplot"  "gTree"   "grob"    "gDesc" 

我认为为了让多个图表在同一个图形对象中抬头,我们需要使用ggplot中的facet选项或本机的plotly R绑定。不幸的是,因为gridExtra非常强大且灵活,但ggplot转换机制似乎无法处理它。