R 如何将平均值和模式添加到ggplot直方图?

R 如何将平均值和模式添加到ggplot直方图?,r,ggplot2,histogram,mean,mode,R,Ggplot2,Histogram,Mean,Mode,我需要添加一条平均线和模式的值,例如对这类 地块面积: 我用它来计算箱子的数量: bw <- diff(range(cars$lenght)) / (2 * IQR(cars$lenght) / length(cars$lenght)^(1/3)) 168.8168.8171.2176.6176.6177.3192.7192.7192.7178.2 176.8 176.8 176.8 176.8 189.0 189.0 193.8 197.0 141.1 155.9 158.8 157.

我需要添加一条平均线和模式的值,例如对这类 地块面积:

我用它来计算箱子的数量:

bw <- diff(range(cars$lenght)) / (2 * IQR(cars$lenght) / length(cars$lenght)^(1/3))
168.8168.8171.2176.6176.6177.3192.7192.7192.7178.2 176.8 176.8 176.8 176.8 189.0 189.0 193.8 197.0 141.1 155.9 158.8 157.3 157.3 157.3 157.3 157.3 157.3 157.3 174.6 173.2


提前感谢。

我不知道如何复制您的数据,所以我使用了
cars$speed
来代替它

geom_vline
会将垂直线放置在您想要的位置,您可以动态计算原始数据的平均值和模式。但是,如果希望模式作为具有最高频率的直方图单元,可以从ggplot对象中提取该模式

我不太确定如何定义模式,所以我绘制了一系列不同的方法

# function to calculate mode
fun.mode<-function(x){as.numeric(names(sort(-table(x)))[1])}

bw <- diff(range(cars$length)) / (2 * IQR(cars$speed) / length(cars$speed)^(1/3))
p<-ggplot(data=cars, aes(cars$speed)) + 
  geom_histogram(aes(y =..density..), 
                 col="red",
                 binwidth = bw,
                 fill="green", 
                 alpha=1) + 
  geom_density(col=4) + 
  labs(title='Lenght Plot', x='Lenght', y='Times')

# Extract data for the histogram and density peaks
data<-ggplot_build(p)$data
hist_peak<-data[[1]]%>%filter(y==max(y))%>%.$x
dens_peak<-data[[2]]%>%filter(y==max(y))%>%.$x

# plot mean, mode, histogram peak and density peak
p%+%
  geom_vline(aes(xintercept = mean(speed)),col='red',size=2)+
  geom_vline(aes(xintercept = fun.mode(speed)),col='blue',size=2)+
  geom_vline(aes(xintercept = hist_peak),col='orange',size=2)+
  geom_vline(aes(xintercept = dens_peak),col='purple',size=2)+
  geom_text(aes(label=round(hist_peak,1),y=0,x=hist_peak),
            vjust=-1,col='orange',size=5)
计算模式的函数
fun.mode您可以发布部分
汽车$lengh
?另外,我假设您想要
汽车$lengh的平均线和模式
?最后,你想让它们在绘图上显示为垂直线吗?垂直线可能是我认为最好的方式。我把向量放在主坐标上,尝试
+geom_vline(xintercept=mean(cars$lenght),lwd=1,linetype=2,color=“black”)
谢谢,这对平均值有效!!我们可以假设它是最高的箱子吗??或者是找到它的原因??这是一个数据集:要估计模式,请使用
模式
软件包:从这里的答案中获得模式函数:Hi@dulearnaux如果您能帮助我了解如何在直线上绘制值(平均值、中值和模式)以及如何将这些值放入图例中,我将不胜感激。
# function to calculate mode
fun.mode<-function(x){as.numeric(names(sort(-table(x)))[1])}

bw <- diff(range(cars$length)) / (2 * IQR(cars$speed) / length(cars$speed)^(1/3))
p<-ggplot(data=cars, aes(cars$speed)) + 
  geom_histogram(aes(y =..density..), 
                 col="red",
                 binwidth = bw,
                 fill="green", 
                 alpha=1) + 
  geom_density(col=4) + 
  labs(title='Lenght Plot', x='Lenght', y='Times')

# Extract data for the histogram and density peaks
data<-ggplot_build(p)$data
hist_peak<-data[[1]]%>%filter(y==max(y))%>%.$x
dens_peak<-data[[2]]%>%filter(y==max(y))%>%.$x

# plot mean, mode, histogram peak and density peak
p%+%
  geom_vline(aes(xintercept = mean(speed)),col='red',size=2)+
  geom_vline(aes(xintercept = fun.mode(speed)),col='blue',size=2)+
  geom_vline(aes(xintercept = hist_peak),col='orange',size=2)+
  geom_vline(aes(xintercept = dens_peak),col='purple',size=2)+
  geom_text(aes(label=round(hist_peak,1),y=0,x=hist_peak),
            vjust=-1,col='orange',size=5)