2014-06-10 143 views
1

虽然我搜索网络和可用资源,但似乎无法绕过R需要堆叠barplot数据的方式。一个酒吧堆积的barplot

我有以下数据

df<-c("III", "III", "I", "I", "I", "II", "I", "I", "I", "I", "I", 
"II", "I", "I", "I", "I", "I", "I", "I", "II", "I", "III", "II", 
"II", "III", "I", "II", "II", "I", "I", "IV", "I", "III", "I", 
"III", "I", "I", "II", "I", "II", "II", "I", "II", "I", "II", 
"II", "II", "II", "I", "I", "II", "I", "I", "I", "I", "I", "I", 
"II", "II", "III", "I", "III", "I", "I", "I", "I", "II", "I", 
"II", "III", "I", "I", "I", "I", "III", "II", "II", "I", "I", 
"II", "I", "II", "III", "II", "III", "II", "III", "I", "III", 
"III") 

我想建立一个单一的条叠置barplot用的I,II,III,IV的百分比。我只能让R做下面的事情

barplot(table(df)*100/90, col=c("white", "gray70", "gray40", "black"), ylim=c(0,100)) 

有没有什么办法可以使这个单一的酒吧堆叠barplot?请仅使用baseR解决方案。 谢谢

回答

1

下面就为你工作,但它不会好看

barplot(as.matrix(table(df)*100/90), 
     col=c("white", "gray70", "gray40", "black"), 
     ylim=c(0,100)) 
+0

感谢。它工作得很好。 as.matrix做的那个barplot是否理解为堆栈图? – ECII

+1

它会将数据转换为二维数据,这将被barplot解释为多个类别... – vrajs5

2

这是一种可能性(由http://r.789695.n4.nabble.com/How-to-add-marker-in-Stacked-bar-plot-td4635946.html灵感):

df<-c("III", "III", "I", "I", "I", "II", "I", "I", "I", "I", "I", 
"II", "I", "I", "I", "I", "I", "I", "I", "II", "I", "III", "II", 
"II", "III", "I", "II", "II", "I", "I", "IV", "I", "III", "I", 
"III", "I", "I", "II", "I", "II", "II", "I", "II", "I", "II", 
"II", "II", "II", "I", "I", "II", "I", "I", "I", "I", "I", "I", 
"II", "II", "III", "I", "III", "I", "I", "I", "I", "II", "I", 
"II", "III", "I", "I", "I", "I", "III", "II", "II", "I", "I", 
"II", "I", "II", "III", "II", "III", "II", "III", "I", "III", 
"III") 

freq <- table(df) 

df <- data.frame(names=names(freq), freq=as.vector(freq)) 

barplot(as.matrix(df[,2]), col=cm.colors(length(df[,2])), legend=df[,1], xlim=c(0,6), width=1) 
3

以下是使用ggplot一个解决方案,不需要数值矢量/矩阵作为条形图的输入。

library(ggplot2) 
ggplot(data.frame(df))+geom_bar(aes(x="df",fill=df),position="stack") 

相关问题