如果我将你的问题与你给出的链接进行比较,那么区别在于链接“自我计数”。这就是我所做的。我不确定这是否适合您的真实数据。
library(ggplot2)
library(dplyr)
mpg %>%
mutate(manufacturer = as.factor(manufacturer),
class = as.factor(class)) %>%
group_by(manufacturer, class) %>%
summarise(count_class = n()) %>%
group_by(manufacturer) %>%
mutate(count_man = sum(count_class)) %>%
mutate(percent = count_class/count_man * 100) %>%
ggplot() +
geom_bar(aes(x = manufacturer,
y = count_man,
group = class,
fill = class),
stat = "identity") +
geom_text(aes(x = manufacturer,
y = count_man,
label = sprintf("%0.1f%%", percent)),
position = position_stack(vjust = 0.5))
编辑,基于注释:
我犯了一个错误的选择了错误的列y
library(ggplot2)
library(dplyr)
mpg %>%
mutate(manufacturer = as.factor(manufacturer),
class = as.factor(class)) %>%
group_by(manufacturer, class) %>%
summarise(count_class = n()) %>%
group_by(manufacturer) %>%
mutate(count_man = sum(count_class)) %>%
mutate(percent = count_class/count_man * 100) %>%
ungroup() %>%
ggplot(aes(x = manufacturer,
y = count_class,
group = class)) +
geom_bar(aes(fill = class),
stat = "identity") +
geom_text(aes(label = sprintf("%0.1f%%", percent)),
position = position_stack(vjust = 0.5))
你的方法,百分比是正确的,但块大小是错误的。但我认为这是正确的方向;让我和dplyr一起玩,看看我能否做对。 – kraussian
我是多么愚蠢!我也会看看并编辑答案! – ricoderks
哇,现在完美了!我也想过这样做,但没有意识到可以使用_ungroup_将汇总数据恢复为原始格式。这是我的缺失环节;谢谢! :) – kraussian