Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R(ggplot2)中的堆叠条形图,y轴和条形图为计数百分比_R_Ggplot2 - Fatal编程技术网

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

R(ggplot2)中的堆叠条形图,y轴和条形图为计数百分比,r,ggplot2,R,Ggplot2,我是ggplot2的新手,对生成堆叠条形图有疑问。我查看了这本书和专用网页,但无法解决问题。我有两个因素,其中一个有两个层次(在场缺席),另外10个层次。让我们称这两个为“变量”和“水果” 我想创建一个堆叠的条形图,其中每个条形图反映一种水果,并且“变量”中的有无观察值的数量堆叠在彼此的顶部。这是相对容易的(参见下面图1的代码),但我也希望条形图和y轴以百分比的形式表示“变量”中有无计数的数量。换言之,所有条形图的高度应相同(总高度为100%),且有无观察值的计数应转换为百分比 我可以使用..c

我是ggplot2的新手,对生成堆叠条形图有疑问。我查看了这本书和专用网页,但无法解决问题。我有两个因素,其中一个有两个层次(在场缺席),另外10个层次。让我们称这两个为“变量”和“水果”

我想创建一个堆叠的条形图,其中每个条形图反映一种水果,并且“变量”中的有无观察值的数量堆叠在彼此的顶部。这是相对容易的(参见下面图1的代码),但我也希望条形图和y轴以百分比的形式表示“变量”中有无计数的数量。换言之,所有条形图的高度应相同(总高度为100%),且有无观察值的计数应转换为百分比

我可以使用..count..100/sum(..count..)将y轴比例更改为百分比,但我无法理解如何转换实际的条形图。我创建了另一个带有刻面的绘图(下面是绘图2的代码),它实现了我想要的百分比,但我更喜欢两个横条相互重叠。有人知道如何做到这一点吗?我提供了虚拟数据和可复制的示例。谢谢你的帮助

史蒂夫


对于第一个图形,只需将position='fill'添加到几何图形线中即可!。实际上,您不需要缩放计数,因为ggplot有一种自动缩放计数的方法

ggplot(dat, aes(x = fruit)) + geom_bar(aes(fill = variable), position = 'fill')

谢谢Ramnath,这正是我在酒吧里需要的。但是,当我这样做时,y轴标签将恢复为0到1的比例。我希望它们是0到100。在“aes”中包含y=…计数..*100或y=…密度..*100似乎不起作用。有什么想法吗?
+scale\u y\u continuous(“,formatter=“percent”)
。最初的
去掉了“count”标签,但您可以包含任何您想要的标签。绘图现在看起来很不错,但在我的真实数据集中有NAs,默认情况下,ggplot将这些解释为另一个因子级别。在plot功能中是否有任何方法可以关闭此功能(或删除NAs),以便plot忽略NAs,只打印100%的其他两个级别?谢谢,史蒂夫。如果要删除所有NAs,则可以在ggplot调用中使用na.omit(data)。这将传递一个删除所有NAs的数据帧。有关百分比格式化程序语法的更改,请参阅此处。上述评论不再有效:
# 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) )  
ggplot(dat, aes(x = fruit)) + geom_bar(aes(fill = variable), position = 'fill')