【发布时间】:2020-07-17 22:37:38
【问题描述】:
我在这里创建了一个类似data 的数据框:
set.seed(123)
data <- data.frame(Loc = paste("Loc", seq(1:20), sep = ""),
A = sample(c(0,15,20,25,40),size = 20,replace = T, prob = c(45,25,15,10,5)),
B = sample(c(0,15,20,25,40),size = 20,replace = T, prob = c(45,25,15,10,5)),
C = sample(c(0,15,20,25,40),size = 20,replace = T, prob = c(45,25,15,10,5))
)
data$D <- 100-(data[,2]+data[,3]+data[,4])
data$total <- sample(c(10:20), replace = T, length(data[,1]))
这里,Loc 是一个有 20 个级别的分组变量。每个Loc 代表一个从中获取样本的位置(实际的“样本”不在这里)。 A、B、C 和 D 表示观测值分配到的集群。 A、B、C 和 D 列中每个 Loc 的关联值表示分配给每个群集的每个 Loc 的观察百分比。 total 列表示从每个 Loc 获取的观察总数。例如,Loc1 有 14 个观测值,其中 25% 的观测值被分配到集群 B,75% 的观测值被分配到集群 D。
我制作了一个条形图,在 x 轴上显示 Loc,在 y 轴上显示 total。假设每个集群都将被赋予一个唯一的“颜色”,我试图以这样一种方式为条形着色,即对于给定的Loc,颜色将代表分配给每个集群的观察百分比。例如,假设集群B 是黄色,集群D 是蓝色,那么Loc1 的条形将是25% 的黄色和75% 的蓝色。
我已经尝试了几种变体:
library(tidyverse)
data%>%
pivot_longer(-c(Loc,total), names_to= "Group", values_to = "val")%>%
ggplot(., aes(x=Loc, y=total, col = Group))+
geom_bar(stat = "identity", aes(fill = val))+
geom_text(aes(label = total))
这很接近,但不是我想要的。我怎样才能制作这种情节?如果可能的话,我还想将total 的值移动到每个条的顶部,并将与每种颜色相关联的百分比移动到每个条中“颜色”或“集群”部分的中心。
【问题讨论】: