Frage Umkehren der Reihenfolge der Legende, ohne die Reihenfolge in der Zeichnung zu ändern


Ich habe das beim Hinzufügen gefunden coord_flip() zu bestimmten Plots mit ggplot2, dass die Reihenfolge der Werte in der Legende nicht mehr mit der Reihenfolge der Werte im Plot übereinstimmt.

Beispielsweise:

dTbl = data.frame(x=c(1,2,3,4,5,6,7,8),
                  y=c('a','a','b','b','a','a','b','b'),
                  z=c('q','q','q','q','r','r','r','r'))

print(ggplot(dTbl, aes(x=factor(y),y=x, fill=z)) +
      geom_bar(position=position_dodge(), stat='identity') +
      coord_flip() +
      theme(legend.position='top', legend.direction='vertical'))

enter image description here

Ich möchte, dass 'q' und 'r' in der Legende umgekehrt werden, ohne die Reihenfolge von 'q' und 'r' im Diagramm zu ändern.

scale.x.reverse() sah vielversprechend aus, aber es scheint nicht innerhalb von Faktoren zu funktionieren (wie es bei diesem Balkenplot der Fall ist).


13
2018-03-19 20:09


Ursprung


Antworten:


Du schaust nach guides:

ggplot(dTbl, aes(x=factor(y),y=x, fill=z)) +
      geom_bar(position=position_dodge(), stat='identity') +
      coord_flip() +
      theme(legend.position='top', legend.direction='vertical') + 
      guides(fill = guide_legend(reverse = TRUE))

Ich wurde im Chat von Brian daran erinnert ist eine allgemeinere Möglichkeit, dies für beliebige Ordnungen zu tun, indem Sie die breaks Streit:

ggplot(dTbl, aes(x=factor(y),y=x, fill=z)) +
      geom_bar(position=position_dodge(), stat='identity') +
      coord_flip() +
      theme(legend.position='top', legend.direction='vertical') + 
      scale_fill_discrete(breaks = c("r","q"))

22
2018-03-19 20:19



Für die Neuordnung beliebiger Ebenen können Sie die Reihenfolge ändern levels in dem factor:

dTbl$z=factor(dTbl$z,levels=c('r','q'))
ggplot(dTbl, aes(x=factor(y),y=x, fill=z)) +
       geom_bar(position=position_dodge(), stat='identity') +
       coord_flip() +
       theme(legend.position='top', legend.direction='vertical')

2
2018-03-19 20:28



Wenn Sie die elegante Antwort von joran nicht mögen, können Sie mit dem Hack gehen:

geom_bar(position=position_dodge(-.9), stat='identity')

1
2018-03-19 20:22