O pacote ' ggpp ' fornece um conjunto de blocos de construção que estendem a Gramática de Gráficos implementada no pacote 'ggplot2' (>= 3.5.0). As extensões melhoram o suporte de rótulos de dados e anotações em gráficos. As funções de posição implementam novas abordagens para cutucar utilizáveis com qualquer geometria, mas especialmente úteis junto com geom_text_s()
e geom_label_s()
deste pacote e geom_text_repel()
e geom_label_repel()
do pacote 'ggrepel' (>= 0.9.2). Consulte: (https://ggrepel.slowkow.com) para instruções de instalação e notícias sobre lançamentos.
As coordenadas parentais normalizadas (NPC) são suportadas nativamente por 'ggplot2' >= 3.5.0 por meio da função de identidade de R I()
. Esta nova abordagem não requer geometrias especiais, pois deve funcionar com quase todas as geometrias existentes. No entanto, atualmente isso funciona apenas quando variáveis contínuas são mapeadas para a estética x e/ou y . Se este mecanismo for estendido para suportar fatores e outras variáveis discretas no futuro, todas as geometrias _npc
de 'ggpp' poderão se tornar redundantes. Enquanto isso, essas geometrias especiais do 'ggpp' ainda preenchem uma lacuna, embora menor, no suporte do NPC pelo 'ggplot2'.
A distinção entre observações ou dados mapeados para a estética xey e rótulos de dados é que os rótulos de dados estão vinculados às coordenadas dos dados, mas sua própria localização geralmente está próxima, mas não exatamente a dos dados. Em outras palavras, a localização de um rótulo de dados nas coordenadas x e y é flexível, desde que a ligação com uma observação de dados possa ser inferida. No caso de anotações, a localização na área de plotagem é arbitrária, ditada pelas considerações de design gráfico disponíveis e pela exigência de não obstruir as observações dos dados. Na tabela abaixo listamos para as geometrias definidas no pacote 'ggpp': 1) se são destinadas a rótulos de dados, anotações ou dados, 2) a estética e pseudo-estética que obedecem, e 3) se podem conectar o original posição de dados para a posição deslocada. O desenho de segmentos ou setas de conexão entre as posições deslocadas e originais, as da observação e do rótulo deslocado, requer também uma alteração nos dados retornados pelas funções de posição (veja a próxima seção).
Geometria | Uso principal | Estética | Segmento |
---|---|---|---|
geom_text_s() | rótulos de dados | x, y, rótulo, tamanho, família, fonte, cor, alfa, grupo, ângulo, vjust, hjust | sim |
geom_label_s() | rótulos de dados | x, y, rótulo, tamanho, família, tipo de fonte, cor, preenchimento, alfa, largura de linha, tipo de linha, grupo, vjust, hjust | sim |
geom_text_pairwise() | rótulos de dados | x, xmin, xmax, y, rótulo, tamanho, família, tipo de fonte, cor, alfa, grupo, ângulo, vjust, hjust | horizonte. |
geom_label_pairwise() | rótulos de dados | x, xmin, xmax, y, rótulo, tamanho, família, tipo de fonte, cor, preenchimento, alfa, largura de linha, tipo de linha, grupo, vjust, hjust | horizonte. |
geom_point_s() | rótulos de dados | x, y, tamanho, cor, preenchimento, alfa, forma, traço, grupo | sim |
geom_table() 1 | rótulos de dados | x, y, rótulo, tamanho, família, fonte, cor, alfa, grupo, ângulo, vjust, hjust | sim |
geom_plot() 1 , geom_grob() 1 | rótulos de dados | x, y, rótulo, grupo, ângulo, vjust, hjust | sim |
geom_margin_arrow() | rótulos de dados, rótulos de escala, dados | xintercept, yintercept, rótulo, tamanho, família, fonte, cor, alfa, grupo, vjust, hjust | não |
geom_margin_point() | rótulos de dados, rótulos de escala, dados | xintercept, yintercept, rótulo, tamanho, família, fonte, cor, alfa, grupo, vjust, hjust | não |
geom_margin_grob() | rótulos de dados, rótulos de escala, dados | xintercept, yintercept, rótulo, tamanho, família, fonte, cor, alfa, grupo, vjust, hjust | não |
geom_quadrant_lines() , geom_vhlines() | rótulos de dados, rótulos de escala, dados | xintercept, yintercept, rótulo, tamanho, família, fonte, cor, alfa, grupo, vjust, hjust | não |
Geometrias definidas no pacote 'ggpp'. 1 Existem versões NPC para essas geometrias, bem como para geom_text()
e geom_label()
, usadas principalmente para anotações de plotagem.
Em contraste com as funções de posição do 'ggplot2', todas as funções de posição do pacote 'ggpp' são capazes de manter as coordenadas xey originais sob um nome diferente no objeto data
ao deslocá-las para uma nova posição. Isso os torna compatíveis com geom_text_s()
, geom_label_s()
, geom_point_s()
, geom_table()
, geom_plot()
e geom_grob()
deste pacote. Todos esses geoms podem desenhar segmentos ou setas conectando as posições originais às posições deslocadas. Eles permanecem compatíveis com versões anteriores e podem ser usados em todas as geometrias que possuem um parâmetro formal position
. Isto é semelhante à abordagem usada no pacote 'ggrepel' (<= 0.9.1), mas usa uma convenção de nomenclatura diferente que permite que as novas funções de posição permaneçam compatíveis com versões anteriores de 'ggplot2'. A partir da versão 0.9.2, as geometrias geom_text_repel()
e geom_label_repel()
do pacote 'ggrepel' são totalmente compatíveis com esta nova convenção de nomenclatura.
As funções de posição position_nudge_keep()
, position_nudge_to()
, position_nudge_center()
e position_nudge_line()
implementam diferentes sabores de nudging. As duas últimas funções permitem aplicar nudging que varia automaticamente de acordo com a posição relativa dos pontos de dados em relação a pontos ou linhas arbitrárias, ou em relação a um polinômio ou spline de suavização ajustado instantaneamente às observações.
As funções de posição position_stacknudge()
, position_fillnudge()
, position_jitternudge()
, position_dodgenudge()
e position_dodge2nudge()
combinam cada uma as funções de duas funções de posição . Eles tornam possível deslocar facilmente rótulos em camadas de plotagem que usam empilhamento, esquiva ou tremulação. As funções position_jitter_keep()
, position_stack_keep()
, position_fill_keep()
, position_dodge_keep()
, position_dosge2_keep()
se comportam como as posições de 'ggplot2' mas mantêm no objeto data
as coordenadas originais.
Posição | Uso principal | Deslocamento | Mais usado com |
---|---|---|---|
position_nudge_keep() | cutucar | x, y (distância fixa) | rótulos de dados |
position_jitter_keep() | nervosismo | x, y (aleatório) | gráficos de pontos |
position_stack_keep() | pilha | vertical (absoluta) | gráficos de colunas e barras |
position_stack_minmax() | pilha | vertical (absoluto) | barras de erro |
position_fill_keep() | preencher | vertical (relativo, fracionário) | gráficos de colunas |
position_dodge_keep() | desviar | lateralmente (absoluto) | gráficos de colunas e barras |
position_dosge2_keep() | esquiva2 | lateralmente (absoluto) | gráficos de caixa |
position_nudge_to() | cutucar | x, y (posição fixa) | rótulos de dados |
position_nudge_center() | cutucar | x, y (longe ou em direção ao alvo) | rótulos de dados |
position_nudge_line() | cutucar | x, y (longe ou em direção ao alvo) | rótulos de dados |
position_stacknudge() | empilhar + cutucar | combinado, veja acima | rótulos de dados em gráficos de colunas |
position_fillnudge() | preencher + cutucar | combinado, veja acima | rótulos de dados em gráficos de colunas |
position_jitternudge() | nervosismo + empurrão | combinado, veja acima | rótulos de dados em gráficos de pontos |
position_dodgenudge() | esquivar + cutucar | combinado, veja acima | rótulos de dados em gráficos de colunas |
position_dodge2nudge() | esquivar2 + cutucar | combinado, veja acima | rótulos de dados em box plots |
Funções de posição definidas no pacote 'ggpp'.
A estatística stat_fmt_tb()
ajuda na formatação de tabelas a serem plotadas com geom_table()
.
Quatro estatísticas, stat_dens2d_filter()
, stat_dens2d_label()
, stat_dens1d_filter()
e stat_dens1d_label()
, implementam marcação ou rotulagem seletiva de observações com base na densidade 2D local de observações em um painel. Outras duas estatísticas, stat_dens1d_filter_g()
e stat_dens1d_filter_g()
calculam a densidade por grupo em vez de por painel de gráfico. Estas seis estatísticas foram projetadas para funcionar bem em conjunto com geom_text_repel()
e geom_label_repel()
do pacote 'ggrepel' (>= 0.8.0).
As estatísticas stat_apply_panel()
e stat_apply_group()
são úteis para aplicar funções arbitrárias que retornam vetores numéricos como cumsum()
, cummax()
e diff()
. As estatísticas stat_centroid()
e stat_summary_xy()
permitem o cálculo de resumos em xey e passá-los para um geom.
As estatísticas stat_quadrant_counts()
e stat_panel_counts()
facilitam a anotação de gráficos com o número de observações.
Estatística | Uso principal | Geometrias usuais | Mais usado com | Função de cálculo |
---|---|---|---|---|
stat_fmt_tb() | formatação e seleção | geom_table() | tabelas como rótulos de dados | grupo |
stat_fmt_tb() | formatação e seleção | geom_table_npc() | tabelas como anotações | grupo |
stat_dens2d_filter() | filtragem de densidade 2D local | geom_text_s() , geom_label_s() , geom_text() , geom_label() | texto como rótulos de dados | painel |
stat_dens2d_label() | filtragem de densidade 2D local | geom_text_repel() , geom_label_repel() | texto como rótulos de dados | painel |
stat_dens1d_filter() | filtragem de densidade 1D local | geom_text_s() , geom_label_s() , geom_text() , geom_label() | texto como rótulos de dados | painel |
stat_dens1d_label() | filtragem de densidade 1D local | geom_text_repel() , geom_label_repel() | texto como rótulos de dados | painel |
stat_dens2d_filter_g() | filtragem de densidade 2D local | geom_text_s() , geom_label_s() , geom_text() , geom_label() | texto como rótulos de dados | grupo |
stat_dens2d_label_g() | filtragem de densidade 2D local | geom_text_repel() , geom_label_repel() | texto como rótulos de dados | grupo |
stat_dens1d_filter_g() | filtragem de densidade 1D local | geom_text_s() , geom_label_s() , geom_text() , geom_label() | texto como rótulos de dados | grupo |
stat_dens1d_label_g() | filtragem de densidade 1D local | geom_text_repel() , geom_label_repel() | rótulos de dados | grupo |
stat_panel_counts() | número de observações | geom_text() , geom_label() | texto como anotação | painel |
stat_group_counts() | número de observações | geom_text() , geom_label() | texto como anotação | painel |
stat_quadrant_counts() | número de observações | geom_text() , geom_label() | texto como anotação | painel |
stat_apply_panel() | resumos cumulativos | geom_point() , geom_line() , etc. | gráficos de dispersão e linha | painel |
stat_apply_group() | resumos cumulativos | geom_point() , geom_line() , etc. | gráficos de dispersão e linha | grupo |
stat_centroid() | resumos conjuntos x e y | geom_point() , geom_rug() , geom_margin_arrow() , etc. | resumo de dados | grupo |
stat_summary_xy() | resumos conjuntos x e y | geom_point() , geom_rug() , geom_margin_arrow() , etc. | resumo de dados | grupo |
stat_functions() | calcular y a partir do intervalo x | geom_line() , geom_point() , etc. | desenhar curvas de função | grupo |
Estatísticas definidas no pacote 'ggpp'.
As justificativas "outward_mean"
, "inward_mean"
, "outward_median"
e "inward_median"
implementam justificação externa e interna em relação ao centróide dos dados em vez de ao centro do "position"
implementa a justificação na borda mais próxima da posição original. Isso funciona apenas em conjunto com funções de posição que salvam o local original usando a convenção de nomenclatura implementada em 'ggpp', caso contrário, a justificação padrão volta para "center"
/ "middle"
.
Este pacote é um “spin-off” do pacote 'ggpmisc' contendo extensões para a gramática originalmente escrita para uso com 'ggpmisc'. Como o tamanho do 'ggpmisc' cresceu, foi necessário dividi-lo em dois pacotes para facilitar o desenvolvimento e a manutenção e para facilitar a importação para outros pacotes. Por enquanto, o pacote 'ggpmisc' importa e reexporta todas as definições visíveis de 'ggpp'.
Os gráficos abaixo exemplificam algumas das coisas que o 'ggpp' torna possível ou mais fácil de codificar em comparação com o 'ggplot' usado sozinho. Exemplos adicionais, incluindo várias combinações de 'ggpp' e 'ggrepel', são fornecidos na vinheta do pacote.
library( ggpp )
library( ggrepel )
library( dplyr )
Um enredo com uma tabela inserida.
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 ))
Um enredo com um enredo inserido.
Gráfico inserido posicionado usando coordenadas nativas do gráfico (npc) usando valores numéricos no intervalo 0..1 junto com 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 )
Médias calculadas instantaneamente e mostradas como asteriscos.
ggplot( mtcars , aes( wt , mpg , colour = factor ( cyl ))) +
geom_point() +
stat_centroid( shape = " asterisk " , size = 6 )
Medianas calculadas dinamicamente mostradas como setas marginais. Etiquetas com número de observações por grupo.
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 " )
Instalação da versão estável mais recente do CRAN (fontes, binários Mac e Win):
install.packages( " ggpp " )
Instalação da versão instável atual do repositório do tipo R-Universe CRAN (binários para Mac, Win, Webassembly e Linux, bem como fontes disponíveis):
install.packages( ' ggpp ' ,
repos = c( ' https://aphalo.r-universe.dev ' ,
' https://cloud.r-project.org ' ))
Instalação da versão instável atual do GitHub (das fontes):
# install.packages("devtools")
devtools :: install_github( " aphalo/ggpp " )
A documentação HTML do pacote, incluindo páginas de ajuda e o Guia do Usuário , está disponível em (https://docs.r4photobiology.info/ggpp/).
Notícias sobre atualizações são publicadas em (https://www.r4photobiology.info/).
O Capítulo 7 em Aphalo (2020) e o Capítulo 9 em Aphalo (2024) explicam conceitos básicos da gramática de gráficos conforme implementado em 'ggplot2', bem como extensões para esta gramática, incluindo várias daquelas disponibilizadas pelos pacotes 'ggpp' e 'ggpmisc '. Informações relacionadas ao livro estão disponíveis em https://www.learnr-book.info/.
Relate bugs e solicite novos recursos em (https://github.com/aphalo/ggpp/issues). Solicitações pull são bem-vindas em (https://github.com/aphalo/ggpp).
Se você utiliza este pacote para produzir publicações científicas ou comerciais, cite de acordo com:
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},
# > }
Sendo uma extensão do pacote 'ggplot2', parte do código do pacote 'ggpp' foi criado usando como modelo as funções e escalas da camada em 'ggplot2'. A interface do usuário do 'ggpp' visa ser o mais consistente possível com o 'ggplot2' e a gramática em camadas dos gráficos (Wickham 2010). Novos recursos adicionados em 'ggplot2' são adicionados quando relevantes para 'ggpp', como suporte para orientation
para inversão de camadas. Consequentemente, este pacote inclui indiretamente contribuições significativas de vários dos autores e mantenedores do 'ggplot2', listados em (https://ggplot2.tidyverse.org/).
A coordenação do desenvolvimento através de uma troca amigável de ideias e contribuições recíprocas de Kamil Slowikowski para o 'ggpp' e de minha parte para o 'ggrepel' tornou os dois pacotes totalmente intercompatíveis.
Aphalo, Pedro J. (2024) Aprenda R: Como Linguagem. 2ed. A Série R. Boca Raton e Londres: Chapman e Hall/CRC Press. ISBN: 9781032516998. 466 pp.
Aphalo, Pedro J. (2020) Aprenda R: como uma linguagem. 1ed. A Série R. Boca Raton e Londres: Chapman e Hall/CRC Press. ISBN: 9780367182533. 350 pp.
Wickham, Hadley. 2010. “Uma gramática de gráficos em camadas”. Journal of Computational and Graphical Statistics 19 (1): 3–28. https://doi.org/10.1198/jcgs.2009.07098.
© 2016-2024 Pedro J. Aphalo ([email protected]). Lançado sob a GPL, versão 2 ou superior. Este software não oferece garantia de qualquer tipo.