R中正态分布的直方图,使用ggplot2进行说明

R中正态分布的直方图,使用ggplot2进行说明,r,ggplot2,R,Ggplot2,我正试图用ggplot2绘制直方图 我在R中为此编写了一个简单的代码 dnorm.count <- function(x, mean = 0, sd = 1, log = FALSE, n = 1, binwidth = 1){ n * binwidth * dnorm(x = x, mean = mean, sd = sd, log = log) } mtcars %>% ggplot(aes(x = mpg)) + geom_histogram(bins =60

我正试图用ggplot2绘制直方图

我在R中为此编写了一个简单的代码

dnorm.count <- function(x, mean = 0, sd = 1, log = FALSE, n = 1, binwidth = 1){
  n * binwidth * dnorm(x = x, mean = mean, sd = sd, log = log) 
}
mtcars %>% 
  ggplot(aes(x =  mpg)) +
  geom_histogram(bins =60,color = "white", fill = "#9FE367",boundary = 0.5) +
  geom_vline(aes(xintercept = mean(mpg)), 
             linetype="dashed",
             size = 1.6, 
             color = "#FF0000")+
  geom_text(aes(label = ..count..), stat= "count",vjust = -0.6)+
  stat_function(fun = dnorm.count, color = "#6D67E3", 
                args = list(mean= mean(mtcars$mpg), 
                            sd = sd(mtcars$mpg),
                            n = nrow(mtcars)), 
                lwd = 1.2) +
  scale_y_continuous(labels = comma, name = "Frequency") +
  scale_x_continuous(breaks=seq(0,max(mtcars$mpg)))+
  geom_text(aes(label = paste0("mean = ", round(mean(mtcars$mpg), 2)), 
                x = mean(mtcars$mpg)*1.2, 
                y  = mean(mtcars$mpg)/5))+
  geom_vline(aes(xintercept = sd(mpg)), linetype="dashed",size = 1.6, color = "#FF0000") 
dnorm.count%
ggplot(aes(x=mpg))+
几何图形柱状图(bins=60,color=“white”,fill=“#9FE367”,边界=0.5)+
几何线(aes(xintercept=平均值(mpg)),
linetype=“虚线”,
尺寸=1.6,
color=“#FF0000”)+
几何图形文本(aes(标签=…计数…),stat=“计数”,vjust=-0.6)+
stat_函数(fun=dnorm.count,color=“#6D67E3”,
args=列表(平均值=平均值(mtcars$mpg),
sd=sd(mtcars$mpg),
n=nrow(mtcars)),
lwd=1.2)+
连续缩放(标签=逗号,名称=“频率”)+
比例x连续(中断=顺序(0,最大(mtcars$mpg)))+
几何图形文本(aes(标签=paste0(“平均值=”,圆形(平均值(mtcars$mpg),2)),
x=平均值(mtcars$mpg)*1.2,
y=平均值(mtcars$mpg)/5)+
几何图形(aes(xintercept=sd(mpg)),线型=“虚线”,尺寸=1.6,颜色=“#FF0000”)
我得到的是这个

问题是如何绘制类似于此的直方图

使用ggplot2,是否可以将代码转换为R函数

编辑:为了更好地解释我要做的事情:



我想创建一个直方图,与使用ggplot2附加以供参考的直方图完全相同,然后我想为其创建一个函数,以减少编码。使用您喜欢的任何软件包+ggplot2。柱状图应具有描述标准偏差和平均值的线条,如参考中的线条。如果可能的话,将绘图中的标准偏差描述为参考图像,这就是我试图实现的。

如果你问如何绘制直方图,就像你在上一幅图中所附的直方图,这9行代码会产生非常相似的结果

library(magrittr) ; library(ggplot2)
set.seed(42)
data <- rnorm(1e5)
p <- data %>%
  as.data.frame() %>%
  ggplot(., aes(x = data)) +
  geom_histogram(fill = "white", col = "black", bins = 30 ) +
  geom_density(aes( y = 0.3 *..count..)) +
  labs(x = "Statistics", y = "Probability/Density") +
  theme_bw() + theme(axis.text = element_blank())

这段代码将为您提供如下内容:

1。包括所有使用过的包装;2.解释什么是逗号;3.解释你想在绘图中改变什么(主题、水平线、西格玛符号等)?1。使用的包装为ggplot2和SCALE,重塑2.@PoGibas可以添加西格玛符号吗?那么你的问题是如何将西格玛符号添加到ggplot图中?是的,如果我能做到这一点,我会很高兴知道你所附的图上是否也可以描绘标准偏差线?非常感谢,这能帮助我们更好地显示垂直线吗?
p+geom_vline(xintercept=sd(数据)/2,linetype=2,col=“red”)
应执行此操作。更改
xintercept
以将它们移动到您最喜欢的位置。为什么选择sd(数据)/2?我的意思是为什么把2除以?
p + annotate(x = sd(data)/2 , y = 8000, geom = "text", label = "σ", size = 10) +
    annotate(x = sd(data) , y = 6000, geom = "text", label = "2σ", size = 10) +
    annotate(x = sd(data)*1.5 , y = 4000, geom = "text", label = "3σ", size = 10) +     
    geom_segment(x = 0, xend = sd(data), y = 7500, yend = 7500) +
    geom_segment(x = 0, xend = sd(data)*2, y = 5500, yend = 5500) +
    geom_segment(x = 0, xend = sd(data)*3, y = 3500, yend = 3500)