我有一个像这样的data.frame:
df <- read.csv(text = "ONE,TWO,THREE
23,234,324
34,534,12
56,324,124
34,234,124
123,534,654")
我想生成一个百分比条形图,看起来像这样(在LibreOffice Calc中制作):
因此,杆应该标准化,因此所有堆叠具有相同的高度并且总和为100% . 到目前为止,我所能获得的是一个堆积的条形图(不是百分比),使用:
barplot(as.matrix(df))
有帮助吗?
4 回答
您只需要将每个元素除以其列中值的总和 .
这样做应该足够了:
请注意,第二个参数告诉
apply
将提供的函数应用于列(使用1将其应用于行) . 然后,匿名函数每次传递一个数据列 .prop.table是一种获得比例表的友好方式 .
保证金空白为您提供整个表格的比例
给它1给你行比例
2是列比例
克里斯比利是严格的,你只需要列的比例 . 使用您的数据是:
给:
既然你用 ggplot2 标记了这个,到目前为止's a solution using that package (version 0.9.0) in addition to what you'已经得到了 .
我们使用
geom_bar
的position
参数设置为position = "fill"
. 如果要使用position_fill()
(vjust
和reverse
)的参数,也可以使用position = position_fill()
.请注意,您的数据采用'wide'格式,而
ggplot2
要求采用'long'格式 . 因此,我们首先需要melt
数据 .