必须有一种不那么笨拙的方法来汇总条形图中的平均值。我预计fill会返回所有计数的均值。请查看MWE,包括周围的工作。
# Some data
Machine <- c( "A", "B", "B", "B", "B", "C","D", "E", "F", "G", "H", "I", "J", "K", "G","H", "G")
Efficiency <- c(93.3, 95.0, 95.0, 99.1, 84.1, 95.8, 91.2, 82.9, 73.1, 93.7, 86.6, 68.1, 78.5, 68.5, 86.6, 90.0, 97.3)
gt <- data.frame(Machine, Efficiency)
ggplot(gt, aes(x=Machine, fill = Efficiency)) + geom_bar()
# This is not what I expected so...
library(dplyr)
gt2 <- gt %>% group_by(Machine) %>% mutate(mean(Efficiency))
names(gt2) <- c("Machine", "Efficiency", "Mean_Efficiency")
ggplot(gt2, aes(x=Machine, fill = Mean_Efficiency)) +
geom_bar(stat = "count")
# This is what I want (and mistakenly expected)有没有一种更优雅的方法来根据平均效率给条形着色?
发布于 2020-03-08 17:21:00
第一次尝试没有给出预期结果的原因是,ggplot2不知道它是您想用来填充的Efficiency的平均值。
因此,最好的解决方案是预先计算平均值。然而,您的图依赖于两个摘要:一个是您预计算的平均值,另一个是您让ggplot2 (或者更具体地说,由geom_bar()使用的stat_count() )为您做的计数。如果发现摘要的这种混合方法有点令人困惑,则倾向于按如下方式预先计算这两个摘要:
gt2 <- gt %>%
group_by(Machine) %>%
summarize(count = n(),
mean_efficiency = mean(Efficiency)) 然后,您可以使用geom_col()而不是geom_bar(),因为前者采用显式y-aesthetic而不是绘制计数:
ggplot(gt2, aes(x = Machine, y = count, fill = mean_efficiency)) +
geom_col()

请注意,此解决方案并不比您的解决方案更正确。你喜欢哪一个就看你的了。
发布于 2020-03-08 17:40:03
如果从aes内部调用ave,则不需要进行预计算。
ggplot(gt, aes(x=Machine, fill = ave(Efficiency,Machine))) + geom_bar()也就是说,直接将fill美学设置为机器效率的平均值。对我来说,这是一种更自然、更易读的方法,但正如其他人所说,这是一个品味问题。
如果要设置图例标题,请使用(例如) +labs(fill="Mean efficiency")

发布于 2020-03-08 16:40:19
你在绘制之前计算均值的方法是完全正确的。fill不会为你做这件事。但是,您的代码可以更简洁,而不必总是设置名称。(;
library(ggplot2)
library(dplyr)
# Some data
gt <- data.frame(
Machine = c( "A", "B", "B", "B", "B", "C","D", "E", "F", "G", "H", "I", "J", "K", "G","H", "G"),
Efficiency = c(93.3, 95.0, 95.0, 99.1, 84.1, 95.8, 91.2, 82.9, 73.1, 93.7, 86.6, 68.1, 78.5, 68.5, 86.6, 90.0, 97.3)
)
# aggregate(Efficiency~Machine, data=gt, FUN = mean)
gt <- gt %>%
group_by(Machine) %>%
mutate(Mean_Efficiency = mean(Efficiency)) %>%
ungroup()
ggplot(gt, aes(x = Machine, fill = Mean_Efficiency)) +
geom_bar()https://stackoverflow.com/questions/60585439
复制相似问题