web-dev-qa-db-fra.com

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

Si vous spécifiez des limites d'axe dans ggplot, les points périphériques sont supprimés. C'est bien pour les points, mais vous voudrez peut-être tracer des lignes qui intersectent avec la plage spécifiée, mais les méthodes range ou xlim/ylim De ggplot les suppriment. Existe-t-il un autre moyen de spécifier la plage d'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)
87
geotheory

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

Le problème est que, comme vous le dites, limits à l’intérieur de l’échelle ou du paramètre ylim() entraîne l’élimination des données, car elles les contraignent. Pour un véritable 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))

enter image description here

134
Tyler Rinker