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

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

我试图以此方式绘制直方图:

# 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轴和直方图之间有一个空格。如何移动直方图以使其正确定位?

r ggplot2 histogram axis
1个回答
0
投票

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

Boundary和Center都是bin位置说明符。有关更多详细信息,我从ggplot2 reference guide中粘贴了说明。 “只能为单个图指定一个中心或边界。中心指定两个容器之一的中心。边界指定两个容器之间的边界。请注意,如果其中一个位于数据范围之上或之下,可以将其偏移适当的宽度整数倍,例如,以0为中心且以0为中心,即使0在数据范围之外,也可以使用width = 1和center = 0。边界= 0.5,即使0.5在数据范围之外。“

在这种情况下,通过指定boundary = 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

现在您的情节应该看起来像这样:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.