如何使用 plotly 和 ggplot 将多个饼图与循环组合

How to combine multiple pie charts wih a loop using plotly or ggplot

我有以下数据框(在简化版本中,它最多可以达到 1000 个变量),我想为我的数据框的每一列构建多个饼图。我找到这段代码是为了使用 plotly 循环构建它们(但 ggplot 的建议也很好)但我不知道如何将它们绘制在一起,在一个图中,使用循环将它们组合起来。 数据集如下:

a=c(20.0,20.0,20.0,20.0,20.0)
b=c(19.0,21.0,22.0,18.0,20.0)
c=c(20.0,20.5,19.5,15.0,25.0)
d=c(13.0,17.0,15.5,24.5,20.0)
e=c(20.0,10.5,29.5,35.0,5.0)
data=cbind(a,b,c,d,e)
colnames(data)<-c("A","B","C","D","E")
rownames(data)<-c("A","B","C","D","E")
data=as.table(data)
data

而写不同饼图的代码如下:

for(i in 1:dim(data)[1]){
  assign(paste0("pie_",i), plot_ly(as.data.frame(data[,i], nm = "y"), 
                                 labels = colnames(data), values = ~y, type = 'pie'))
}

我想将所有创建的饼图组合在一起,使用循环以便根据数据框中不同列(变量)的数量自动组合。 预先感谢您的帮助!

这里有一个 ggplot2 解决方案,它避免了循环,因为 ggplot2::facet_wrap() 可以简单地完成工作:

library(reshape2)
library(tidyverse)

melt(data) %>%                                # ggplot loves long format
ggplot(aes("", value, fill = Var1)) +         # here the variables
               geom_bar(stat = 'identity') +  # bars
               coord_polar("y") +             # make it round
               facet_wrap(vars(Var2))         # facets

如果我能给你建议,恕我直言,通常 100 以内的条形图要好一些,因为它们使条形图而不是圆圈之间的比较更容易(对此有很多意见)。万一代码更简单,你可以使用plotly,由于支持(似乎coord_polar()还不支持)。

library(plotly)
p <- melt(data) %>% ggplot(aes(Var2, value, fill = Var1)) +
               geom_bar(stat = 'identity')

ggplotly(p)