r - 五个尺度和四个类别的堆叠条
问题描述
我需要在质押柱上展示我的数据。五个量表有四个类别,样本量为200
df <- tribble(
~ID, ~scale1, ~scale2, ~scale3, ~scale4, ~scale5,
"1", "Cat1", "Cat2", "Cat4", "Cat1", "Cat2",
"2", "Cat3", "Cat3", "Cat1", "Cat2", "Cat3",
"3", "Cat4", "Cat1", "Cat2", "Cat3", "Cat2",
"4", "Cat1", "Cat4", "Cat2", "Cat4", "Cat4",
"5", "Cat2", "Cat1", "Cat3", "Cat1", "Cat1")
如何为每个比例创建一个堆叠条?我试过这个,但它没有用
df=df %>%
select(ID,scale1:scale5) %>%
pivot_longer(cols=scale1:scale5,names_to="Scale",values_to = "Value")%>%
mutate(Category=case_when(
Value>=4 ~"Cat4",
Value>=3 &Value<4 ~"Cat3",
Value>=2 &Value<3 ~"Cat2",
Value<2 ~"Cat1",
TRUE ~ "None"
)) %>%
mutate(Category=factor(Category,levels = c("Cat4","Cat3","Cat2","Cat1")))%>%
mutate(Scale=factor(Scale, levels =c("Math","Physics","","Computer","PE","English")))
解决方案
更新 OP 的评论: 我现在将展示如何绘制带有计数和百分比的堆栈栏。最重要的是整齐的数据。也就是说,您应该在绘图之前了解如何整理数据。这是您的示例完整解决方案:
library(tidyverse)
# rename column names with vector
colnames(df) <- c("ID", "Math", "Physics", "_", "Computer","PE","English")
df1 <- df %>%
pivot_longer(
cols = 2:6,
names_to = "Scale",
values_to = "Category"
) %>%
group_by(Scale, Category) %>%
count(Category) %>%
group_by(Scale) %>%
mutate(percent=n/sum(n)) %>%
print(n=40)
# plot count
ggplot(df1, aes(fill=Category, y=n, x=Scale)) +
geom_bar(position="stack", stat="identity") +
geom_text(aes(label=paste0(n)),
position=position_stack(vjust=0.5), colour="white", size = 5)
# plot with percent
ggplot(df1, aes(fill=Category, y=n, x=Scale)) +
geom_bar(position="fill", stat="identity") +
geom_text(aes(label=paste0(sprintf("%1.1f", percent*100),"%")),
position=position_fill(vjust=0.5), colour="white", size = 5) +
scale_y_continuous(labels = scales::percent)
第一个答案: 您可以通过以下代码获得相同的结果:
library(tidyverse)
# rename column names with vector
colnames(df) <- c("ID", "Math", "Physics", "_", "Computer","PE","English")
df %>%
pivot_longer(cols= -ID ,names_to="Scale",values_to = "Category") %>%
ggplot(aes(fill=Category, x=Scale)) +
geom_bar(stat="count", position = 'stack')+
theme_bw()
推荐阅读
- javascript - 每秒从数据库 javascript 中获取实时数据
- python - 如何在 linux 中与不同参数并行运行 python 脚本?
- shell - 根据运行时信息构造命令
- r - 如何将这个宽数据框转换成这个长数据框?
- c# - 如何从 C# 中的 powershell 类中捕获完整的调用文本
- python - zlib decompress() 只解码第一行
- javascript - 在 react-google-maps 组件上自动调整高度
- xamarin - Xamarin Scroll 在 WebView 中滞后
- java - 如何使用定义的对象作为输入变量?
- php - 优化飞行路径 PHP 的距离