【发布时间】:2011-04-11 08:44:03
【问题描述】:
我正在绘制一个分类变量,而不是显示每个类别值的计数。
我正在寻找一种方法让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。
我也试过这四种方法:
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 如何与单个向量交互。我在挠头,谷歌搜索该错误会给出一个result。
【问题讨论】:
-
数据应该是一个数据框,而不是一个简单的因素。
-
添加到 hadley 的评论中,使用 mydataf = data.frame(mydataf) 将数据转换为数据框,并将其重命名为 names(mydataf) = foo 即可解决问题