我知道如何绘制直方图或其他频率/百分比相关表.但是现在我想知道,如何在表格中使用这些频率值以便在事后使用.
我有一个庞大的数据集,现在我绘制一个设置binwidth的直方图.我想提取对应于每个binwidth的频率值(即y轴上的值)并将其保存在某处.
有人可以帮我这个吗?谢谢!
我一直在尝试用ggplot 2在我的直方图上叠加一条正常曲线.
我的公式:
data <- read.csv (path...)
ggplot(data, aes(V2)) +
geom_histogram(alpha=0.3, fill='white', colour='black', binwidth=.04)
Run Code Online (Sandbox Code Playgroud)
我尝试了几件事:
+ stat_function(fun=dnorm)
Run Code Online (Sandbox Code Playgroud)
....没有改变任何事情
+ stat_density(geom = "line", colour = "red")
Run Code Online (Sandbox Code Playgroud)
...在x轴上给了我一条直线红线.
+ geom_density()
Run Code Online (Sandbox Code Playgroud)
对我不起作用,因为我想将我的频率值保持在y轴上,并且不需要密度值.
有什么建议?
提前感谢任何提示!
找到解决方案
+geom_density(aes(y=0.045*..count..), colour="black", adjust=4)
绘制具有对于非标准化数据总和为1的密度曲线的直方图是非常困难的.关于此问题已有很多问题,但他们的解决方案都不适用于我的数据.需要有一个简单的解决方案.我找不到一个有效的简单解决方案的答案.
一些例子:
解决方案仅适用于标准化的正常数据 ggplot2:使用密度曲线叠加直方图
具有离散数据且无密度曲线 ggplot2密度直方图,宽度= .5,vline和居中条位置
在我的数据上,密度不总和为1 在ggplot2中创建密度直方图?
我的数据ggplot2密度直方图与自定义bin边缘不总和为1
这里用例子详细解释,但密度不是1,我的数据 "密度"曲线覆盖在直方图上,其中垂直轴是频率(即计数)或相对频率?
-
一些示例代码:
#Example code
set.seed(1)
t = data.frame(r = runif(100))
#first we try the obvious simple solution that should work
ggplot(t, aes(r)) +
geom_histogram() +
geom_density()
Run Code Online (Sandbox Code Playgroud)
所以,显然密度不等于1.
#maybe geom_histogram needs a ..density.. ?
ggplot(t, aes(r)) +
geom_histogram(aes(y = ..density..)) +
geom_density()
Run Code Online (Sandbox Code Playgroud)
它确实改变了一些东西,但不正确.
#maybe geom_density needs a ..density.. too ?
ggplot(t, aes(r)) +
geom_histogram(aes(y = ..density..)) +
geom_density(aes(y = ..density..))
Run Code Online (Sandbox Code Playgroud)
那里没有变化.
#maybe binwidth …Run Code Online (Sandbox Code Playgroud) 我知道我可以通过以下方式将密度曲线拟合到 ggplot 中的直方图。
df = data.frame(x=rnorm(100))
ggplot(df, aes(x=x, y=..density..)) + geom_histogram() + geom_density()
Run Code Online (Sandbox Code Playgroud)
但是,我希望我的 y 轴是频率(计数)而不是密度,并保留适合分布的曲线。我怎么做?
我想将 ggplot 直方图(y 轴 = 计数)与经验密度曲线和正态密度曲线叠加。我试过:
library(ggplot2)
set.seed(1234)
v <- as_tibble(rnorm(1000, 10, 2.5))
ggplot(v, aes(x = value)) +
geom_histogram(aes(y = ..density..),
bins = 40, colour = "black", fill = "white") +
geom_line(aes(y = ..density.., color = 'Empirical'), stat = 'density') +
stat_function(fun = dnorm, aes(color = 'Normal'),
args = list(mean = 10, sd = 2.5)) +
scale_colour_manual(name = "Colors", values = c("red", "blue"))
Run Code Online (Sandbox Code Playgroud)
但这具有 y 尺度的密度,并且我希望频率作为 y 轴。
我的第二次试验生成了以频率(计数)为 y 轴但仅以经验密度为基础的图。
library(ggplot2)
set.seed(1234)
v <- as_tibble(rnorm(1000, 10, 2.5))
b <- …Run Code Online (Sandbox Code Playgroud)