如何使用ggplot绘制向量的直方图/频率计数?

16

我希望使用ggplot绘制数值向量中的值的频率。使用plot()非常直接,但我无法通过ggplot获得相同的结果。

library(ggplot2)    
dice_results <- c(1,3,2,4,5,6,5,3,2,1,6,2,6,5,6,4)    
hist(dice_results)

enter image description here

ggplot(dice_results) + geom_bar()
# Error: ggplot2 doesn't know how to deal with data of class numeric

我应该为ggplot()创建一个数据框来绘制我的向量吗?

3个回答

31

尝试下面的代码

library(ggplot2)    
dice_results <- c(1,3,2,4,5,6,5,3,2,1,6,2,6,5,6,4,1,3,2,4,6,4,1,6,3,2,4,3,4,5,6,7,1)
ggplot() + aes(dice_results)+ geom_histogram(binwidth=1, colour="black", fill="white")

答案实际上并没有解释为什么它有效。既然这是得票最高的,能否加上这个解释呢? - undefined

8
请查看帮助页面 ?geom_histogram。从第一个示例中,您可以发现它是有效的。
qplot(as.factor(dice_results), geom="histogram")

还要看看?ggplot。你会发现数据必须是一个data.frame


7
你遇到错误的原因是参数名称错误。如果没有显式提供参数名称,则使用顺序规则 - data 参数用于输入向量。
要更正它 - 明确使用参数名称:
ggplot(mapping = aes(dice_results)) + geom_bar()

geom_函数系列中,您可以不使用显式命名的mapping参数将其包含在内,因为mapping是第一个参数,而不像在ggplot函数情况下data是第一个参数。

ggplot() + geom_bar(aes(dice_results))

请使用geom_histogram代替geom_bar绘制直方图:
ggplot() + geom_histogram(aes(dice_results))

别忘了使用 bins = 5 来覆盖默认的30,因为默认值对于当前情况不合适:

ggplot() + geom_histogram(aes(dice_results), bins = 5)

qplot(dice_results, bins = 5) # `qplot` analog for short

为了复制基础的hist绘图逻辑,请使用breaks参数,以强制使用整数(自然数)作为断点值:
qplot(dice_results, breaks = 1:6)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接