Eu tenho um gráfico em que o eixo x é um fator cujos rótulos são longos. Embora provavelmente não seja uma visualização ideal, por enquanto eu gostaria de simplesmente girar esses rótulos para ficar na vertical. Eu descobri essa parte com o código abaixo, mas como você pode ver, os rótulos não são totalmente visíveis.
data(diamonds)
diamonds$cut <- paste("Super Dee-Duper",as.character(diamonds$cut))
q <- qplot(cut,carat,data=diamonds,geom="boxplot")
q + opts(axis.text.x=theme_text(angle=-90))
q + theme(axis.text.x=element_text(angle = -90, hjust = 0))
theme(axis.text.x=element_text(angle = 90, vjust = 0.5))
. A partir do ggplot2 0.9.3.1, essa parece ser a solução.q + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
É O ÚLTIMO TRABALHO ATUALMENTE.theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))
dá bons resultadosPara tornar o texto nos rótulos dos ticks totalmente visível e lido na mesma direção que o rótulo do eixo y, altere a última linha para
fonte
Usar
coord_flip()
No capítulo 3.9 do R para Data Science , Wickham e Grolemund falam exatamente sobre esta questão:
fonte
Gostaria de fornecer uma solução alternativa, uma solução robusta semelhante à que estou prestes a propor foi necessária na versão mais recente do ggtern , desde a introdução do recurso de rotação da tela.
Basicamente, você precisa determinar as posições relativas usando trigonometria, construindo uma função que retorna um
element_text
objeto, dado o ângulo (ou seja, graus) e posicionamento (ou seja, uma das informações x, y, superior ou direita).Francamente, na minha opinião, acho que uma opção 'auto' deve ser disponibilizada
ggplot2
para os argumentoshjust
evjust
, ao especificar o ângulo, de qualquer maneira, vamos demonstrar como funciona acima.Que produz o seguinte:
fonte
rads = (-angle - positions[[ position ]])*pi/180
produziu melhores canais. Observe o sinal de menos adicional antes do ângulo. Obrigado pela qualquer maneira código :)O pacote ggpubr oferece um atalho que faz a coisa certa por padrão (texto alinhado à direita, caixa de texto alinhada ao meio para marcar):
Criado em 06/11/2018 pelo pacote reprex (v0.2.1)
Encontrado com uma pesquisa no GitHub pelos nomes de argumentos relevantes: https://github.com/search?l=R&q=element_text+angle+90+vjust+org%3Acran&type=Code
fonte
Como alternativa,
ggplot 3.3.0
forneceguide_axis(n.dodge = 2)
(comoguide
argumento parascale_..
ou comox
argumentoguides
) para superar o problema de plotagem excessiva, evitando os rótulos verticalmente. Funciona muito bem neste caso:fonte
Para obter rótulos x tick legíveis sem dependências adicionais, você deseja usar:
Isso gira os rótulos dos tiquetaques 90 ° no sentido anti-horário e os alinha verticalmente no final (
hjust = 1
) e seus centros horizontalmente com a marca correspondente (vjust = 0.5
).Exemplo completo:
Observe que os parâmetros de justificação vertical / horizontal
vjust
/hjust
deelement_text
são relativos ao texto. Portanto,vjust
é responsável pela horizontal alinhamento .Sem
vjust = 0.5
ele ficaria assim:Sem
hjust = 1
ele ficaria assim:Se, por algum motivo (com fio), você quiser girar os rótulos dos marcadores 90 ° no sentido horário (para que possam ser lidos da esquerda), você precisará usar:
q + theme(axis.text.x = element_text(angle = -90, vjust = 0.5, hjust = -1))
.Tudo isso já foi discutido nos comentários desta resposta, mas volto a essa pergunta com tanta frequência que desejo uma resposta da qual possa copiar sem ler os comentários.
fonte
Uma alternativa
coord_flip()
é usar oggstance
pacote. A vantagem é que facilita a combinação dos gráficos com outros tipos de gráficos e você pode, talvez mais importante, definir proporções de escala fixa para o seu sistema de coordenadas .Criado em 2020-03-11 pelo pacote reprex (v0.3.0)
fonte