2014-02-15 2 views
0

У меня есть данные следующего типа:Создать Barplot в R

Model No. Rank 
1   1 
2   2 
1   1 
3   1 
1   2 
2   2 
3   2 
1   3 
2   1 
2   2 
3   3 
3   3 

Теперь я хочу, чтобы иметь barplot, похожий на следующую картину:

enter image description here

Мой график будет иметь

  1. «Номер модели» на этикетке по оси x вместо «Некурящий» и «курильщик»
  2. Столбики будут ранги (т.е. отдельные бруски для ранга 1, rank2 и 3 ранга)
  3. Ось ординат будет содержать частоту
  4. Легенда будет иметь категорию ранг

So , для модели 1: 1-й бар будет для ранга 1, а соответствующее значение по оси y будет равно 2, так как для модели 1 есть две позиции ранга 1. И аналогичная концепция для моделей 2 и 3.

это достигается в R?

ответ

3

Я бы recoment с помощью ggplot2 для хорошего выхода сюжета

require(ggplot2) 
    # creating sample data set | making it factors is crucial 
    set.seed(1337) 
    model.no<-rep(1:4,each=5) 
    rank<-sample(1:3,20,TRUE) 
    dat<-data.frame(model.no=factor(model.no),rank=factor(rank)) 
    # Plot 
    ggplot(data=dat, aes(model.no,fill=rank))+ 
     geom_bar(position="dodge") + xlab("Your x-label")+ylab("Your y-label") 

Это дает следующий вывод Barchart with ggplot

PS: Если вы не хотите неиспользуемые уровни ранга быть падает на порядок, см 2 способы здесь: Don't drop zero count: dodged barplot

+0

какое изменение должно быть сделано, чтобы у меня была доля рангов в каждом столбце вместо счета? – darkage

+0

Добавить 'aes (y = ..count ../ sum (.. count.))' To 'geom_bar()' и '+ scale_y_continuous (labels = percent_format())' в конце – Rentrop

+0

Вы имеете в виду aes (y = count (Rank)/sum (count (model.no))? Извините, что я новичок – darkage

2
set.seed(1) 
mat <- matrix(sample(5:50, 15), 
       ncol=3, 
       nrow=5, 
       dimnames=list(paste("Rank", 1:5), 
          paste("Model", 1:3))) 
barplot(mat,beside=TRUE,col=2:6, ylim=c(0,100)) 
legend("topright", legend=rownames(mat), fill=2:6)) 

enter image description here

+0

, какое изменение должно быть сделано, чтобы у меня была доля рангов в каждом столбце, а не счет? – darkage

+0

@ darkage: You может добавить 'mat <- prop.table (mat, margin = 2)' перед 'barplot', чтобы, например, нарисовать пропорции для каждой модели. Вам также нужно будет отрегулировать параметр' ylim' в 'barplot'. – lukeA

Смежные вопросы