带有 plotly 的多个 ggplot2 图
Multiple ggplot2 plots with plotly
我想将 ggplot2 与 grid.arrange 结合使用,通过 plotly 生成多个图。
类似这样的东西:
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)
但是,我得到 "Error in gg2list(p) : No layers in plot"
有什么建议
我自己也遇到了这个问题,我认为目前不存在按照您描述的方式解决此问题的解决方案。
ggplotly 调用中包含的 gg2list 函数期望能够迭代 ggplot 对象的图层以创建相应的 plotly 对象。如果您使用 RStudio 的调试器进入 ggplotly 函数,您可以看到它尝试遍历接收到的对象以提取其属性的各种方式。
它不知道如何处理 arrangeGrob 函数返回的对象,因为它不仅仅是一个 ggplot 对象(它是一个 grob 排列等)。
对有问题的对象调用 class() 在一定程度上说明了这一点。
> class(g1)
[1] "gg" "ggplot"
> class(g)
[1] "arrange" "ggplot" "gTree" "grob" "gDesc"
我认为为了在同一个 plotly 对象中显示多个图,我们需要使用 ggplot 中的 facet 选项或本机 plotly R 绑定。不幸的是,因为gridExtra非常强大和灵活,但是ggplot翻译机制似乎无法处理。
使用plotly的subplot功能:
subplot(p1, p2, nrows = 2, margin = 0.04, heights = c(0.6, 0.4))
我想将 ggplot2 与 grid.arrange 结合使用,通过 plotly 生成多个图。 类似这样的东西:
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)
但是,我得到 "Error in gg2list(p) : No layers in plot"
有什么建议
我自己也遇到了这个问题,我认为目前不存在按照您描述的方式解决此问题的解决方案。
ggplotly 调用中包含的 gg2list 函数期望能够迭代 ggplot 对象的图层以创建相应的 plotly 对象。如果您使用 RStudio 的调试器进入 ggplotly 函数,您可以看到它尝试遍历接收到的对象以提取其属性的各种方式。
它不知道如何处理 arrangeGrob 函数返回的对象,因为它不仅仅是一个 ggplot 对象(它是一个 grob 排列等)。
对有问题的对象调用 class() 在一定程度上说明了这一点。
> class(g1)
[1] "gg" "ggplot"
> class(g)
[1] "arrange" "ggplot" "gTree" "grob" "gDesc"
我认为为了在同一个 plotly 对象中显示多个图,我们需要使用 ggplot 中的 facet 选项或本机 plotly R 绑定。不幸的是,因为gridExtra非常强大和灵活,但是ggplot翻译机制似乎无法处理。
使用plotly的subplot功能:
subplot(p1, p2, nrows = 2, margin = 0.04, heights = c(0.6, 0.4))