获取因子频率的直方图(摘要)

时间:2011-04-27 12:38:31

标签: r plot histogram frequency-distribution

我有一个有许多不同价值观的因素。如果执行summary(factor),则输出是不同值及其频率的列表。像这样:

A B C D
3 3 1 5

我想制作频率值的直方图,即X轴包含发生的不同频率,Y轴是具有该特定频率的因子的数量。完成这样的事情的最佳方法是什么?

编辑:感谢下面的答案,我发现我能做的就是从表中获取频率因子,在表格中得到它,然后绘制图形,这看起来像(如果{{ 1}}是因素):

f

1 个答案:

答案 0 :(得分:27)

根据澄清的问题更新

set.seed(1)
dat2 <- data.frame(fac = factor(sample(LETTERS, 100, replace = TRUE)))
hist(table(dat2), xlab = "Frequency of Level Occurrence", main = "")

给出:

histogram of frequency of occurrence in factor

我们只是将hist()直接应用于table(dat)的结果。 table(dat)提供每个因子级别的频率,hist()生成这些数据的直方图。


<强>原始

有几种可能性。您的数据:

dat <- data.frame(fac = rep(LETTERS[1:4], times = c(3,3,1,5)))

以下是第三栏,从第一栏开始,从上到下:

  • "table"的默认绘图方法,绘制数据和类似柱状图的条
  • 条形图 - 这可能就是你的直方图。注意这里的墨水信息比率低
  • 点图或点图;显示与其他图表相同的信息,但每单位信息使用的墨水少得多。优选的。

生成它们的代码:

layout(matrix(1:4, ncol = 2))
plot(table(dat), main = "plot method for class \"table\"")
barplot(table(dat), main = "barplot")
tab <- as.numeric(table(dat))
names(tab) <- names(table(dat))
dotchart(tab, main = "dotchart or dotplot")
## or just this
## dotchart(table(dat))
## and ignore the warning
layout(1)

这会产生:

one dimensional plots

如果您的数据只是变量factor(顺便说一下选择了错误的名称),那么我的代码示例中可以使用table(factor)而不是table(dat)table(dat$fac)

为了完整性,在生成点图时,包lattice更灵活,因为我们可以获得您想要的方向:

require(lattice)
with(dat, dotplot(fac, horizontal = FALSE))

,并提供:

Lattice dotplot version

ggplot2版本:

require(ggplot2)
p <- ggplot(data.frame(Freq = tab, fac = names(tab)), aes(fac, Freq)) + 
    geom_point()
p

,并提供:

ggplot2 version