gpt4 book ai didi

r - 使用百分比创建马赛克图

转载 作者:行者123 更新时间:2023-12-05 04:56:29 30 4
gpt4 key购买 nike

以下是我拥有的示例数据集:

df <- structure(list(Class = c("A", "B", "C", "D"), 
`Attempted` = c(374, 820, 31, 108),
`Missed` = c(291, 311, 5, 15),
`Cancelled` = c(330, 206, 6, 5),
`Unknown` = c(950, 341, 6, 13)),
class = "data.frame", row.names = c(NA, -4L))

我想用“百分比”而不是绝对数字创建马赛克图。准确地说,我想看看“A 类”总人口中有多少百分比的“A 类”人“错过”了他们的测试?并且,对于其他类别的人口也是如此。

我还没有尝试过任何代码,因为我完全不知道如何开始。谁能帮我解决这个问题?

最佳答案

只使用一个包,你可以做并注意我用每个类中的比例标记单元格(即行总和为 1):

library(vcd)
M = as.table(as.matrix(df[,-1]))
names(dimnames(M)) = c("Class","result")
labs <- round(prop.table(M,margin=1), 2)
mosaic(M, pop = FALSE)
labeling_cells(text = labs, margin = 0)(M)

enter image description here

你也可以用简单的方式将它可视化

library(RColorBrewer)
barplot(t(labs),col=brewer.pal(4,"Set2"))

legend("bottomright",legend = colnames(labs),inset=c(0,1.1), xpd=TRUE,
fill =brewer.pal(4,"Set2"),horiz=TRUE,cex=0.7)

enter image description here

如果你使用 ggplot2 和其他 gg 东西,你需要将你的数据转长:

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

df_long = df %>%
pivot_longer(-Class) %>%
group_by(Class) %>%
mutate(total = sum(value),
p = round(100*value/total,digits=1)) %>%
ungroup()

ggplot(df_long,aes(x=Class,y=p,fill=name)) + geom_col() + geom_text(aes(label=p),position=position_stack(vjust=0.2))

enter image description here

如果要使用ggplot2,需要修改这个answer by z.lin ,请注意,我采用 sqrt 使较小的图更明显:

ggplot(df_long,
aes(x = Class, y = p, width = sqrt(total), fill = name)) +
geom_col(colour = "black") +
geom_text(aes(label = p), position = position_stack(vjust = 0.5)) +
facet_grid(~Class, scales = "free_x", space = "free_x") +
theme_void()

enter image description here

关于r - 使用百分比创建马赛克图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64918446/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com