r - 如何根据频率表绘制密度

标签 r plot

给定下面的频率表:

> print(dat)
V1    V2
1  1 11613
2  2  6517
3  3  2442
4  4   687
5  5   159
6  6    29

# V1 = Score
# V2 = Frequency

我们如何绘制密度(即 y 轴范围从 0 到 1.0)。

目前我有以下频率图:

plot(0,main="table",type="n");
lines(dat,lty=1)

# I need to use lines() and plot() here, 
# because need to make multiple lines in single plot

不确定如何处理密度。

最佳答案

假设每一行都是一个单独的 block ,每个 block 的密度将为 V2/sum(V2)

为您的数据

dat <- data.frame(V1 = 1:6, V2 = c(11613, 6517, 2442, 687, 159, 29))

我得到:

> with(dat, V2 / sum(V2))
[1] 0.541474332 0.303865342 0.113862079 0.032032452 0.007413624 0.001352170

我们可以使用 R 的工具进行检查。首先扩展你的紧凑频率表

dat2 <- unlist(apply(dat, 1, function(x) rep(x[1], x[2])))

然后使用hist()来计算我们想要的值

dens <- hist(dat2, breaks = c(0:6), plot = FALSE)

查看生成的对象:

> str(dens)
List of 7
 $ breaks     : int [1:7] 0 1 2 3 4 5 6
 $ counts     : int [1:6] 11613 6517 2442 687 159 29
 $ intensities: num [1:6] 0.54147 0.30387 0.11386 0.03203 0.00741 ...
 $ density    : num [1:6] 0.54147 0.30387 0.11386 0.03203 0.00741 ...
     $ mids       : num [1:6] 0.5 1.5 2.5 3.5 4.5 5.5
 $ xname      : chr "dat2"
 $ equidist   : logi TRUE
 - attr(*, "class")= chr "histogram"

注意 density 组件,它是:

> dens$density
[1] 0.541474332 0.303865342 0.113862079 0.032032452 0.007413624 0.001352170

这与我根据原始频率表表示进行的手动计算一致。

至于绘图,如果你只想绘制密度而不是尝试:

dat <- transform(dat, density = V2 / sum(V2))
plot(density ~ V1, data = dat, type = "n")
lines(density ~ V1, data = dat, col = "red")

如果你想强制轴限制做:

plot(density ~ V1, data = dat, type = "n", ylim = c(0,1))
lines(density ~ V1, data = dat, col = "red")

关于r - 如何根据频率表绘制密度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10412300/

相关文章:

image - 如何在 MATLAB 中保存绘制的图像并保持原始图像大小?

r - 如何绘制两个固定分类值的比较以进行另一个连续变量的线性回归

r - 如何使用不带大括号的管道将值传递给 `filter` 函数?

r - 你如何在 R 中对逻辑回归进行功效分析?

r - 需要在网格中的图形中有序地排列 GAM 系数

python - 使用matplotlib : plot error bars on two y axes

r - R中的移动方差

r - 如何以 Shiny 的方式正确输出 Plotly 图?

Matlab 绘制三维矩阵

r - 如何使用 colnames 作为循环的主标题