R 计数 table 的多个饼图?

R multiple pie charts from count table?

如果我的数据是这样的:

group <- c("A","B","C","D")
count1 <- c(1:4)
count2 <- c(2,2,3,4)
count3 <- c(4,3,2,1)
data <- cbind(group,count1,count2,count3)

如何获得行和列的饼图?也就是说,一个带有 4 个饼图和一个图例的图用于组内计数变量的分布,以及一个带有 3 个饼图的图用于每个计数中的组分布?另外,如果有比饼图更好的方法来显示这一点,我很乐意提供。

修复示例数据,使其为数字而非字符(使用 rbind 强制转换为矩阵。矩阵只能包含一种数据类型,在这些情况下 R 始终使用最通用的数据类型,即字符):

group<-c("A","B","C","D")
count1<-c(1:4)
count2<-c(2,2,3,4)
count3<-c(4,3,2,1)
df <- data.frame(group,count1,count2,count3)

使用 ggplot2 进行 plottig 以及 dplyrtidyr 将数据重组为长格式的建议解决方案:

library(dplyr)
library(tidyr)
library(ggplot2)

df %>% 
  pivot_longer(cols=-group) %>% 
  ggplot(aes(group, value, fill=name)) +
  geom_col(position = "dodge")

或者我们可以使用 facet_gridfacet_wrap...

编辑:

如何显示每个 group 的相对百分比(使用 ggplot2tidyrdplyrscales):

group<-c("A","B","C","D")
count1<-c(1:4)
count2<-c(2,2,3,4)
count3<-c(4,3,2,1)
df <- data.frame(group, count1, count2, count3)


library(dplyr)
library(tidyr)
library(ggplot2)
library(scales)

df %>% 
  pivot_longer(cols=-group) %>% 
  group_by(group) %>% 
  mutate(relFreq = value / sum(value)) %>% 
  ungroup() %>% 
  ggplot(aes(group, relFreq, fill=name)) +
  geom_col(position = "dodge") +
  scale_y_continuous(labels = scales::percent) +
  expand_limits(y=c(0,1))