Один барный штабелеукладчик

Кажется, я не могу задуматься о том, как R требует данных для штабелированного барплота, хотя я ищу сеть и доступные ресурсы.

У меня есть следующие данные

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")

Я хотел бы создать единый барный планшет с процентами I, II, III, IV. Я могу получить только R, чтобы сделать следующее

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

Есть ли способ сделать это одним барным стеклом? Пожалуйста, только решения baseR. благодаря

3 ответа

Следующее будет работать для вас, но оно не будет хорошо выглядеть

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


Здесь используется решение с использованием ggplot, которое не требует численного вектора/матрицы в качестве входных данных для штрихового графика.

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


Вот одна возможность (вдохновлена 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)

licensed under cc by-sa 3.0 with attribution.