Limite os eixos ggplot2 sem remover dados (fora dos limites): zoom


106

Se você especificar os limites do eixo em ggplot, os pontos periféricos serão removidos. Isso é bom para pontos, mas você pode querer plotar linhas que cruzam com o intervalo especificado, mas os métodos rangeou do ggplot as xlim/ylimremovem. Existe outra maneira de especificar o intervalo do eixo do gráfico sem remover dados periféricos?

por exemplo

require(ggplot2)
d = data.frame(x=c(1,4,7,2,9,7), y=c(2,5,4,10,5,3), grp=c('a','a','b','b','c','c'))
ggplot(d, aes(x, y, group=grp)) + geom_line()
ggplot(d, aes(x, y, group=grp)) + geom_line() + scale_y_continuous(limits=c(0,7))
ggplot(d, aes(x, y, group=grp)) + geom_line() + ylim(0,7)

Respostas:


168

Hadley explica isso nas páginas 99; 133 de seu livro ggplot2 (1ª edição) , ou pp. 160-161 se você tiver a segunda edição .

O problema é que, como você diz, limitsdentro da escala ou configuração ylim()faz com que os dados sejam jogados fora, pois estão restringindo os dados. Para um zoom verdadeiro (manter todos os dados), você precisa definir os limites dentro do sistema de coordenadas cartesianas (ou outros sistemas de coordenadas https://ggplot2.tidyverse.org/reference/#section-coordinate-systems ). Para mais informações, consulte: http://docs.ggplot2.org/current/coord_cartesian.html

ggplot(d, aes(x, y, group=grp)) + 
    geom_line() + 
    coord_cartesian(ylim=c(0, 7))

insira a descrição da imagem aqui


2
E se coord_cartesian não for uma opção porque eu uso geom_boxplot?
Everettss

3
coord_cartesianainda é uma opção com geom_boxplotou outros geoms.
eipi10

Sim, mas não consigo descobrir como fazer boxplots horizontais, pois isso requer coord_flipe você não pode ter duas coordenadas.
jtr13,

2
Não importa, você pode definir o ylim em coord_flipvez de coord_cartesiannesse caso.
jtr13,
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.