R Plotly两个图并排显示

4

我正在尝试在Plotly中将两个环形图并排展示,但我只能得到一个图片。请问我缺少什么?

library(dplyr)
library(plotly)

df1 <- as.data.frame(matrix(data = c("a","b", "c", 34,28, 29), nrow = 3, ncol = 2))
colnames(df1) <- c("category", "count")
df2 <- as.data.frame(matrix(data = c("Q","F", "G", 29,50, 76), nrow = 3, ncol = 2))
colnames(df2) <- c("group", "count")


p <- subplot(
  plot_ly(df1, labels = category, values = count, type = "pie", hole = 0.6, showlegend = TRUE),
  plot_ly(df2, labels = group, values = count, type = "pie", hole = 0.6, showlegend = TRUE),
  margin = 0.05,
  nrows = 2
)
p

当前输出:

在此输入图片描述


(注:此内容为HTML代码,已翻译)
2个回答

5

您已经非常接近了。这是将您的代码适应于Plotly饼图示例的一种方式:

plot_ly(df1, labels = category, values = count, type = "pie", hole = 0.6, showlegend = TRUE,
        domain = list(x = c(0, 1), y = c(0.5, 1))) %>%
  add_trace(data = df2, labels = group, values = count, type = "pie", hole = 0.6, showlegend = TRUE,
            domain = list(x = c(0, 1), y = c(0, 0.5)))

并排的饼图

(他们使用add_trace而不是父级subplot。)

如果您想添加网格线(例如@Technophobe01的示例),可以添加以下内容

ax <- list(showline= TRUE)
plot_ly(...) %>% add_trace(...) %.%
  layout(xaxis = ax, yaxis = ax)

有更多的选项可供选择,可以在他们的坐标轴页面上找到示例。


使用像这样的 domain 让我想起在基础 R 中使用 par(fig=..., new=TRUE)。看起来有点严格,但它确实有效。 - r2evans
太棒了,感谢您。为什么subplot不起作用?文档建议使用它? - user1357015
不好意思,我不知道。您能“接受”其中一個答案嗎? - r2evans

1
如果您采用r2evans的解决方案,可以按照以下方式将其与您的问题匹配:
library(dplyr)
library(plotly)

df1 <- as.data.frame(matrix(data = c("a","b", "c", 34,28, 29), nrow = 3, ncol = 2))
colnames(df1) <- c("category", "count")
df2 <- as.data.frame(matrix(data = c("Q","F", "G", 29,50, 76), nrow = 3, ncol = 2))
colnames(df2) <- c("group", "count")


p2<- subplot(
  plot_ly(df1, labels = category, values = count, type = "pie", hole = 0.6, showlegend = TRUE,
          domain = list(x = c(0, 0.5), y = c(0, 1))), 
  add_trace(data = df2, labels = group, values = count, type = "pie", hole = 0.6,
              domain = list(x = c(0.5, 1), y = c(0, 1))),
  margin = 0.05) 
p2

结果:

enter image description here


1
subplot 添加了背景网格吗?如果没有它,我无法让它正常工作。(顺便说一下:我错过了 nrows = 2,你也跟着犯了相同的错误... :-) - r2evans
是的,根据编码,子图正在添加背景网格。参考:https://plot.ly/r/subplots/ - Technophobe01
可以使用layout完成,但在这种情况下,我不确定它是否有太多作用(当略微超出饼图时,“0,0”代表什么?)。 - r2evans
r2evans - 我的错,我已经修复了 nrows=2 的问题 :-) - Technophobe01

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