ggplot直方图与轴的位置不正确

4

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

# 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

结果如下:

enter image description here

但是你可以看到,y轴和柱状图之间有一段空白。我该如何移动柱状图以使其正确定位?


另请参见此处stevec的答案,该答案相关:https://dev59.com/81gR5IYBdhLWcg3wT7xM - Wu Wei
1个回答

5
为了使直方图与y轴对齐,您可以将以下代码行添加到您的绘图中:"boundary = 0"。Boundary和Center都是bin位置说明符。有关更多详细信息,请参见ggplot2参考指南中的描述。对于单个绘图,只能指定一个center或boundary。Center指定一个bin的中心。Boundary指定两个bin之间的边界。请注意,如果任何一个超出数据范围,事物将会被适当的整数倍宽度移动。例如,要以整数为中心使用width = 1和center = 0,即使0在数据范围之外也可以。或者,即使0.5超出了数据范围,也可以使用width = 1和boundary = 0.5来指定相同的对齐方式。在这种情况下,通过指定boundary = 0,您可以强制bin位置与图形原点(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

现在你的图应该是这样的:

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接