我有一个有许多不同价值观的因素。如果执行summary(factor)
,则输出是不同值及其频率的列表。像这样:
A B C D
3 3 1 5
我想制作频率值的直方图,即X轴包含发生的不同频率,Y轴是具有该特定频率的因子的数量。完成这样的事情的最佳方法是什么?
编辑:感谢下面的答案,我发现我能做的就是从表中获取频率因子,在表格中得到它,然后绘制图形,这看起来像(如果{{ 1}}是因素):
f
答案 0 :(得分:27)
根据澄清的问题更新
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
,并提供: