Como definir limites para eixos nas plotagens ggplot2 R?


358

Traço o seguinte:

library(ggplot2)    

carrots <- data.frame(length = rnorm(500000, 10000, 10000))
cukes <- data.frame(length = rnorm(50000, 10000, 20000))
carrots$veg <- 'carrot'
cukes$veg <- 'cuke'
vegLengths <- rbind(carrots, cukes)

ggplot(vegLengths, aes(length, fill = veg)) +
 geom_density(alpha = 0.2)

Agora diga que só quero plotar a região entre x=-5000para 5000, em vez de todo o intervalo.

Como eu posso fazer isso?

Respostas:


585

Basicamente, você tem duas opções

scale_x_continuous(limits = c(-5000, 5000))

ou

coord_cartesian(xlim = c(-5000, 5000)) 

Onde o primeiro remove todos os pontos de dados fora do intervalo especificado e o segundo apenas ajusta a área visível. Na maioria dos casos, você não veria a diferença, mas se você ajustasse algo aos dados, provavelmente alteraria os valores ajustados.

Você também pode usar a função abreviada xlim(ou ylim), que, como a primeira opção, remove os pontos de dados fora do intervalo especificado:

+ xlim(-5000, 5000)

Para mais informações, verifique a descrição de coord_cartesian.

A folha de dicas do RStudio para ggplot2torna isso bem claro visualmente. Aqui está uma pequena seção dessa folha de dicas:

insira a descrição da imagem aqui

Distribuído sob CC BY .


16
há também agora library(scales); ... + scale_x_continuous(limits = c(-5000, 5000), oob=squish)(o padrão é oob=censor); ver ?squish, ?censor: groups.google.com/forum/#!topic/ggplot2/AsJ6xpmR9tU
Ben Bolker

5
NB isso pode ser problemático se você está lidando com linhas / polígonos onde alguns vértices estão fora dos limites, como todo o objeto é removido da trama
geotheory

11
@geotheory: isso também vale para a coord_cartesianabordagem?
Nick Stauner

11
Não, eu deveria ter sido mais específico, apenas o primeiro método
geotheory

Na prática, para fins de 'impressão', coord_cartesian(xlim = é provável que você também precise redefinir ylime redefinir as quebras de etiqueta e grade.
PatrickT

44

Nota rápida: se você também estiver usando coord_flip()para girar os eixos xe y, não poderá definir limites de alcance usando coord_cartesian()porque essas duas funções são exclusivas (veja aqui ).

Felizmente, essa é uma solução fácil; defina seus limites da seguinte coord_flip()maneira:

p + coord_flip(ylim = c(3,5), xlim = c(100, 400))

Isso apenas altera o intervalo visível (ou seja, não remove os pontos de dados).


Eu pergunta semelhante, mas mais difícil postada aqui stackoverflow.com/questions/61531149/… sobre como limitar apenas um lado
IVIM
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.