使用Plotly在R中创建子图(已修复错误)

12

如何在R中使用Plotly创建子图网格?

官方网站上有这个好的Python示例

Python Example

Python代码有rows=2cols=2选项,但是在R中,subplot函数只有nrows参数,没有ncols参数。

我尝试了这个在R中的示例,但是nrows似乎没有按预期工作:

# Basic subplot
library(plotly)
p <- plot_ly(economics, x = date, y = uempmed)
subplot(p,p,p,p,
  margin = 0.05,
  nrows=2
) %>% layout(showlegend = FALSE)
他们排成一行而不是网格状。请参阅结果: enter image description here 这里提供了R子图页面作为参考 R subplots page。不幸的是,对我来说不能使用ggplotly,就像这个一样。

更新

这是一个错误。 Plotly团队非常迅速,并在仅3天内修复了它(在这里检查)! Github版本已更新。很棒的工作!
2个回答

11
这似乎是subplot()生成两个图形的y轴区域的真正bug。事实上,它们重叠在一起,如果你执行以下操作就很容易看到:
p <- plot_ly(economics, x = date, y = uempmed)
q <- plot_ly(economics, x = date, y = unemploy)


subplot(p,q, nrows = 2)

这将生成以下绘图:

enter image description here

如果您仔细观察y轴,您会发现它们重叠。这暗示了subplot()定义子图y轴域的问题。
如果我们手动更正y轴域的域规范(遵循plotly文档),我们可以解决这个问题。
subplot(p,q, nrows = 2) %>% layout(yaxis = list(domain = c(0, 0.48)), 
                                   yaxis2 = list(domain = c(0.52, 1)))

这将产生: enter image description here 现在,如果你想要再现类似于Python示例的4x4子图矩阵,你可能需要以类似的方式手动调整x轴域。
由于这是一个错误,我的解决方案仅是一个解决方法,我建议您向GitHub上的plotly提交问题。

谢谢您的回复。我按照您的建议,在GitHub上开了issue #313 - Murta
它们真的很快。错误已修复。 - Murta

0

基于this

p <- economics %>%
  tidyr::gather(variable, value, -date) %>%
  transform(id = as.integer(factor(variable))) %>%
  plot_ly(x = ~date, y = ~value, color = ~variable, colors = "Dark2",
          yaxis = ~paste0("y", id)) %>%
  add_lines() %>%
  subplot(nrows = 5, shareX = TRUE)

enter image description here


我正在尝试这个例子,但是出现了错误: Error in subplot(., nrows = 5, shareX = TRUE) : unused arguments (nrows = 5, shareX = TRUE) - Urvah Shabbir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接