有没有一种方法可以使用 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 不会完全删除边框。
我目前正在使用 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 不会完全删除边框。