Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何使用第三个分类变量填充分组的比例ggplot2条形图?_R_Ggplot2_Geom Bar - Fatal编程技术网

R 如何使用第三个分类变量填充分组的比例ggplot2条形图?

R 如何使用第三个分类变量填充分组的比例ggplot2条形图?,r,ggplot2,geom-bar,R,Ggplot2,Geom Bar,使用ggplot2,我想用第三个分类变量(f)填充一个条形图的条形图,该条形图显示两个不同大小的组(g=“a”,“B”)中一个分类变量(I)的相对频率。每组中的条数总和应为100% 这是一个可复制的示例,也是我迄今为止所尝试的: set.seed(7) g <- sample(c("A", "B"), 100, replace=TRUE, prob=c(0.7, 0.3)) i <- sample(c("C1", &quo

使用ggplot2,我想用第三个分类变量(f)填充一个条形图的条形图,该条形图显示两个不同大小的组(g=“a”,“B”)中一个分类变量(I)的相对频率。每组中的条数总和应为100%

这是一个可复制的示例,也是我迄今为止所尝试的:

set.seed(7)
g <- sample(c("A", "B"), 100, replace=TRUE, prob=c(0.7, 0.3)) 
i <- sample(c("C1", "C2"), 100, replace=TRUE)
f <- sample(c("X", "Y", "Z"), 100, replace=TRUE, prob=c(0.2, 0.3, 0.5))
df <- data.frame(g, i, f)


p1 <- ggplot(df, aes(x=i, y=stat(prop)))+
  geom_bar(aes(group = g, fill = f))+
  facet_grid(~g)
p1
set.seed(7)

g可能计算
dplyr
管道中的比例会很有用:

set.seed(7)
library(ggplot2)
library(dplyr)
#Data
g <- sample(c("A", "B"), 100, replace=TRUE, prob=c(0.7, 0.3)) 
i <- sample(c("C1", "C2"), 100, replace=TRUE)
f <- sample(c("X", "Y", "Z"), 100, replace=TRUE, prob=c(0.2, 0.3, 0.5))
df <- data.frame(g, i, f)
#Data
df %>% group_by(i,g,f) %>%
  summarise(N=n()) %>%
  group_by(i,g,.drop=T) %>%
  mutate(Prop=N/sum(N)) %>%
  ggplot(aes(x=i))+
  geom_bar(stat='identity',aes(y=Prop, fill = f))+
  scale_y_continuous(labels = scales::percent)+
  facet_grid(~g)
set.seed(7)
图书馆(GG2)
图书馆(dplyr)
#资料
g%
变异(Prop=N/和(N))%>%
ggplot(aes(x=i))+
几何图形条(stat='identity',aes(y=Prop,fill=f))+
比例y连续(标签=比例::百分比)+
平面网格(~g)
输出:


计算
dplyr
管道中的比例可能有用:

set.seed(7)
library(ggplot2)
library(dplyr)
#Data
g <- sample(c("A", "B"), 100, replace=TRUE, prob=c(0.7, 0.3)) 
i <- sample(c("C1", "C2"), 100, replace=TRUE)
f <- sample(c("X", "Y", "Z"), 100, replace=TRUE, prob=c(0.2, 0.3, 0.5))
df <- data.frame(g, i, f)
#Data
df %>% group_by(i,g,f) %>%
  summarise(N=n()) %>%
  group_by(i,g,.drop=T) %>%
  mutate(Prop=N/sum(N)) %>%
  ggplot(aes(x=i))+
  geom_bar(stat='identity',aes(y=Prop, fill = f))+
  scale_y_continuous(labels = scales::percent)+
  facet_grid(~g)
set.seed(7)
图书馆(GG2)
图书馆(dplyr)
#资料
g%
变异(Prop=N/和(N))%>%
ggplot(aes(x=i))+
几何图形条(stat='identity',aes(y=Prop,fill=f))+
比例y连续(标签=比例::百分比)+
平面网格(~g)
输出:


较短的替代方法是使用
计数
位置填充

库(dplyr)
df%>%
计数(g,i,f)%>%
ggplot(aes(i,n,fill=f))+
几何坐标(位置=位置填充()+
比例y连续(标签=比例::百分比)+
平面网格(~g)

较短的替代方法是使用
计数
位置填充

库(dplyr)
df%>%
计数(g,i,f)%>%
ggplot(aes(i,n,fill=f))+
几何坐标(位置=位置填充()+
比例y连续(标签=比例::百分比)+
平面网格(~g)

艾伦,谢谢你送我这件优雅的礼物。然而,我想保持C1和C2条的高度可变,显示它们在A组和B组中的相对频率。也就是说,我正在寻找一个堆叠条形图。这是可行的,但我想知道是否有一个纯粹的ggplot解决方案:
s1%group\u by(g)%%>%summary(n\u group=n())df%%>%count(g,f,I)%%>%left\u join(s1,by=“g”)%%>%mutate(pct=n/n\u group)%%>%ggplot(aes(I,pct,fill=f))+geom\u col(position=position=position=position\u stack())+scale\u连续(labels=scales=scales::percent)+刻面网格(~g)
谢谢你,艾伦,这是一个优雅的解决方案。但是,我想保持C1和C2条的高度可变,显示它们在A组和B组中的相对频率。也就是说,我正在寻找一个堆叠的条形图。这是可行的,但我想知道是否有一个纯粹的ggplot解决方案:
s1%group_by(g)%>%summarise(n_group=n())df%%>%count(g,f,i)%%>%left_join(s1,by=“g”)%%>%mutate(pct=n/n_group)%%>%ggplot(aes(i,pct,fill=f))+geom_col(position=position_stack())+scale_y_continuous(labels=scales::percent)+facet_grid(~g)