我知道如何绘制直方图或其他频率/百分比相关的表格。 但是现在我想知道,如何在表格中获得这些频率值以便在事后使用。从直方图中获取频率值R
我有一个海量数据集,现在我绘制了一个带有一组binwidth的直方图。我想提取与每个binwidth对应的频率值(即y轴上的值)并将其保存在某处。
有人可以帮助我吗? 谢谢!
我知道如何绘制直方图或其他频率/百分比相关的表格。 但是现在我想知道,如何在表格中获得这些频率值以便在事后使用。从直方图中获取频率值R
我有一个海量数据集,现在我绘制了一个带有一组binwidth的直方图。我想提取与每个binwidth对应的频率值(即y轴上的值)并将其保存在某处。
有人可以帮助我吗? 谢谢!
从?hist
: 值
类 “直方图”,这是与组件的列表的对象:
breaks
和density
提供几乎所有你需要:
histrv<-hist(x)
histrv$breaks
histrv$density
的hist
函数返回值(histogram
类的对象):
R> res <- hist(rnorm(100))
R> res
$breaks
[1] -4 -3 -2 -1 0 1 2 3 4
$counts
[1] 1 2 17 27 34 16 2 1
$intensities
[1] 0.01 0.02 0.17 0.27 0.34 0.16 0.02 0.01
$density
[1] 0.01 0.02 0.17 0.27 0.34 0.16 0.02 0.01
$mids
[1] -3.5 -2.5 -1.5 -0.5 0.5 1.5 2.5 3.5
$xname
[1] "rnorm(100)"
$equidist
[1] TRUE
attr(,"class")
[1] "histogram"
以防万一有人打考虑到ggplot
的geom_histogram
这个问题,请注意,有一种方法可以从ggplot对象中提取数据。
以下方便函数输出与每个仓(xmin
),每个仓(xmax
)的上限的下限的数据帧中,每个仓(x
),以及频率值的中点( y
)。
## Convenience function
get_hist <- function(p) {
d <- ggplot_build(p)$data[[1]]
data.frame(x = d$x, xmin = d$xmin, xmax = d$xmax, y = d$y)
}
# make a dataframe for ggplot
set.seed(1)
x = runif(100, 0, 10)
y = cumsum(x)
df <- data.frame(x = sort(x), y = y)
# make geom_histogram
p <- ggplot(data = df, aes(x = x)) +
geom_histogram(aes(y = cumsum(..count..)), binwidth = 1, boundary = 0,
color = "black", fill = "white")
插图:
hist = get_hist(p)
head(hist$x)
## [1] 0.5 1.5 2.5 3.5 4.5 5.5
head(hist$y)
## [1] 7 13 24 38 52 57
head(hist$xmax)
## [1] 1 2 3 4 5 6
head(hist$xmin)
## [1] 0 1 2 3 4 5
一个相关的问题我回答了这里(Cumulative histogram with ggplot2)。
Aaaah,刚刚得到了相同的想法,并想发布这个!你的速度更快:-) – TMS
你还应该注意到他应该使用'plot = FALSE',这样他才能得到结果而不绘制直方图。 – TMS
有没有一种方法没有hist? 我想使用自定义休息的hist,它不起作用。还有别的吗? – xealits