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)
géothéorie
la source

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

Tyler Rinker
la source
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