[ad_1]
Deseja compartilhar seu conteúdo com R-blogueiros? clique aqui se você tiver um blog ou aqui se não tiver.
Este é um exemplo rápido em relação à ggtext
pacote. É um dos muitos pacotes que se estendem ggplot2
, com este foco na adição e formatação de texto em gráficos. O mais interessante para mim é que ele permite Markdown e outra formatação dos rótulos em um gráfico.
Vamos montar um gráfico de faceta para os principais componentes do iris
conjunto de dados:
> library(glue)
> library(tidyverse)
> library(ggtext)
> data(iris)
> pca prcomp(iris %>% select(matches("Sepal|Petal")))
> transformation as.data.frame(pca$rotation) # prcomp returns matrix, ggplot needs df
> transformation
PC1 PC2 PC3 PC4
Sepal.Length 0.36138659 -0.65658877 0.58202985 0.3154872
Sepal.Width -0.08452251 -0.73016143 -0.59791083 -0.3197231
Petal.Length 0.85667061 0.17337266 -0.07623608 -0.4798390
Petal.Width 0.35828920 0.07548102 -0.54583143 0.7536574
Como precisamos colocar isso em um gráfico de faceta, precisamos dinamizar esses dados em um formato longo. Também precisamos preservar os nomes das linhas, pois pivot_longer()
apenas os apagará caso contrário. Também é quando podemos adicionar nossa formatação Markdown, que apenas colocará em itálico os elementos de valor negativo das rotações e as partes positivas em negrito:
> transformation transformation %>% mutate(Var=row.names(.)) %>%
> pivot_longer(cols=c(PC1, PC2, PC3, PC4)) %>%
> mutate(VarStyle=ifelse(value>, "**", "*"),
> MarkdownVar=glue("{VarStyle}{Var}{VarStyle}"))
Depois disso, é um caso simples de usar ggplot()
. ggtext
é chamado para o element_markdown()
função, que é o que faz a renderização:
ggplot(transformation, aes(x=MarkdownVar, y=value, fill=value>)) +
geom_col() + coord_flip() + facet_wrap(~name, scales="free_y") +
theme(axis.text.y=element_markdown())
Ou, suponha que você queira fazê-lo em cores. O próprio Markdown não lida com isso, mas ggtext
permite alguma formatação básica de HTML / CSS:
> transformation transformation %>%
> mutate(VarColor=ifelse(value>, "#00A000", "#A00000"), # hex codes for medium green and red
> ColoredVar=glue("{Var}"))
> ggplot(transformation, aes(x=ColoredVar, y=value, fill=value>)) +
> geom_col() + coord_flip() + facet_wrap(~name, scales="free_y") +
> theme(axis.text.y=element_markdown())
A documentação indica que o pacote atualmente suporta apenas um subconjunto bastante limitado de Markdown, HTML e CSS, mas já parece bastante formidável – os exemplos incluem poder usar imagens como rótulos para um eixo discreto, o que é bastante interessante. Parece que vai precisar de muito mutate()
e glue()
chamadas no fluxo de trabalho, como usei acima, mas isso não é um problema.
Relacionado
[ad_2]