ggplot 直方图相对于轴不在正确的位置

Edg*_*cón 4 axis r histogram ggplot2

我试图以这种方式绘制直方图:

# Todo lo haremos con base en un variable aleatoria Uniforme(0,1).
set.seed(26) ; n = 10000
U<-runif(n = n)
# Supongamos que queremos simular de una exponencial.

# Función de distribución: F(X) = 1-exp(-lambda*X) = U
# Entonces, X = F^(-1)(X)= log(1-U)/(-lambda)
lambda = 1/6 # El parámetro de la exponencial que vamos a usar.
X <- log(1-U)/(-lambda)

library(ggplot2)
p <- qplot(X,
           geom="histogram",
           binwidth = 2,  
           main = "Histograma de X", 
           xlab = "Observaciones",  
           # La función "I" hace que no aparezca una descripción.
           fill=I("yellow"), 
           col=I("blue"), 
           alpha=I(0.2),
           xlim=c(0,50))+
  geom_hline(yintercept = 0,col="red",lwd=1)+
  geom_vline(xintercept = 0,col="red",lwd=1)
p
Run Code Online (Sandbox Code Playgroud)

结果是:

在此处输入图片说明

但是正如您所看到的,y 轴和直方图之间有一个空格。如何移动直方图以使其正确定位?

Jak*_*arm 5

要使直方图与 y 轴对齐,您可以在绘图中添加以下代码行:“boundary = 0”

Boundary 和 Center 都是 bin 位置说明符。有关更多详细信息,我已粘贴ggplot2 参考指南中的描述。“对于单个图只能指定一个,中心或边界。中心指定一个箱的中心。边界指定两个箱之间的边界。请注意,如果高于或低于数据范围,事情将移动适当的宽度整数倍。例如,以整数为中心使用宽度 = 1 和中心 = 0,即使 0 超出数据范围。或者,可以使用宽度 = 1 和指定相同的对齐方式边界 = 0.5,即使 0.5 超出数据范围。”

在这种情况下,通过指定边界 = 0,您可以强制箱位置与图形的原点 (0,0) 对齐。

# Todo lo haremos con base en un variable aleatoria Uniforme(0,1).
set.seed(26) ; n = 10000
U<-runif(n = n)
# Supongamos que queremos simular de una exponencial.

# Función de distribución: F(X) = 1-exp(-lambda*X) = U
# Entonces, X = F^(-1)(X)= log(1-U)/(-lambda)
lambda = 1/6 # El parámetro de la exponencial que vamos a usar.
X <- log(1-U)/(-lambda)

library(ggplot2)
p <- qplot(X,
           geom="histogram",
           binwidth = 2,
           boundary = 0, #This controls the bin alignment with the y-axis
           main = "Histograma de X", 
           xlab = "Observaciones",  
           # La función "I" hace que no aparezca una descripción.
           fill=I("yellow"), 
           col=I("blue"), 
           alpha=I(0.2),
           xlim=c(0,50))+
  geom_hline(yintercept = 0,col="red",lwd=1)+
  geom_vline(xintercept = 0,col="red",lwd=1)
#  geom_histogram(binwidth = 1, boundary = 0, closed = "left")
p
Run Code Online (Sandbox Code Playgroud)

现在你的情节应该是这样的:

在此处输入图片说明