Estou fazendo um gráfico de barras esquivado usando ggplot com escala x discreta, o eixo x agora está organizado em ordem alfabética, mas preciso reorganizá-lo para que seja ordenado pelo valor do eixo y (ou seja, a barra mais alta será posicionado à esquerda).
Eu tentei ordenar ou classificar, mas resultar na classificação do eixo x, mas não nas barras, respectivamente.
O que eu fiz errado?
factor
ereorder
alterações das características dos dados, embora dentro daggplot()
chamada, e mais do que o necessário para o problema em questão.scale_x_discrete(limits = DT$x[order(-DT$y)])+
Você pode usar
reorder
:Editar:
Para ter a barra mais alta à esquerda, você deve usar um pouco de clareza:
Eu esperaria que isso também tivesse alturas negativas, mas não tem, então funciona!
fonte
Hadley está desenvolvendo um pacote chamado
forcats
. Este pacote facilita muito a tarefa. Você pode explorarfct_infreq()
quando quiser alterar a ordem do eixo x pela frequência de um fator. No caso domtcars
exemplo nesta postagem, você deseja reordenar os níveiscyl
pela frequência de cada nível. O nível que aparece com mais frequência fica no lado esquerdo. Tudo que você precisa é ofct_infreq()
.Se você quiser fazer o contrário, pode usar
fct_rev()
juntofct_infreq()
.fonte
Sei que isso é antigo, mas talvez essa função que criei seja útil para alguém por aí:
Agora, com esta função, você pode plotar interativamente com o ggplot2, assim:
Como pode ser visto, a
order_axis
função cria outro quadro de dados com uma nova coluna denominada igual, mas com a_o
no final. Esta nova coluna possui níveis em ordem crescente, portanto o ggplot2 é automaticamente plotado nessa ordem.Isso é um pouco limitado (funciona apenas para combinações de caracteres ou fatores e numéricos de colunas e em ordem crescente), mas ainda acho muito útil para plotagem em movimento.
fonte
reorder
direto. Nãoggplot(df, aes(x = reorder(AXIS_X, COLUMN_Y), y = COLUMN_Y)) + ...
faz a mesma coisa de maneira concisa e sem a função auxiliar?