2012-05-10 4 views
0

Незначительный вопрос о построении штабелированного барплота в R. Столбцы представляют собой серию снизу вверх. Но легенда всегда показывает серию сверху вниз. Я думаю, что это верно и с ggplot2::geom_barШтабелированный барплот - это противоположный порядок легенде?

Есть ли лучше идиома, чем при использовании rev(...) дважды внутри либо legend() или barplot() как в:

exports <- data.frame(100*rbind('Americas'=runif(6),'Asia'=runif(6),'Other'=runif(6))) 
colnames(exports) <- 2004:2009 
series_we_want <- c(1,2,3) 
barplot(as.matrix(exports[series_we_want,]), col=mycolors, ...) 
legend(x="topleft", legend=rev(rownames(exports)[series_we_want]), col=rev(mycolors) ...) 

(Если опустить одну из rev()'s вывод, очевидно, бессмыслен. Кажется, что это улучшенный вариант для добавления одного флага yflip=TRUE или yreverse=TRUE)

+1

Вашего пример не воспроизводим поэтому, возможно, это в ggplot2: '+ направляющие (заполнить = guide_legend (обратный = TRUE))' –

+0

@Tyler: добавлена ​​Воспроизводимая часть. Я в основном спрашиваю об основной * графике :: barplot' *, где, по-видимому, нет такого варианта. Чтобы люди знали и видели, есть ли какая-то лучшая идиома. – smci

+1

решетка имеет ту же проблему. Когда я спросил Дипаяна об обходном пути, он добавил as.table = TRUE и отметил, что это результат одержимости Декарта, что небо хорошее, выше, это положительно. –

ответ

1

Это то, что я получил с помощью кода:

exports <- data.frame(100*rbind('Americas'=runif(6),'Asia'=runif(6),'Other'=runif(6))) 
colnames(exports) <- 2004:2009 
series_we_want <- c(1,2,3) 
barplot(as.matrix(exports[series_we_want,])) 
legend(x="topleft", legend=rev(rownames(exports)[series_we_want])) 

enter image description here

попробовать это:

exports <- data.frame(100*rbind('Americas'=runif(6),'Asia'=runif(6),'Other'=runif(6))) 
colnames(exports) <- 2004:2009 
series_we_want <- c(1,2,3) 
test_data<-as.matrix(exports[series_we_want]) 

barplot(test_data, 
      legend.text=as.character(rev(rownames(exports)[series_we_want])), 
      args.legend = list(x="topleft")) 

, кажется, производит легенду в противоположный порядок того, что у вас есть

enter image description here

+0

Я думаю, что OP может это сделать, но они хотели избежать двойного использования 'rev'. IMHO двойной rev не имеет большого значения, и, вероятно, это так же просто, как и получается, поскольку «легенда», похоже, не имеет аргумента для этого. –

+0

Ну, мне это не нравится, но это работает ... ;-) Я думаю, что еще один пример, где 'graphics :: barplot' делает почти то, что вы хотите, но не совсем, и не настраивается, поэтому' ggplot' лучше. – smci

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