Força a origem a começar em 0

139

Como posso definir a origem / interceptação dos eixos y e x no ggplot2?

A linha do eixo x deve estar exatamente em y=Z.

Com Z=0ou outro valor fornecido.

Jonas Stein
fonte

Respostas:

199

xlime ylimnão corte aqui. Você precisa usar expand_limits, scale_x_continuouse scale_y_continuous. Experimentar:

df <- data.frame(x = 1:5, y = 1:5)
p <- ggplot(df, aes(x, y)) + geom_point()
p <- p + expand_limits(x = 0, y = 0)
p # not what you are looking for

insira a descrição da imagem aqui

p + scale_x_continuous(expand = c(0, 0)) + scale_y_continuous(expand = c(0, 0))

insira a descrição da imagem aqui

Pode ser necessário ajustar um pouco as coisas para garantir que os pontos não sejam cortados (consulte, por exemplo, o ponto em x = 5e y = 5.

A5C1D2H2I1M1N2O1R2T1
fonte
29
Eu também precisava para especificar limites: scale_x_continuous(expand = c(0, 0), limits = c(0,5)), de alguma forma, sem ele não funcionou
JelenaČuklina
3
Eu acho que mais uma peça pode ser útil, que está usando algo como expand=expand_scale(mult=c(0,0.1))assim você ainda obter o preenchimento nas extremidades superiores: stackoverflow.com/a/59056123/8400969
Michael
4

Simplesmente adicione-os ao seu ggplot:

+ scale_x_continuous(expand = c(0, 0), limits = c(0, NA)) + 
  scale_y_continuous(expand = c(0, 0), limits = c(0, NA))

Exemplo

df <- data.frame(x = 1:5, y = 1:5)
p <- ggplot(df, aes(x, y)) + geom_point()
p <- p + expand_limits(x = 0, y = 0)
p # not what you are looking for


p + scale_x_continuous(expand = c(0, 0), limits = c(0,NA)) + 
  scale_y_continuous(expand = c(0, 0), limits = c(0, NA))

insira a descrição da imagem aqui

Por fim, tome muito cuidado para não excluir acidentalmente dados do seu gráfico. Por exemplo, um position = 'dodge'bar / histograma pode ficar totalmente fora do gráfico se seu valor for zero e você iniciar o eixo em zero; portanto, talvez você não o veja e saiba que ele está lá. Eu recomendo plotar dados na íntegra primeiro, inspecionar e depois usar a dica acima para melhorar a estética da plotagem.

stevec
fonte
também é possível incorporar isso em um novo tema ggplot?
Bolle
@Bolle Eu não tenho certeza, mas estou interessado em descobrir também, você pode fazer uma pergunta separada e criar um link para aqui
stevec
Link aqui para referência futura
stevec