Le package ' ggpp ' fournit un ensemble de blocs de construction qui étendent la grammaire graphique implémentée dans le package 'ggplot2' (>= 3.5.0). Les extensions améliorent la prise en charge des étiquettes de données et des annotations dans les tracés. Les fonctions de position implémentent de nouvelles approches de nudging utilisables avec n'importe quelle géométrie, mais particulièrement utiles avec geom_text_s()
et geom_label_s()
de ce package et geom_text_repel()
et geom_label_repel()
du package 'ggrepel' (>= 0.9.2). Voir : (https://ggrepel.slowkow.com) pour les instructions d'installation et les nouvelles sur les versions.
Les coordonnées parentales normalisées (NPC) sont prises en charge nativement par 'ggplot2' >= 3.5.0 au moyen de la fonction d'identité de R I()
. Cette nouvelle approche ne nécessite pas de géométries spéciales car elle devrait fonctionner avec presque toutes les géométries existantes. Cependant, actuellement, cela ne fonctionne que lorsque des variables continues sont mappées à l'esthétique x et/ou y . Si ce mécanisme est étendu à l'avenir pour prendre en charge des facteurs et d'autres variables discrètes, toutes les géométries _npc
de 'ggpp' pourraient devenir redondantes. Pendant ce temps, ces géométries spéciales de « ggpp » comblent encore une lacune, quoique plus petite, dans la prise en charge des PNJ par « ggplot2 ».
La distinction entre les observations ou les données mappées sur l'esthétique x et y et les étiquettes de données est que les étiquettes de données sont liées aux coordonnées des données, mais leur propre emplacement est généralement proche mais pas exactement celui des données. En d’autres termes, l’emplacement d’une étiquette de données en coordonnées x et y est flexible tant que le lien avec une observation de données peut être déduit. Dans le cas des annotations, l'emplacement sur la zone de traçage est arbitraire, dicté par les considérations de conception graphique disponibles et par la nécessité de ne pas occulter les observations de données. Dans le tableau ci-dessous, nous listons les géométries définies dans le package 'ggpp' : 1) si elles sont destinées à des étiquettes de données, des annotations ou des données, 2) l'esthétique et la pseudo-esthétique auxquelles elles obéissent, et 3) si elles peuvent connecter l'original position des données à la position déplacée. Le dessin de segments ou de flèches de connexion entre les positions déplacées et originales, celles de l'observation et de l'étiquette déplacée, nécessite également une modification des données renvoyées par les fonctions de position (voir la section suivante).
Géométrie | Utilisation principale | Esthétique | Segment |
---|---|---|---|
geom_text_s() | étiquettes de données | x, y, étiquette, taille, famille, police, couleur, alpha, groupe, angle, vjust, hjust | Oui |
geom_label_s() | étiquettes de données | x, y, étiquette, taille, famille, police, couleur, remplissage, alpha, largeur de ligne, type de ligne, groupe, vjust, hjust | Oui |
geom_text_pairwise() | étiquettes de données | x, xmin, xmax, y, étiquette, taille, famille, police, couleur, alpha, groupe, angle, vjust, hjust | horiz. |
geom_label_pairwise() | étiquettes de données | x, xmin, xmax, y, étiquette, taille, famille, police, couleur, remplissage, alpha, largeur de ligne, type de ligne, groupe, vjust, hjust | horiz. |
geom_point_s() | étiquettes de données | x, y, taille, couleur, remplissage, alpha, forme, trait, groupe | Oui |
geom_table() 1 | étiquettes de données | x, y, étiquette, taille, famille, police, couleur, alpha, groupe, angle, vjust, hjust | Oui |
geom_plot() 1 , geom_grob() 1 | étiquettes de données | x, y, étiquette, groupe, angle, vjust, hjust | Oui |
geom_margin_arrow() | étiquettes de données, étiquettes d'échelle, données | xintercept, yintercept, étiquette, taille, famille, police, couleur, alpha, groupe, vjust, hjust | Non |
geom_margin_point() | étiquettes de données, étiquettes d'échelle, données | xintercept, yintercept, étiquette, taille, famille, police, couleur, alpha, groupe, vjust, hjust | Non |
geom_margin_grob() | étiquettes de données, étiquettes d'échelle, données | xintercept, yintercept, étiquette, taille, famille, police, couleur, alpha, groupe, vjust, hjust | Non |
geom_quadrant_lines() , geom_vhlines() | étiquettes de données, étiquettes d'échelle, données | xintercept, yintercept, étiquette, taille, famille, police, couleur, alpha, groupe, vjust, hjust | Non |
Géométries définies dans le package 'ggpp'. 1 Des versions NPC existent pour ces géométries, ainsi que pour geom_text()
et geom_label()
, utilisées principalement pour les annotations de tracé.
Contrairement aux fonctions de position de « ggplot2 », toutes les fonctions de position du package « ggpp » sont capables de conserver les coordonnées x et y d'origine sous un nom différent dans l'objet data
lors de leur déplacement vers une nouvelle position. Cela les rend compatibles avec geom_text_s()
, geom_label_s()
, geom_point_s()
, geom_table()
, geom_plot()
et geom_grob()
de ce package. Toutes ces géométries peuvent dessiner des segments ou des flèches reliant les positions d'origine aux positions déplacées. Ils restent rétrocompatibles et peuvent être utilisés dans toutes les géométries qui ont un paramètre formel position
. Ceci est similaire à l'approche utilisée dans le package 'ggrepel' (<= 0.9.1) mais utilise une convention de dénomination différente qui permet aux nouvelles fonctions de position de rester rétrocompatibles avec 'ggplot2'. À partir de la version 0.9.2, les géométries geom_text_repel()
et geom_label_repel()
du package 'ggrepel' sont entièrement compatibles avec cette nouvelle convention de dénomination.
Les fonctions de position position_nudge_keep()
, position_nudge_to()
, position_nudge_center()
et position_nudge_line()
implémentent différentes versions de nudging. Les deux dernières fonctions permettent d'appliquer un nudging qui varie automatiquement en fonction de la position relative des points de données par rapport à des points ou des lignes arbitraires, ou par rapport à un polynôme ou une spline de lissage ajustée à la volée aux observations.
Les fonctions de position position_stacknudge()
, position_fillnudge()
, position_jitternudge()
, position_dodgenudge()
et position_dodge2nudge()
combinent chacune les rôles de deux fonctions de position . Ils permettent de déplacer facilement les étiquettes dans les couches de tracé qui utilisent l'empilement, l'esquive ou la gigue. Les fonctions position_jitter_keep()
, position_stack_keep()
, position_fill_keep()
, position_dodge_keep()
, position_dosge2_keep()
se comportent comme les positions de 'ggplot2' mais conservent dans l'objet data
les coordonnées d'origine.
Position | Utilisation principale | Déplacement | Le plus utilisé avec |
---|---|---|---|
position_nudge_keep() | coup de coude | x, y (distance fixe) | étiquettes de données |
position_jitter_keep() | gigue | x, y (aléatoire) | tracés de points |
position_stack_keep() | empiler | vertical (absolu) | tracés à colonnes et à barres |
position_stack_minmax() | empiler | vertical (absolu) | barres d'erreur |
position_fill_keep() | remplir | vertical (relatif, fractionnaire) | tracés en colonnes |
position_dodge_keep() | esquiver | de côté (absolu) | tracés à colonnes et à barres |
position_dosge2_keep() | esquiver2 | de côté (absolu) | boîtes à moustaches |
position_nudge_to() | coup de coude | x, y (position fixe) | étiquettes de données |
position_nudge_center() | coup de coude | x, y (loin ou vers la cible) | étiquettes de données |
position_nudge_line() | coup de coude | x, y (loin ou vers la cible) | étiquettes de données |
position_stacknudge() | pile + coup de pouce | combiné, voir ci-dessus | étiquettes de données dans les tracés en colonnes |
position_fillnudge() | remplir + pousser | combiné, voir ci-dessus | étiquettes de données dans les tracés en colonnes |
position_jitternudge() | gigue + coup de pouce | combiné, voir ci-dessus | étiquettes de données dans les tracés de points |
position_dodgenudge() | esquive + coup de coude | combiné, voir ci-dessus | étiquettes de données dans les tracés en colonnes |
position_dodge2nudge() | esquive2 + coup de coude | combiné, voir ci-dessus | étiquettes de données dans les boîtes à moustaches |
Fonctions de position définies dans le package 'ggpp'.
La statistique stat_fmt_tb()
aide au formatage des tableaux à tracer avec geom_table()
.
Quatre statistiques, stat_dens2d_filter()
, stat_dens2d_label()
, stat_dens1d_filter()
et stat_dens1d_label()
, implémentent le marquage ou l'étiquetage sélectif des observations en fonction de la densité 2D locale des observations dans un panel. Deux autres statistiques, stat_dens1d_filter_g()
et stat_dens1d_filter_g()
calculent la densité par groupe plutôt que par panneau de tracé. Ces six statistiques sont conçues pour bien fonctionner avec geom_text_repel()
et geom_label_repel()
du package 'ggrepel' (>= 0.8.0).
Les statistiques stat_apply_panel()
et stat_apply_group()
sont utiles pour appliquer des fonctions arbitraires renvoyant des vecteurs numériques comme cumsum()
, cummax()
et diff()
. Les statistiques stat_centroid()
et stat_summary_xy()
permettent de calculer des résumés sur x et y et de les transmettre à un geom.
Les statistiques stat_quadrant_counts()
et stat_panel_counts()
facilitent l'annotation des tracés avec le nombre d'observations.
Statistique | Utilisation principale | Géométries habituelles | Le plus utilisé avec | Fonction de calcul |
---|---|---|---|---|
stat_fmt_tb() | formatage et sélection | geom_table() | tableaux comme étiquettes de données | groupe |
stat_fmt_tb() | formatage et sélection | geom_table_npc() | tableaux sous forme d'annotations | groupe |
stat_dens2d_filter() | filtrage de densité 2D local | geom_text_s() , geom_label_s() , geom_text() , geom_label() | texte sous forme d'étiquettes de données | panneau |
stat_dens2d_label() | filtrage de densité 2D local | geom_text_repel() , geom_label_repel() | texte sous forme d'étiquettes de données | panneau |
stat_dens1d_filter() | filtrage de densité 1D local | geom_text_s() , geom_label_s() , geom_text() , geom_label() | texte sous forme d'étiquettes de données | panneau |
stat_dens1d_label() | filtrage de densité 1D local | geom_text_repel() , geom_label_repel() | texte sous forme d'étiquettes de données | panneau |
stat_dens2d_filter_g() | filtrage de densité 2D local | geom_text_s() , geom_label_s() , geom_text() , geom_label() | texte sous forme d'étiquettes de données | groupe |
stat_dens2d_label_g() | filtrage de densité 2D local | geom_text_repel() , geom_label_repel() | texte sous forme d'étiquettes de données | groupe |
stat_dens1d_filter_g() | filtrage de densité 1D local | geom_text_s() , geom_label_s() , geom_text() , geom_label() | texte sous forme d'étiquettes de données | groupe |
stat_dens1d_label_g() | filtrage de densité 1D local | geom_text_repel() , geom_label_repel() | étiquettes de données | groupe |
stat_panel_counts() | nombre d'observations | geom_text() , geom_label() | texte comme annotation | panneau |
stat_group_counts() | nombre d'observations | geom_text() , geom_label() | texte comme annotation | panneau |
stat_quadrant_counts() | nombre d'observations | geom_text() , geom_label() | texte comme annotation | panneau |
stat_apply_panel() | résumés cumulatifs | geom_point() , geom_line() , etc. | nuages de points et courbes | panneau |
stat_apply_group() | résumés cumulatifs | geom_point() , geom_line() , etc. | nuages de points et courbes | groupe |
stat_centroid() | résumés conjoints x et y | geom_point() , geom_rug() , geom_margin_arrow() , etc. | résumé des données | groupe |
stat_summary_xy() | résumés conjoints x et y | geom_point() , geom_rug() , geom_margin_arrow() , etc. | résumé des données | groupe |
stat_functions() | calculer y à partir de la plage x | geom_line() , geom_point() , etc. | dessiner des courbes de fonctions | groupe |
Statistiques définies dans le package 'ggpp'.
Les justifications "outward_mean"
, "inward_mean"
, "outward_median"
et "inward_median"
implémentent une justification vers l'extérieur et vers l'intérieur par rapport au centroïde des données au lieu du centre de la "position"
implémente la justification au bord le plus proche de la position d'origine. Cela ne fonctionne qu'avec les fonctions de position qui enregistrent l'emplacement d'origine en utilisant la convention de dénomination implémentée dans 'ggpp', sinon la justification par défaut revient à "center"
/ "middle"
.
Ce package est un « spin-off » du package « ggpmisc » contenant des extensions de la grammaire écrite à l'origine pour être utilisée avec « ggpmisc ». Comme « ggpmisc » avait grandi en taille, le diviser en deux packages était nécessaire pour faciliter le développement et la maintenance et pour faciliter les importations dans d'autres packages. Pour le moment, le package 'ggpmisc' importe et réexporte toutes les définitions visibles de 'ggpp'.
Les graphiques ci-dessous illustrent certaines des choses que « ggpp » rend possibles ou facilitent le codage par rapport à « ggplot » utilisé seul. Des exemples supplémentaires, dont plusieurs combinant « ggpp » et « ggrepel », sont fournis dans la vignette du package.
library( ggpp )
library( ggrepel )
library( dplyr )
Un tracé avec un tableau en médaillon.
mtcars % > %
group_by( cyl ) % > %
summarize( wt = mean( wt ), mpg = mean( mpg )) % > %
ungroup() % > %
mutate( wt = sprintf( " %.2f " , wt ),
mpg = sprintf( " %.1f " , mpg )) - > tb
df <- tibble( x = 5.45 , y = 34 , tb = list ( tb ))
ggplot( mtcars , aes( wt , mpg , colour = factor ( cyl ))) +
geom_point() +
geom_table( data = df , aes( x = x , y = y , label = tb ))
Un tracé avec un tracé en médaillon.
Tracé en médaillon positionné à l'aide des coordonnées de tracé natives (npc) en utilisant des valeurs numériques comprises dans la plage 0..1 avec I()
.
p <- ggplot( mtcars , aes( factor ( cyl ), mpg , colour = factor ( cyl ))) +
stat_boxplot() +
labs( y = NULL , x = " Engine cylinders (number) " ) +
theme_bw( 9 ) + theme( legend.position = " none " )
ggplot( mtcars , aes( wt , mpg , colour = factor ( cyl ))) +
geom_point( show.legend = FALSE ) +
annotate( " plot " , x = I( 0.05 ), y = I( 0.05 ), label = p ,
hjust = " inward " , vjust = " inward " ) +
expand_limits( y = 0 , x = 0 )
Moyennes calculées à la volée et affichées sous forme d'astérisques.
ggplot( mtcars , aes( wt , mpg , colour = factor ( cyl ))) +
geom_point() +
stat_centroid( shape = " asterisk " , size = 6 )
Médianes calculées à la volée et affichées sous forme de flèches marginales. Étiquettes avec le nombre d'observations par groupe.
ggplot( mtcars , aes( wt , mpg , colour = factor ( cyl ))) +
geom_point() +
stat_centroid( geom = " y_margin_arrow " , .fun = median ,
aes( yintercept = after_stat( y )), arrow.length = 0.05 ) +
stat_group_counts( vstep = 0 , hstep = 0.09 )
df <- data.frame ( x1 = c( 1 , 2 , 1 , 3 , - 1 ),
x2 = c( " a " , " a " , " b " , " b " , " b " ),
grp = c( " some long name " , " other name " , " some name " ,
" another name " , " a name " ))
# Add labels to a horizontal column plot (stacked by default)
ggplot( data = df , aes( x2 , x1 , group = grp )) +
geom_col(aes( fill = grp ), width = 0.5 ) +
geom_hline( yintercept = 0 ) +
geom_text(
aes( label = grp ),
position = position_stacknudge( vjust = 1 , y = - 0.2 )) +
theme( legend.position = " none " )
Installation de la version stable la plus récente de CRAN (sources, binaires Mac et Win) :
install.packages( " ggpp " )
Installation de la version instable actuelle à partir du référentiel de type R-Universe CRAN (binaires pour Mac, Win, Webassembly et Linux, ainsi que sources disponibles) :
install.packages( ' ggpp ' ,
repos = c( ' https://aphalo.r-universe.dev ' ,
' https://cloud.r-project.org ' ))
Installation de la version instable actuelle depuis GitHub (à partir des sources) :
# install.packages("devtools")
devtools :: install_github( " aphalo/ggpp " )
La documentation HTML du package, y compris les pages d'aide et le Guide de l'utilisateur , est disponible sur (https://docs.r4photobiology.info/ggpp/).
Les nouvelles sur les mises à jour sont publiées sur (https://www.r4photobiology.info/).
Le chapitre 7 d'Aphalo (2020) et le chapitre 9 d'Aphalo (2024) expliquent les concepts de base de la grammaire graphique telle qu'implémentée dans « ggplot2 » ainsi que les extensions de cette grammaire, dont plusieurs de celles mises à disposition par les packages « ggpp » et « ggpmisc ». '. Les informations relatives au livre sont disponibles sur https://www.learnr-book.info/.
Veuillez signaler les bogues et demander de nouvelles fonctionnalités sur (https://github.com/aphalo/ggpp/issues). Les demandes de tirage sont les bienvenues sur (https://github.com/aphalo/ggpp).
Si vous utilisez ce package pour produire des publications scientifiques ou commerciales, veuillez citer selon :
citation( " ggpp " )
# > To cite package 'ggpp' in publications use:
# >
# > Aphalo P (2024). _ggpp: Grammar Extensions to 'ggplot2'_. R package
# > version 0.5.8-1, <https://CRAN.R-project.org/package=ggpp>.
# >
# > A BibTeX entry for LaTeX users is
# >
# > @Manual{,
# > title = {ggpp: Grammar Extensions to 'ggplot2'},
# > author = {Pedro J. Aphalo},
# > year = {2024},
# > note = {R package version 0.5.8-1},
# > url = {https://CRAN.R-project.org/package=ggpp},
# > }
Étant une extension du package « ggplot2 », une partie du code du package « ggpp » a été créée en utilisant comme modèle celui des fonctions de couche et des échelles dans « ggplot2 ». L'interface utilisateur de « ggpp » vise à être aussi cohérente que possible avec « ggplot2 » et la grammaire graphique en couches (Wickham 2010). Les nouvelles fonctionnalités ajoutées dans « ggplot2 » sont ajoutées lorsqu'elles sont pertinentes pour « ggpp », telles que la prise en charge de orientation
pour retourner les calques. Ce paquet inclut par conséquent indirectement des contributions significatives de plusieurs auteurs et responsables de « ggplot2 », répertoriés sur (https://ggplot2.tidyverse.org/).
La coordination du développement à travers un échange amical d'idées et des contributions réciproques de Kamil Slowikowski à « ggpp » et de moi-même à « ggrepel » a rendu les deux packages totalement intercompatibles.
Aphalo, Pedro J. (2024) Apprendre R : en tant que langage. 2éd. La série R. Boca Raton et Londres : Chapman et Hall/CRC Press. ISBN : 9781032516998. 466 pages.
Aphalo, Pedro J. (2020) Apprendre R : en tant que langage. 1éd. La série R. Boca Raton et Londres : Chapman et Hall/CRC Press. ISBN : 9780367182533. 350 pages.
Wickham, Hadley. 2010. «Une grammaire graphique en couches». Journal de statistiques informatiques et graphiques. 19 (1) : 3-28. https://doi.org/10.1198/jcgs.2009.07098.
© 2016-2024 Pedro J. Aphalo ([email protected]). Publié sous GPL, version 2 ou supérieure. Ce logiciel ne comporte aucune garantie d'aucune sorte.