用 plotly 绘制多个 ggplot2 绘图

Posted

技术标签:

【中文标题】用 plotly 绘制多个 ggplot2 绘图【英文标题】:Multiple ggplot2 plots with plotly 【发布时间】:2016-01-02 11:55:39 【问题描述】:

我想使用带有 grid.arrange 的 ggplot2 来生成多个带有 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)

但是,我收到“gg2list(p) 中的错误:绘图中没有图层”

任何建议

【问题讨论】:

我什至无法在 R 3.1.3 中安装。你用的是什么版本? 看这个:plot.ly/r/getting-started 【参考方案1】:

我自己也遇到了这个问题,我认为目前没有解决方案可以按照您描述的方式来解决这个问题。

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翻译机制似乎无法处理。

【讨论】:

【参考方案2】:

使用plotly的subplot函数:

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

【讨论】:

但 subplot 似乎为每个 subplot 提供了额外的跟踪。例如,我想绘制三个基本相同但子图将它们视为不同的图。

以上是关于用 plotly 绘制多个 ggplot2 绘图的主要内容,如果未能解决你的问题,请参考以下文章

ggplot2应用(二)——火山图绘制(volcano plot)

从 ggplot2 转换时,Plotly 绘图未正确呈现

r 常见绘图任务的语法与ggplot2和plotly

用ggplot2绘制密度,x轴上没有线

plot绘图

从 ggplot2 转换为 plotly 后激活或停用图例键时绘图缩小或扩展