Limiter les axes ggplot2 sans supprimer les données (hors limites): zoom


106

Si vous spécifiez des limites d'axe dans ggplot, les points périphériques sont supprimés. Cela convient aux points, mais vous souhaiterez peut-être tracer des lignes qui se croisent avec la plage spécifiée, mais ggplot rangeou les xlim/ylimméthodes les supprime. Existe-t-il un autre moyen de spécifier la plage de l'axe du tracé sans supprimer les données périphériques?

par exemple

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)

Réponses:


168

Hadley explique cela aux pp. 99; 133 de son livre ggplot2 (1ère édition) , ou pp.160-161 si vous avez la deuxième édition .

Le problème est que, comme vous le dites, limitsà l'intérieur de l'échelle ou du paramètre ylim(), les données sont jetées, car elles contraignent les données. Pour un vrai zoom (conserver toutes les données), vous devez définir les limites à l'intérieur du système de coordonnées cartésien (ou d'autres systèmes de coordonnées https://ggplot2.tidyverse.org/reference/#section-coordinate-systems ). Pour plus d'informations, voir: http://docs.ggplot2.org/current/coord_cartesian.html

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

entrez la description de l'image ici


2
Et si coord_cartesian n'est pas une option parce que je l'utilise geom_boxplot?
Everettss

3
coord_cartesianest toujours une option avec geom_boxplotou d'autres geoms.
eipi10

Oui, mais je ne peux pas comprendre comment faire des boîtes à moustaches horizontales car cela nécessite coord_flipet vous ne pouvez pas avoir deux coords.
jtr13

2
Qu'à cela ne tienne, vous pouvez configurer le ylim coord_flipplutôt coord_cartesianque dans ce cas.
jtr13
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.