添加到hist() - 与plot()中的条形图

时间:2013-12-28 10:19:05

标签: r plot histogram distribution bar-chart

我想在已生成的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向量),而不是用于绘制框的行。有什么想法吗?

3 个答案:

答案 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")

enter image description here

更新

要获得类似盒子的东西(因为那些是你不能改变它们的线条),你可以用不同的颜色和不同的宽度绘制彼此上面的两条线,并将所有密度值改变少量。

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")

enter image description here

答案 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

enter image description here

答案 2 :(得分:1)

您只需在lines返回的对象上调用hist

h <- hist(..., plot=FALSE)
# Other plotting functions go here.
lines(h) # will now plot the histogram in the plotting window.