如何使用 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)
我有以下数据框(在简化版本中,它最多可以达到 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)