19

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

A B C D
3 3 1 5

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

编辑:感谢下面的答案,我发现我可以做的是从表格中获取频率因子,在表格中获取它,然后绘制它,看起来像(如果f是因子):

plot(factor(table(f)))
4

1 回答 1

27

根据澄清的 Q 更新

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

给出:

因子出现频率的直方图

这里我们只是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)

这会产生:

一维图

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

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

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

给予:

格点图版

还有一个ggplot2版本:

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

给予:

ggplot2 版本

于 2011-04-27T12:55:28.027 回答