gpt4 book ai didi

r - 有没有更优雅的方法用数据平均值为 ggplot 条着色?

转载 作者:行者123 更新时间:2023-12-02 09:03:50 24 4
gpt4 key购买 nike

必须有一种不太笨拙的方法来总结条形图中的平均值。我期望 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)

是否有更优雅的方法根据平均效率为条形着色?

最佳答案

您第一次尝试未给出预期结果的原因是 ggplot2 无法知道您要用于填充的 效率 的平均值。它也可能是总和或中位数,而 ggplot2 不试图猜测它不知道的东西是正确的。

因此,最好的解决方案是预先计算平均值。然而,您的绘图依赖于两个摘要:一个是您预先计算的平均值,另一个是您让 ggplot2 计算的计数(或者更具体地说,stat_count() )由 geom_bar() 使用)为您做的事情。如果发现这种摘要方法的混合有点令人困惑,并且更愿意按如下方式预先计算两个摘要:

gt2 <- gt %>%
group_by(Machine) %>%
summarize(count = n(),
mean_efficiency = mean(Efficiency))

然后,您可以使用 geom_col() 而不是 geom_bar(),因为前者采用显式 y 美学而不是绘制计数:

ggplot(gt2, aes(x = Machine, y = count, fill = mean_efficiency)) +
geom_col()

enter image description here

请注意,这个解决方案并不比您的更正确。对我来说,它比你的解决方案更清晰,但这当然也是一个品味问题。这取决于你更喜欢哪个。

关于r - 有没有更优雅的方法用数据平均值为 ggplot 条着色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60585439/

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