我正在绘制一个分类变量,而不是显示每个类别值的计数。
我正在寻找一种方法来ggplot显示该类别中值的百分比。当然,可以使用计算的百分比创建另一个变量并绘制该变量,但我必须这样做几十次,我希望在一个命令中实现。
ggplot
我正在尝试类似的东西
qplot(mydataf) + stat_bin(aes(n = nrow(mydataf), y = ..count../n)) + scale_y_continuous(formatter = "percent")
但我必须错误地使用它,因为我遇到了错误。
为了轻松重现设置,这里有一个简化的示例:
mydata <- c ("aa", "bb", NULL, "bb", "cc", "aa", "aa", "aa", "ee", NULL, "cc"); mydataf <- factor(mydata); qplot (mydataf); #this shows the count, I'm looking to see % displayed.
在实际情况下,我可能会使用ggplot而不是qplot,但使用stat_bin的正确方法仍然让我望而却步。
qplot
我也试过这四种方法:
ggplot(mydataf, aes(y = (..count..)/sum(..count..))) + scale_y_continuous(formatter = 'percent'); ggplot(mydataf, aes(y = (..count..)/sum(..count..))) + scale_y_continuous(formatter = 'percent') + geom_bar(); ggplot(mydataf, aes(x = levels(mydataf), y = (..count..)/sum(..count..))) + scale_y_continuous(formatter = 'percent'); ggplot(mydataf, aes(x = levels(mydataf), y = (..count..)/sum(..count..))) + scale_y_continuous(formatter = 'percent') + geom_bar();
但所有4个都给出:
Error: ggplot2 doesn't know how to deal with data of class factor
同样的错误出现在简单的情况下
ggplot (data=mydataf, aes(levels(mydataf))) + geom_bar()
所以这显然是关于如何ggplot与单个向量交互的东西。我在挠头,谷歌搜索该错误会给出一个结果。
自从回答了这个问题后,ggplot语法就发生了一些有意义的变化。总结以上评论中的讨论:
require(ggplot2) require(scales) p <- ggplot(mydataf, aes(x = foo)) + geom_bar(aes(y = (..count..)/sum(..count..))) + ## version 3.0.0 scale_y_continuous(labels=percent)
这是一个可重复的示例,使用mtcars:
mtcars
ggplot(mtcars, aes(x = factor(hp))) + geom_bar(aes(y = (..count..)/sum(..count..))) + scale_y_continuous(labels = percent) ## version 3.0.0
这个问题目前是谷歌上“ggplot 计数与百分比直方图”排名第一的问题,因此希望这有助于提炼当前包含在对已接受答案的评论中的所有信息。
备注: 如果hp未设置为因子,则 ggplot 返回:
hp