【问题标题】:How to plot a histogram with vertical lines in between removed?如何绘制删除了垂直线之间的直方图?
【发布时间】:2016-07-07 18:01:06
【问题描述】:

我有一个像这样的变量的直方图

aa=-(a$mmag)/2.5
hist(10^(aa),breaks=40,xlab=expression(paste(mu)),ylab=NA)

如何分散中间的垂直线?

【问题讨论】:

  • 我相信hist 没有任何选择可以做到这一点。您可能需要生成自己的函数来模仿该功能。 (通过“漫射”我推断您​​的意思是“完全移除”)。
  • 请发reproducible example。你到底在说什么台词?
  • 抱歉给您造成了混淆......每个条之间的垂直线
  • 我正在评论您提出的其他 6 个问题,但您只接受了 2 个问题。我并不是要刻薄,尽管我知道它是那样的。一些 SO 回答者的一个共同习惯(我认为)是查看您为特定问题和过去的问题付出了多少努力。在您的情况下,您已回答 2,但未回答 4,因此我会稍微推动以接受答案(即使是您自己的)或评论为什么它们不起作用。
  • 你已经用这个做了 7 个。您可以点击您的用户名查看您的个人资料,包括提出的问题。

标签: r plot histogram


【解决方案1】:

这是我能想到的唯一解决方案:

hist(rnorm(1000), col = "grey", border = "grey")

基本上我们将线条颜色 (border) 和填充颜色 (col) 设置为相同。不要尝试设置“白色”;你什么都看不到。

【讨论】:

  • 谢谢..这很容易...但是如果我需要整个直方图的黑色轮廓而中间没有线条怎么办?
  • 有更新我会回来的...@Zheyun Li
【解决方案2】:

这是一个应该完成它的功能......随意编辑!

empty_hist <- function(x,...) {
  histo <- hist(x,plot=F)
  plot(NA,xlim=c(min(histo$breaks),max(histo$breaks)),ylim=c(0,max(histo$counts)),xlab="",ylab="count",...=...)
  segments(x0=histo$breaks[1:(length(histo$breaks)-1)],x1=histo$breaks[2:length(histo$breaks)],y0=histo$counts,y1=histo$counts)
  segments(x0=histo$breaks[2:(length(histo$breaks)-1)],x1=histo$breaks[2:(length(histo$breaks)-1)],y0=histo$counts[1:(length(histo$counts)-1)],y1=histo$counts[2:(length(histo$counts))])
  segments(x0=histo$breaks[c(1,length(histo$breaks))],x1=histo$breaks[c(1,length(histo$breaks))],y0=c(0,0),y1=histo$counts[c(1,length(histo$counts))])
  abline(h=0)
}
x <- rnorm(100)
empty_hist(x, main="here's a title")

【讨论】:

  • @ZheyuanLi 对不起,我不是故意让你觉得我偷了你的想法。说实话,直到我发布我的解决方案后我才看到你的评论,我承认这与你的非常相似!请记住,hist()segments() 是相当常用的函数,研究人员独立获得相同结果的情况并不少见。不过,我会以善意的姿态支持您的解决方案。