有没有一种方法可以使用 ggplot 在 R 中创建直方图,以便只显示突出的箱子的垂直线?

Is there a way to create a histogram in R using ggplot so that only the vertical lines of the bins that are protruding show?

我目前正在使用 ggplot 在 R 中创建一些直方图,这些直方图有很多 bin 和一个大数据集(850 000 个元素)。

因此,由于距离很近,每个 bin 的垂直线都用线条颜色填充了直方图下方的区域。理想情况下,我希望这一点清楚,这样我就可以在同一个图上绘制另一个直方图。

理想情况下,我想要一个直方图,其中的 bin 线隐藏在它们与另一个 bin 重叠的地方,因此它看起来类似于线图。

下面是我使用的 ggplot 代码:

ggplot(df, aes(x=eev)) +
  geom_histogram(binwidth = 18,color="black") +
  xlim(0,10000) +
  scale_y_log10(name="Log of Counts", labels = scales::comma) +
  xlab("Incident Energy in eV")

我真的不能 fiddle 容器大小太大,因为我需要来自 naarrow 容器的定义。

我已经查看了 ggplot 文档,但找不到我想要的内容。

干杯

编辑: 按照 MrFlicks 的建议,我制作了一些可重现的代码

a<-runif(10000, 0, 10)
b<-seq(0,9.999, by = 1/1000)
var<-data.frame(a,b)

ggplot(var, aes(x=a)) +
         geom_histogram(binwidth = 0.3, col = "black", fill = "#ffffff00")

这给出了以下输出 Histogram with bin lines

但是我需要最终的直方图看起来像这样

Histogram without overlapping bin lines

我不能使用 geom_freqpoly,因为数据需要以直方图的形式呈现。

Here is the current histogram for some of the real data

再次欢呼。

另外,抱歉,如果我的 post 布局关闭等,这是第一次 post 堆栈溢出

也许使用 hist 生成值然后在 ggplot 中绘制:

library(ggplot2)
set.seed(1)
x = hist(rchisq(1000, df = 4), 100)
df = data.frame(
  x = rep(x$breaks, each=2), 
  y = c(0, rep(x$counts, each = 2), 0))
  
ggplot(df, aes(x,y)) + 
  geom_polygon(fill='grey80') +
  geom_line(col='red') 

设置透明 color 像 #ffffff00(最后两位数字将不透明度设置为零)应该可以解决问题。控制 fill 颜色(直方图列的内部),嗯:fill.

示例:

data.frame(x = rnorm(10000)) %>%
    ggplot() + 
    geom_histogram(aes(x), 
                   fill = 'blue', 
                   binwidth = .025,
                   col='#ffffff00'
                   )

请注意,虽然您可以使用 size 参数增加列的边框粗细,但设置 size = 0 不会完全删除边框。