gpt4 book ai didi

r - 在分组和没有子分组图的情况下堆叠条形图

转载 作者:行者123 更新时间:2023-12-01 13:18:58 25 4
gpt4 key购买 nike

有人已经解释了分组条形图中的堆叠条形 here

test <- data.frame(person = c("group 1", "group 2", "group 3"), 
value1 = c(100, 150, 120), # male
value2 = c(25, 30, 45) , # female
value3 = c(25, 30, 45), # male
value4 = c(100, 120, 150), # female
value5 = c(10, 12, 15), # male
value6 = c(50, 40, 70)) # female

library(reshape2) # for melt

melted <- melt(test, "person")

melted$cat <- ''
melted[melted$variable == 'value1' | melted$variable == 'value2',]$cat <- "sub group 1"
melted[melted$variable == 'value3' | melted$variable == 'value4',]$cat <- "sub group 2"
melted[melted$variable == 'value5' | melted$variable == 'value6',]$cat <- "sub group 3"
melted$gender <- ''
melted[melted$variable %in% sprintf("value%i",c(1,3,5)),]$gender <- "female"
melted[melted$variable %in% sprintf("value%i",c(2,4,6)),]$gender <- "male"


p = ggplot(melted, aes(x = cat, y = value, fill = gender))

p +
geom_bar(stat = 'identity', position = 'stack') +
facet_grid(~ person) +
scale_fill_manual(values = c("orangered","dodgerblue2")) +
theme(panel.background = element_rect(fill = 'white'))

我想添加另一个组,但该组中没有子组。 ggplot2 中是否有任何命令或函数可以做到这一点?

谢谢

最佳答案

假设您将所有内容都放在一个数据集中,您只需在 facet_grid() 行中添加少量内容即可重用当前代码:

melted2 <- rbind(melted,
data.frame(person = rep("group 4", times = 2),
variable = NA,
value = c(80, 20),
cat = "no subgroup",
gender = c("female", "male")))

ggplot(melted2,
aes(x = cat, y = value, fill = gender)) +
geom_col(position = 'stack') + # geom_col() is equivalent to geom_bar(stat = "identity")
facet_grid(~ person, scales = "free_x", space = "free_x") +
scale_fill_manual(values = c("orangered", "dodgerblue2")) +
theme(panel.background = element_rect(fill = 'white'))

plot

scales = "free_x" 告诉每个方面只显示出现在该方面的猫值。 space = "free_x" 相应地调整每个面的大小,使所有条形的宽度相同。

关于r - 在分组和没有子分组图的情况下堆叠条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51660985/

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