有没有一种更优雅的方法可以用数据平均值对ggplot条进行着色?

问题描述 投票:0回答:1

必须有一种不太笨拙的方法来汇总条形图中的平均值。我期望填充返回所有计数的均值。查看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)
# aggregate(Efficiency~Machine, data=gt, FUN = mean)

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)
rm(gt,gt2, Machine, Efficiency) # Tidy up and thanks for running this

如果没有美丽的东西出现,我只需要克服它!

安德鲁

r ggplot2 dplyr fill
1个回答
0
投票

您在绘图前计算均值的方法是绝对正确的。 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()
© www.soinside.com 2019 - 2024. All rights reserved.