2015-08-05 4 views
1

Это тесно связано с вопросом another, который я только что спросил.Как избежать повторного использования цветов в штриховом шкафу для достижения разных цветов в каждой группе?

Это мои данные:

y <- structure(c(0.5619, 0.4381, 0.7587, 0.2413, 0.8764, 0.1236, 0.9019, 
       0.0981, 0.9481, 0.0519, 0.99, 0.01), 
      .Dim = c(2L, 6L), .Dimnames = list(c("FALSE", "TRUE"), NULL)) 
y 
#   [,1] [,2] [,3] [,4] [,5] [,6] 
# FALSE 0.5619 0.7587 0.8764 0.9019 0.9481 0.99 
# TRUE 0.4381 0.2413 0.1236 0.0981 0.0519 0.01 

Оригинальный сюжет с же цветов в каждой группе (синий и красный):

barplot(y, horiz = TRUE, col = c("blue", "red"), 
     names.arg = c("Overall", paste("Flag", 5:1)), las = 1, 
     cex.names = 0.6, 
     main = "Proportion Dropped Given Each Sample Restriction") 

bars

Я хочу, чтобы изменить красные правые полосы для каждой группы, и вместо этого имеют разные цвета внутри каждой группы, что-то вроде:

ideal_output

поэтому я создал новый col вектор с одним цветом для каждого сегмента бар:

barplot(y, horiz =TRUE, 
     col = c("blue", "gold", 
       "blue", "springgreen", 
       "blue", "orange", 
       "blue", "red", 
       "blue", "white", 
    names.arg = c("Overall", paste("Flag", 5:1)), las = 1, 
    cex.names = 0.6, 
    main = "Proportion Dropped Given Each Sample Restriction")) 

Однако только первые два цвета в col (синий и золото) используются, и они перерабатываются в 6 раз:

enter image description here

Есть ли способ получить вывод, который я ищу?

+0

Не ответ на ваш вопрос, но однажды заметил подобную рециркуляцию цветов в 'stripchart' (см. [** здесь **] (http://stackoverflow.com/questions/22920381/different-coloring-of- group-in-r-plot/22923960 # 22923960) «Только столько цветов, которые необходимы для точек в одной строке (для цветов' col') или столбца (для цветов 'bg'), выбираются из цветового вектора, то они переработаны ». Для« barplot »это похоже на« Только столько цветов, которые необходимы для _bars_ в одном _column_ (для цветов 'col'), выбираются из цветового вектора, затем они перерабатываются». – Henrik

+0

Красные цвета также перерабатываются. Крошечный пример: 'm <- matrix (1: 4, nrow = 2)'; 'cols <- c (« синий »,« красный »,« зеленый »,« желтый »)'; 'border <- c (« красный »,« синий »,« желтый »,« зеленый »)'; 'par (lwd = 6)'; 'barplot (m, col = cols, border = border)'. видимые обходы для «базы», ​​но я не могу найти их правильно Теперь. Вы можете рассмотреть «ggplot» и «scale_fill_manual». – Henrik

+0

Релевантные сообщения R-help [** здесь **] (https://stat.ethz.ch/pipermail/r-help/2011-July/284640.html) и [** здесь **] (https://stat.ethz.ch/pipermail/r-help/2007-March/126848.html). – Henrik

ответ

1

Возможно, путем обмана barplot в мышление есть больше категорий. Это чрезвычайно некрасиво, но это, кажется, получить работу:

ymod <- cbind(c(y[,1], 0, 0,0,0,0,0,0,0,0,0), 
       c(0, 0, y[,2],0,0,0,0,0,0,0,0), 
       c(0, 0,0,0, y[,3],0,0,0,0,0,0), 
       c(0, 0,0,0,0,0, y[,4],0,0,0,0), 
       c(0, 0,0,0, 0,0,0,0,y[,5],0,0), 
       c(0, 0,0,0, 0,0,0,0,0,0,y[,6])) 

barplot(ymod, horiz=T, 
     col=c(rbind(rep("blue",6),c("white","red","purple", 
            "orange","springgreen","gold")))) 

enter image description here

Here и here некоторые ссылки, которые я использовал для достижения этого результата.

+1

Ну, мы можем сделать это намного приятнее с помощью 'magic :: adiag', как вдохновлено [this] (http://stackoverflow.com/questions/17495841/block-diagonal-binding-of-matrices):' ymod < -Reduce (magic: adiag, lapply (split (t (y), 1: ncol (y)), as.matrix)) ' – MichaelChirico

+0

Да, красиво! Я боролся с транспозицией «y» и попыткой соответствовать шаблону, который сделает его более читаемым. Это все! – erasmortg