我正在绘制一个分类变量,而不是显示每个类别值的计数 .
我正在寻找一种方法让 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给出:
错误:ggplot2不知道如何处理类因子的数据
对于简单的情况,会出现相同的错误
ggplot (data=mydataf, aes(levels(mydataf))) +
geom_bar()
所以很明显 ggplot
如何与单个载体相互作用 . 我正在挠头,谷歌搜索该错误给了一个result .
9 回答
由于回答了这一问题,因此对
ggplot
语法进行了一些有意义的更改 . 总结上述评论中的讨论:这是一个使用
mtcars
的可重现示例:这个问题目前是谷歌搜索'ggplot count vs百分比直方图'的第一名,所以希望这有助于提取当前所有关于已接受答案的评论中的信息 .
Remark: 如果
hp
未设置为因子,ggplot将返回:这个修改过的代码应该可行
如果您的数据有NA并且您不希望它们包含在图中,请将na.omit(mydataf)作为参数传递给ggplot .
希望这可以帮助 .
使用ggplot2 2.1.0版本
截至2017年3月,
ggplot2
2.2.1我认为最佳解决方案在Hadley Wickham的R for data science book中有所解释:stat_count
计算两个变量:默认情况下使用count
,但您可以选择使用显示比例的prop
.如果您想要y轴上的百分比并在条形图上标记:
添加条形标签时,您可能希望省略y轴以获得更清晰的图表,方法是添加到结尾:
如果你想要百分比标签,但在y轴上需要实际的Ns,试试这个:
这是分面数据的解决方法 . (@Andrew接受的答案在这种情况下不起作用 . )想法是使用dplyr计算百分比值,然后使用geom_col创建绘图 .
这是情节:
对于那些在2018年之后到达的人,将“labels = percent_format()”替换为“scales :: percent”
请注意,如果您的变量是连续的,则必须使用geom_histogram(),因为该函数会将变量分组为“bins” .