【问题标题】:Adding to hist()-like bars in plot()在 plot() 中添加类似 hist() 的条形
【发布时间】:2014-01-15 19:05:53
【问题描述】:

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

【问题讨论】:

  • 一遍又一遍地重读你的问题的标题,我认为英文一定有错误......不过不知道如何更正。
  • “将直方图添加到现有绘图窗口”?
  • 完成。感谢您的更正。

标签: r plot histogram distribution bar-chart


【解决方案1】:

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

【讨论】:

  • 感谢$mid 提示(+1)。有什么方法可以绘制框而不是lwd=50 的行?
  • 很好,但请注意hist 实际上使用的是rect,而不是lines
【解决方案2】:

您可以使用add = TRUE 简单地将hist() 图添加到现有图。不要忘记使用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() (见source code of plot.histogram):

h <- hist(x, plot = FALSE) # computation
rect(h$breaks[-length(h$breaks)], 0, h$breaks[-1], h$intensities) # plotting

【讨论】:

  • 谢谢,但由于自定义 y 轴限制(我无法更改)检查 x&lt;-rnorm(100, mean=10, sd=5),它并不完全有效。 hist()实际上是如何绘制“盒子”的?
  • @ECII,好问题。 hist() 实际上是使用 rect() 函数绘制方框。请查看我的更新答案。
【解决方案3】:

你可以简单地在hist返回的对象上调用lines

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

【讨论】:

  • 谢谢,但我不能用这个。检查我对托马斯回答的评论
  • 我已经阅读了更新和 cmets,但我很困惑为什么 hist 使用 rect 是个问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-18
  • 1970-01-01
  • 2019-05-30
  • 1970-01-01
  • 1970-01-01
  • 2020-08-09
  • 1970-01-01
相关资源
最近更新 更多