barplot
хочет "matrix"
, в идеале с обоими именами измерений. Вы можете преобразовать свои данные следующим образом (удалите первый столбец, используя его для имен строк):
dat <- `rownames<-`(as.matrix(grao[,-1]), grao[,1])
Вы увидите, что barplot
уже выполняет табулирование для вас. Однако вы также можете использовать xtabs
(table
может не подходить для вашего подхода).
# dat <- xtabs(cbind(X..gravel, X..sand, X..silt) ~ Station, grao) ## alternatively
Я бы посоветовал вам использовать правильные имена переменных, поскольку специальные символы не самые лучшие идея.
colnames(dat) <- c("gravel", "sand", "silt")
dat
# gravel sand silt
# PRA1 28.430000 70.06000 1.507000
# PRA3 19.515000 78.07667 2.406000
# PRA4 19.771000 78.63333 1.598333
# PRB1 7.010667 91.38333 1.607333
# PRB2 18.613333 79.62000 1.762000
Тогда barplot
знает, что происходит.
.col <- c('#E69F00','#56B4E9','#94A813') ## pre-define colors
barplot(t(dat), beside=T, col=.col, ylim=c(0, 100), ## barplot
main="Here could be your title", xlab="sample", ylab="perc.")
legend("topleft", colnames(dat), pch=15, col=.col, cex=.9, horiz=T, bty="n") ## legend
box() ## put it in a box
Данные:
grao <- read.table(text=" Station '% gravel' '% sand' '% silt'
1 PRA1 28.430000 70.06000 1.507000
2 PRA3 19.515000 78.07667 2.406000
3 PRA4 19.771000 78.63333 1.598333
4 PRB1 7.010667 91.38333 1.607333
5 PRB2 18.613333 79.62000 1.762000 ", header=TRUE)