首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在分类变量图表中显示百分比而不是计数

在分类变量图表中显示百分比而不是计数
EN

Stack Overflow用户
提问于 2010-09-12 23:58:17
回答 8查看 251.9K关注 0票数 188

我绘制了一个分类变量,而不是显示每个类别值的计数。

我正在寻找一种方法来让ggplot显示该类别中的值的百分比。当然,也可以使用计算出的百分比创建另一个变量,并绘制该变量的曲线图,但我必须这样做几十次,我希望在一个命令中就能实现。

我在做一些实验,比如

代码语言:javascript
复制
qplot(mydataf) +
  stat_bin(aes(n = nrow(mydataf), y = ..count../n)) +
  scale_y_continuous(formatter = "percent")

但我一定是用错了,因为我收到了错误。

为了方便地重现设置,下面是一个简化的示例:

代码语言:javascript
复制
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的方法仍然让我摸不着头脑。

我还尝试了这四种方法:

代码语言:javascript
复制
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不知道如何处理类别因子的数据

同样的错误也出现在简单的

代码语言:javascript
复制
ggplot (data=mydataf, aes(levels(mydataf))) +
  geom_bar()

所以很明显,这是关于ggplot如何与单个向量交互的。我摸不着头脑,在谷歌上搜索那个错误只给出了一个result

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2013-01-25 06:27:26

自从这个问题得到回答以来,ggplot语法已经发生了一些有意义的变化。总结上面评论中的讨论:

代码语言:javascript
复制
 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的可重复使用的示例

代码语言:javascript
复制
 ggplot(mtcars, aes(x = factor(hp))) +  
        geom_bar(aes(y = (..count..)/sum(..count..))) + 
        scale_y_continuous(labels = percent) ## version 3.0.0

这个问题目前在google上排名第一,因为“ggplot count vs百分比直方图”,所以希望这有助于提取当前在接受答案的评论中包含的所有信息。

备注:如果hp未设置为因子,则ggplot返回:

票数 239
EN

Stack Overflow用户

发布于 2010-09-13 00:23:46

修改后的代码应该可以工作

代码语言:javascript
复制
p = ggplot(mydataf, aes(x = foo)) + 
    geom_bar(aes(y = (..count..)/sum(..count..))) + 
    scale_y_continuous(formatter = 'percent')

如果您的数据包含NAs,并且您不希望将它们包含在绘图中,则将na.omit(mydataf)作为参数传递给ggplot。

希望这能有所帮助。

票数 58
EN

Stack Overflow用户

发布于 2016-05-26 20:46:17

对于ggplot2版本2.1.0,它是

代码语言:javascript
复制
+ scale_y_continuous(labels = scales::percent)
票数 52
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3695497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档