R 从逗号分隔的单元格数据创建饼图矩阵

R 从逗号分隔的单元格数据创建饼图矩阵,r,csv,matrix,data-visualization,pie-chart,R,Csv,Matrix,Data Visualization,Pie Chart,假设我有一个包含数据的矩阵: 我想创建一个饼图矩阵。输出应该是这样的 在R中我应该如何继续 注意:我希望它将饼图作为矩阵的一个元素。这里有一种方法: library(stringr) # to split strings library(tidyverse) # to unnest lists of numbers library(ggplot2) # for graphs library(dplyr) # for pretty code # Define your matr

假设我有一个包含数据的矩阵:

我想创建一个饼图矩阵。输出应该是这样的

R中我应该如何继续


注意:我希望它将饼图作为矩阵的一个元素。

这里有一种方法:

library(stringr)   # to split strings
library(tidyverse) # to unnest lists of numbers
library(ggplot2)   # for graphs
library(dplyr)     # for pretty code

# Define your matrix
mat <- matrix(c(NA, "1,2,3", "6,7,1", "1,2,3", NA, "8,5,2", "6,7,1", "8,5,2", NA), 
              nrow=3, 
              ncol=3,
              dimnames = list(c("P1", "P2", "P3"), c("P1", "P2", "P3"))) 

mat %>%
  # Convert matrix to a data frame
  as.table() %>%
  as.data.frame() %>%
  # Extract/parse numbers from strings (e.g. "1,2,3")
  mutate(Freq = str_split(Freq,",")) %>%
  unnest(Freq) %>%
  mutate(Freq = as.integer(Freq)) %>%
  # Convert the values to a percentage (which adds up to 1 for each graph)
  group_by(Var1, Var2) %>%
  mutate(Freq = ifelse(is.na(Freq), NA, Freq / sum(Freq)),
         color = row_number()) %>%
  ungroup() %>%
  # Plot
  ggplot(aes("", Freq, fill=factor(color))) + 
  geom_bar(width = 1, stat = "identity") +
  coord_polar("y") +       # Make it a pie chart
  facet_wrap(~Var1+Var2) + # Break it down into 9 charts
  # Below is just aesthetics
  theme(axis.text = element_blank(),
        axis.ticks = element_blank(),
        panel.grid = element_blank(),
        axis.title = element_blank()) +
  guides(fill = FALSE)
library(stringr)#拆分字符串
图书馆(tidyverse)#到最新的数字列表
图库(ggplot2)#用于图形
库(dplyr)#用于漂亮的代码
#定义你的矩阵
材料%
#将矩阵转换为数据帧
as.table()%>%
as.data.frame()%>%
#从字符串中提取/分析数字(例如“1,2,3”)
突变(频率=str_分割(频率,“,”)%%
未测试(频率)%%>%
变异(Freq=as.integer(Freq))%>%
#将值转换为百分比(每个图形加起来为1)
分组依据(Var1,Var2)%>%
变异(Freq=ifelse(is.na(Freq),na,Freq/sum(Freq)),
颜色=行数())%>%
解组()%>%
#密谋
ggplot(aes(“”,频率,填充=因子(颜色)))+
几何图形条(宽度=1,stat=“identity”)+
坐标(y)+将其做成饼图
facet_wrap(~Var1+Var2)+#将其分解为9个图表
#下面就是美学
主题(axis.text=element_blank(),
axis.ticks=元素_blank(),
panel.grid=element\u blank(),
axis.title=元素_blank())+
辅助线(填充=假)
结果:


这里有一种方法:

library(stringr)   # to split strings
library(tidyverse) # to unnest lists of numbers
library(ggplot2)   # for graphs
library(dplyr)     # for pretty code

# Define your matrix
mat <- matrix(c(NA, "1,2,3", "6,7,1", "1,2,3", NA, "8,5,2", "6,7,1", "8,5,2", NA), 
              nrow=3, 
              ncol=3,
              dimnames = list(c("P1", "P2", "P3"), c("P1", "P2", "P3"))) 

mat %>%
  # Convert matrix to a data frame
  as.table() %>%
  as.data.frame() %>%
  # Extract/parse numbers from strings (e.g. "1,2,3")
  mutate(Freq = str_split(Freq,",")) %>%
  unnest(Freq) %>%
  mutate(Freq = as.integer(Freq)) %>%
  # Convert the values to a percentage (which adds up to 1 for each graph)
  group_by(Var1, Var2) %>%
  mutate(Freq = ifelse(is.na(Freq), NA, Freq / sum(Freq)),
         color = row_number()) %>%
  ungroup() %>%
  # Plot
  ggplot(aes("", Freq, fill=factor(color))) + 
  geom_bar(width = 1, stat = "identity") +
  coord_polar("y") +       # Make it a pie chart
  facet_wrap(~Var1+Var2) + # Break it down into 9 charts
  # Below is just aesthetics
  theme(axis.text = element_blank(),
        axis.ticks = element_blank(),
        panel.grid = element_blank(),
        axis.title = element_blank()) +
  guides(fill = FALSE)
library(stringr)#拆分字符串
图书馆(tidyverse)#到最新的数字列表
图库(ggplot2)#用于图形
库(dplyr)#用于漂亮的代码
#定义你的矩阵
材料%
#将矩阵转换为数据帧
as.table()%>%
as.data.frame()%>%
#从字符串中提取/分析数字(例如“1,2,3”)
突变(频率=str_分割(频率,“,”)%%
未测试(频率)%%>%
变异(Freq=as.integer(Freq))%>%
#将值转换为百分比(每个图形加起来为1)
组\u by(Var1,Var2)%%%
变异(Freq=ifelse(is.na(Freq),na,Freq/sum(Freq)),
颜色=行数())%>%
解组()%>%
#密谋
ggplot(aes(“”,频率,填充=因子(颜色)))+
几何图形条(宽度=1,stat=“identity”)+
坐标(y)+将其做成饼图
facet_wrap(~Var1+Var2)+#将其分解为9个图表
#下面就是美学
主题(axis.text=element_blank(),
axis.ticks=元素_blank(),
panel.grid=element\u blank(),
axis.title=元素_blank())+
辅助线(填充=假)
结果:


小心……人们通常可以从编写一些代码开始。查阅
par(mfrow=c(3,3))
?pie
可能也
?text
@RichScriven我无法思考如何处理这个问题。我只需要一个想法。@G5W:是的,这可能是一种可能性,但我希望它能使饼图成为矩阵的一个元素,但要小心……人们通常可以从编写一些代码开始。查找
par(mfrow=c(3,3))
?饼
也可能
?text
@RichScriven我无法思考如何处理这个问题。我只需要一个想法。@G5W:是的,这可能是一种可能性,但我希望它能将饼图作为矩阵的一个元素