我想在已生成的plot()
窗口中添加变量分布的直方图。这个脚本是大量定制的,我只能添加它。我无法使用hist()
进行绘图。 X轴是连续的比例,Y比例是概率[0,1](编辑:其中一个y轴是另一个是连续的概率)。如何在已生成的plot()
上添加条形来表示此变量的分布?只有Base-R
到目前为止我所做的是plot()
,然后使用lines(hist()$breaks, hist()$density, type="h")
进行分发,然而我只提供了行hist()
根据我的理解boxplot()
获得了帮助,而barplot()
要求的因素不是连续缩放变量(就像我一样)。
更新: hist(...,add=T)
选项对我不起作用。我希望在line()
解决方案中具有灵活性(因此能够转换x和y向量),而不是用于绘制框的行。有什么想法吗?
答案 0 :(得分:6)
您对lines()
的想法可行,但您必须使用mids
代替x
值的中断,并使用参数lwd=
使您的行更宽。参数lend="butt"
将确保线条不会四舍五入。
set.seed(123)
x<-rnorm(100)
zz<-hist(x)
plot(x=c(-2.5,2.5),y=c(0,1),type="n")
lines(zz$mids, zz$density, type="h",lwd=50,lend="butt")
要获得类似盒子的东西(因为那些是你不能改变它们的线条),你可以用不同的颜色和不同的宽度绘制彼此上面的两条线,并将所有密度值改变少量。
plot(x=c(-2.5,2.5),y=c(0,1),type="n")
lines(zz$mids, zz$density, type="h",lwd=50,lend="butt")
lines(zz$mids, zz$density-0.005, type="h",lwd=48,lend="butt",col="white")
答案 1 :(得分:5)
您只需使用hist()
将add = TRUE
绘图添加到现有的绘图中即可。不要忘记使用freq = FALSE
来表示你想要概率尺度,而不是计数尺度。
set.seed(123)
x<-rnorm(100)
plot(x, exp(x)/(1+exp(x)), col = "green") # some plot
hist(x, freq = FALSE, add = TRUE)
编辑:如果您需要对计算的直方图执行任何操作,您可以通过将hist
调用分为计算和绘图本身来替换rect()
调用,这是使用{{{ 1}}(参见source code of plot.histogram
):
h <- hist(x, plot = FALSE) # computation
rect(h$breaks[-length(h$breaks)], 0, h$breaks[-1], h$intensities) # plotting
答案 2 :(得分:1)
您只需在lines
返回的对象上调用hist
:
h <- hist(..., plot=FALSE)
# Other plotting functions go here.
lines(h) # will now plot the histogram in the plotting window.