假设我有以下数据框:
d = data.frame(letter = c(
'a', 'a', 'a',
'b', 'b', 'b',
'c',
'd', 'd', 'd', 'd',
'e', 'e',
'f', 'f', 'f', 'f', 'f', 'f', 'f',
'g'))
如何使用ggplot2
制作直方图,该直方图不计算给定字母出现的次数,而是计算给定字母频率出现的次数?在这个例子中:
table(d$letter)
a b c d e f g
3 3 1 4 2 7 1
两个字母(c和g)出现一次,一个字母(e)出现两次,两个字母出现三次,等等。这样你就可以制作一个等同于基础图的数字:
hist(table(d$letter), right = F, breaks = 6)
答案 0 :(得分:2)
您可以将table
的结果转换为数据框,然后使用ggplot
:
df <- as.data.frame(table(d$letter))
ggplot(df, aes(x = Freq)) +
geom_histogram(binwidth = 1)
这是有效的,因为包含频率的列默认称为Freq
:
head(df)
## Var1 Freq
## 1 a 3
## 2 b 3
## 3 c 1
## 4 d 4
## 5 e 2
## 6 f 7
如果要让条形位于整数之间,可以使用center = 0.5
将区间中心设置为半整数。我还使用closed = "left"
,相当于right = FALSE
中的hist()
:
ggplot(df, aes(x = Freq)) +
geom_histogram(binwidth = 1, center = 0.5, closed = "left") +
scale_x_continuous(breaks = 1:7)