R(ggplot2)中的堆积条形图,y轴和条形作为计数的百分比

Ste*_*eve 24 r ggplot2

我是ggplot2的新手,并且有关于生成堆积条形图的问题.我检查了书和专用网页,但无法解决问题.我有两个因素,其中一个有2个级别(存在 - 缺席),其他10个级别.让我们称这两个"变量"和"水果".

我想创建一个堆积条形图,其中每个条形图反映一种水果,"变量"中存在缺失观察的数量相互叠加.这是相对容易的(参见下面的图1的代码),但我还希望条和y轴以"百分比"表示"变量"中存在缺失的计数.换句话说,所有条形应该是相同的高度(总共反映100%),并且应该将存在缺失观察的计数转换成百分比.

我可以使用..count ..*100/sum(.. count ..)将y轴刻度更改为百分比,但我无法理解如何转换实际的条形图.我创建了另一个带有分面的图(下面的图2的代码),它实现了我想要的百分比,但我更喜欢两个条形图在彼此之上.有谁知道如何实现这一目标?我提供了虚拟数据和可重复的示例.谢谢你的帮助.

史蒂夫

dat <- data.frame( fruit=c("Apple", "Apple", "Orange", "Orange", "Orange", "Orange",
                   "Orange", "Pear", "Pear", "Pear"), variable=c("Present", "Absent",
                   "Present", "Present", "Present", "Present", "Absent", "Absent",
                   "Absent", "Present") )  

# stacked bar plot  
ggplot(dat, aes(x = fruit, fill = variable) ) +  
    geom_bar( aes(y = ..count..*100/sum(..count..) ) ) +
    xlab("Fruit") +
    ylab("Would like this to be percentage") + 
    scale_fill_manual("Condition", values = alpha( c("firebrick", "dodgerblue4"), 1) )  
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

# with faceting  
ggplot(dat, aes(x = variable, fill = variable) ) +   
    geom_bar( aes(y = ..count..*100/sum(..count..) ) ) +   
    facet_grid(. ~ fruit) +  
    xlab("Fruit") +
    ylab("Would like this to be percentage") + 
    scale_fill_manual("Condition", values = alpha( c("firebrick", "dodgerblue4"), 1) )  
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Ram*_*ath 26

对于第一个图表,只需将position ='fill'添加到geom_bar行!您实际上并不需要缩放计数,因为ggplot可以自动执行此操作.

ggplot(dat, aes(x = fruit)) + geom_bar(aes(fill = variable), position = 'fill')
Run Code Online (Sandbox Code Playgroud)

  • `+ scale_y_continuous("",formatter ="percent")`.最初的"""摆脱了"计数"标签,但你可以包含你想要的任何标签. (4认同)
  • 有关格式化百分比的语法,请参见此处.以上评论不再有效:http://stackoverflow.com/questions/10146109/formatter-argument-in-scale-continuous-throwing-errors-in-r-2-15 (3认同)