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 以及 dplyr
和 tidyr
将数据重组为长格式的建议解决方案:
library(dplyr)
library(tidyr)
library(ggplot2)
df %>%
pivot_longer(cols=-group) %>%
ggplot(aes(group, value, fill=name)) +
geom_col(position = "dodge")
或者我们可以使用 facet_grid
或 facet_wrap
...
编辑:
如何显示每个 group
的相对百分比(使用 ggplot2
、tidyr
、dplyr
和 scales
):
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))
如果我的数据是这样的:
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 以及 dplyr
和 tidyr
将数据重组为长格式的建议解决方案:
library(dplyr)
library(tidyr)
library(ggplot2)
df %>%
pivot_longer(cols=-group) %>%
ggplot(aes(group, value, fill=name)) +
geom_col(position = "dodge")
或者我们可以使用 facet_grid
或 facet_wrap
...
编辑:
如何显示每个 group
的相对百分比(使用 ggplot2
、tidyr
、dplyr
和 scales
):
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))