创建堆叠的条形图,其中每个堆栈按比例缩放为100%

创建堆叠的条形图,其中每个堆栈按比例缩放为100%

我有一个像这样的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))

有帮助吗?


拉风的咖菲猫
浏览 801回答 3
3回答

眼眸繁星

ggplot除了你到目前为止,还有一个使用该软件包(版本3.x)的解决方案。我们使用set 的position参数。如果要使用(和)的参数,也可以使用。geom_barposition = "fill"position = position_fill()position_fill()vjustreverse请注意,您的数据采用“宽”格式,但ggplot2要求采用“长”格式。因此,我们首先需要gather数据。library(ggplot2)library(dplyr)library(tidyr)dat <- read.table(text = "&nbsp; &nbsp; ONE TWO THREE1&nbsp; &nbsp;23&nbsp; 234 3242&nbsp; &nbsp;34&nbsp; 534 123&nbsp; &nbsp;56&nbsp; 324 1244&nbsp; &nbsp;34&nbsp; 234 1245&nbsp; &nbsp;123 534 654",sep = "",header = TRUE)# Add an id variable for the filled regions and reshapedatm <- dat %>%&nbsp;&nbsp; mutate(ind = factor(row_number()) %>%&nbsp;&nbsp; gather(variable, value, -ind)ggplot(datm, aes(x = variable, y = value, fill = ind)) +&nbsp;&nbsp; &nbsp; geom_bar(position = "fill",stat = "identity") +&nbsp; &nbsp; # or:&nbsp; &nbsp; # geom_bar(position = position_fill(), stat = "identity")&nbsp;&nbsp; &nbsp; scale_y_continuous(labels = scales::percent_format())

牛魔王的故事

克里斯比利是严格的,你只需要列的比例。使用您的数据是:&nbsp;your_matrix<-(&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rbind( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c(23,234,324),&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c(34,534,12),&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c(56,324,124),&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c(34,234,124), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c(123,534,654) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) &nbsp;barplot(prop.table(your_matrix,&nbsp;2)&nbsp;)

人到中年有点甜

prop.table是获得表格比例的友好方式。m&nbsp;<-&nbsp;matrix(1:4,2) &nbsp;m&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[,1]&nbsp;[,2][1,]&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;3[2,]&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;4保证金空白为您提供整个表格的比例&nbsp;prop.table(m,&nbsp;margin=NULL) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[,1]&nbsp;[,2][1,]&nbsp;&nbsp;0.1&nbsp;&nbsp;0.3[2,]&nbsp;&nbsp;0.2&nbsp;&nbsp;0.4给它1给你行比例&nbsp;prop.table(m,&nbsp;1) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[,1]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[,2][1,]&nbsp;0.2500000&nbsp;0.7500000[2,]&nbsp;0.3333333&nbsp;0.66666672是列比例&nbsp;prop.table(m,&nbsp;2) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[,1]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[,2][1,]&nbsp;0.3333333&nbsp;0.4285714[2,]&nbsp;0.6666667&nbsp;0.5714286
打开App,查看更多内容
随时随地看视频慕课网APP