7 Visualização de dados (dataviz)

Objetivos deste capítulo:

EM CONSTRUÇÃO

Dicas

Vamos criar um dataframe com valores aleatórios e depois vamos criar alguns gráficos a partir dele.

# criando um dataframe com valores aleatórios
df <- read.table( header = TRUE, sep = ";", 
                        stringsAsFactors = TRUE, text = '
Col1;Col2;Col3
A;12;24
B;25;41
C;37;13
D;22;18')
# convertendo o datatype das colunas para numeric
df$Col2 <- as.numeric(df$Col2)                      
df$Col3 <- as.numeric(df$Col3)                      

7.1 Base plots

O R vem com um pacote básico, nativo de gráficos, como o hist() para histogramas, pie() para gráfico de pizza, barplot() para gráfico de barras, plot() para gráfico de dispersão (scatterplot) e gráficos de linha, e boxplot() para boxplot ou whiskerplot.

7.1.1 Histograma (histogram) no pacote base

Criando um gráfico simples. Histogramas são interessantes para observar a distribuição de frequência de um determinado conjunto de valores numéricos, por exemplo, caso queira ver a distribuição de alturas das pessoas de uma sala de aula. Para tal, precisamos de valores numéricos. Vamos começar pelo histograma que necessita de apenas um vetor com dados numéricos, mas também podemos especificar o número (aproximado) de barras (breaks):

dados <- c(24, 22, 27, 17, 33)

hist(as.integer(dados))

hist(as.integer(dados), breaks = 2)

Repare que o número de colunas não bate com o número de barras no nosso gráfico. O histograma cria “breakpoints” ou “bins” usando uma fórmula (sturges). Isto permite termos valores mais arredondados ou mais precisos, a depender da visualização que quisermos. É possível especificar o número de barras com o argumento breaks = X, mas ainda assim como uma sugestão, já que o R ainda decide se o número é plausível.

hist(df$Col2, 
     breaks = 4,
        main="Meu Título", xlab="Descrição do eixo x", ylab="Descrição do eixo Y",
        labels= TRUE, # Adicionar os valores nas barras
        border="darkblue", col="lightblue",
        density=25, # adicionado hachuras
        xlim=c(10,40) # se quisermos delimitar os valores mínimos e máximos no eixo X
)

7.1.2 Gráfico de barras (barplot)

Repetindo o exemplo da introdução ao R na seção sobre fatores, fazendo um gráfico de barras simples a partir de um vetor, mas agora explicando a parte gráfica e aproveitando o pipe do tidyverse. Perceba que o pacote já faz a soma para nós.

# carregando o magritrr para usar os pipes
library(magrittr)

aeroportos <- c("BSB", "CON", "BSB", "VIC", "GUA", "FOR", "MAO",
                "GUA", "CON", "CON", "REC", "UDI", "VIC", "GUA")
# Numa versão mínima do gráfico:
aeroportos %>% factor %>% summary %>% barplot

E numa versão mais elaborada do gráfico de barras:

aeroportos %>%
  # transformando o vetor em fator para o barplot funcionar
  factor %>%
  # somando os repetidos
  summary %>%
  # ordendando com "sort()", e de modo decrescente com "decreasing = TRUE"
  sort(., decreasing = TRUE) %>%
  # plotando o gráfico
  barplot(
    main = "Aeroportos Brasil", sub = "Sublegenda", 
    xlab = "Legenda eixo x", ylab = "Legenda eixo y",
    legend.text = "Frequência",
    # cores 
    col = c("darkred", "indianred"),
    # rotacionando as legendas do das barras. Bom para quando as legendas são extensas
    las=2,
    # fazer o gráfico de modo horizontal
    horiz = TRUE)

O comando text() permite adicionar texto aos gráficos do R. e o comando legend() permite acrescentar e mudar diversos parâmetros da legenda.

7.1.3 Gráfico de Pizza ou setograma (pie chart)

Os gráficos de pizza, de torta, ou ainda setograma é usado para mostrar diferentes proporções. Eles se tornaram controversos ultimamente, pois perdem o sentido de mostrar claramente diferentes proporções se tivermos muitos itens e/ou com valores próximos. Mas é necessário saber fazê-los:

# Numa versão mínima do gráfico:
aeroportos |> factor() |> summary() |> pie()

Gerando um gráfico de pizza mais elaborado

# criando um vetor nomeado com as frequências de cada aeroporto
aeroportos2 <- aeroportos |> factor() |> summary() 
aeroportos2
## BSB CON FOR GUA MAO REC UDI VIC 
##   2   3   1   3   1   1   1   2
pie(aeroportos2, 
    main = "Aeroportos",
    labels = unname(aeroportos2), # percentual
    col = rainbow(length(aeroportos2)) # espectro de cores
      )
legend("topright", names(aeroportos2), cex = 0.8, fill = rainbow(length(aeroportos)))

Se quiser fazer um gráfico de pizza 3d, dê uma olhada no pacote plotrix.

7.1.4 Gráfico de dispersão (scatterplot)

Criando o gráfico com a função plot() do pacote base. Vamos precisar de especificar quais os valores de x e y de nosso gráfico: plot(x,y)

plot(df$Col2, df$Col3)

Um pouco de história

O scattterplot foi inventado em 1833 por J. F. W. Herschel em dois papers no jornal Memoirs of the Royal Astronomical Society detalhando a órbita de estrelas gêmeas a partir da observação do ângulo relativo de sua posição e da sua distância angular. O pacote HistData possui os datasets Virginis e Virginis.interp com observações feitas por Herschel das estrelas virgens.

Em 1973, o estatístico Francis Anscombe publicou o seguinte artigo:

ANSCOMBE, Francis J. (1973). Graphs in statistical analysis. The American Statistician, 27, 17–21. https://doi.org/10.2307/2682899

Nele, o estatístico construiu diferentes datasets com mesmo número de elementos (onze), mesma média e desvio padrão, mas que ao virarem gráficos de dispersão, mostravam relações bem diferentes. Com isso queria chamar a atenção para a importância de visualizar relações na análise estatística e não somente a observação das medidas citados, o que poderia ser enganoso. Estes dados estão presentes no pacote datasets: anscombe e outros datasets com esta mesma intenção didática, mas com dados diferentes nos pacotes datasauRus e anscombiser.

# Carregando o dataset
data(anscombe)
str(anscombe)
## 'data.frame':    11 obs. of  8 variables:
##  $ x1: num  10 8 13 9 11 14 6 4 12 7 ...
##  $ x2: num  10 8 13 9 11 14 6 4 12 7 ...
##  $ x3: num  10 8 13 9 11 14 6 4 12 7 ...
##  $ x4: num  8 8 8 8 8 8 8 19 8 8 ...
##  $ y1: num  8.04 6.95 7.58 8.81 8.33 ...
##  $ y2: num  9.14 8.14 8.74 8.77 9.26 8.1 6.13 3.1 9.13 7.26 ...
##  $ y3: num  7.46 6.77 12.74 7.11 7.81 ...
##  $ y4: num  6.58 5.76 7.71 8.84 8.47 7.04 5.25 12.5 5.56 7.91 ...

# plotando o gráfico
plot(anscombe$x1, anscombe$y1)

Mudando o tipo de figura no gráfico através do parâmetro pch, sendo:

  • 1: círculo
  • 2: triângulo
  • 3: sinal de mais
  • 4: sinal de “x”
  • 5: losango
  • 6: triângulo reverso
  • 7: Quadrado riscado com x
plot(anscombe$x1, anscombe$y1, pch = 2) 

Se quisermos adicionar uma linha, usamos abline(). Como parâmetros:

  • h é horizontal e v vertical. O valor a seguir define onde será o corte
  • a significa a intersecção
  • b é o slope
plot(anscombe$x1, anscombe$y1, 
        main= "Dataset Anscombe", ylab = "Rótulo eixo Y", xlab = "Rótulo eixo X")
abline(h=10)

plot(anscombe$x1, anscombe$y1, 
        main= "Dataset Anscombe", ylab = "Rótulo eixo Y", xlab = "Rótulo eixo X")
abline(h=9.5, #local de corte da linha
       col = "red", # cor da linha= vermelho
       lty = "dashed", # modifica o tipo de linha: tracejado
       lwd = 3 # espessura da linha
       )  

7.1.5 Gráfico de linha (line plot)

Para o gráfico de linhas também utilizamos a função plot(), porém mudamos o tipo: l para linhas e o para linhas e pontos.

plot(df$Col3, type = "l") # apenas linha

plot(df$Col3, type = "o") # linha e ponto

Gráficos de linha múltiplos

plot(df$Col3, type = "o", col = "red")
lines(df$Col2, type = "o", col = "blue")

7.2 Cores

Para saber as cores disponíveis, usamos o comando colors(), que retorna 657 opções de cores. Se quisermos ver, por exemplo, somente as opções de vermelho:

grep("red", colors(), value = T)
##  [1] "darkred"         "indianred"       "indianred1"      "indianred2"     
##  [5] "indianred3"      "indianred4"      "mediumvioletred" "orangered"      
##  [9] "orangered1"      "orangered2"      "orangered3"      "orangered4"     
## [13] "palevioletred"   "palevioletred1"  "palevioletred2"  "palevioletred3" 
## [17] "palevioletred4"  "red"             "red1"            "red2"           
## [21] "red3"            "red4"            "violetred"       "violetred1"     
## [25] "violetred2"      "violetred3"      "violetred4"

Dicas: Cores no R

CAPÍTULO EM CONSTRUÇÃO

7.3 O pacote Lattice

CAPÍTULO EM CONSTRUÇÃO

(Mas há um exemplo de uso do lattice no apêndice deste manual, sobre a CPI da Pandemia)

7.4 O pacote ggplot2

O ggplot2 é um dos pacotes da suíte de pacotes do tidyverse e segue a gramática dos gráficos de Hadley Wickham. O ggplot é um dos pacotes mais famosos do tidyverse ou mesmo do R. Instalando o pacote ggplot, caso não tenha instalado o tidyverse ou o ggplot:

install.packages('ggplot2', )

Carregando o pacote ggplot:

library(ggplot2)

A chamada lógica da gramática dos gráficos, sob a qual o ggplot foi construído, possui 7 níveis:

    1. dados: isto é, a base de dados a ser usada.
    1. aesthetics aes(): o que você pecisa para plotar, define os eixos x e y.
    1. geoms ou geometria, geom_*(), qual tipo de gráfico queremos. Há cerca de 37 tipos disponíveis, como histograma, gráfico de linhas, dispersão, boxplot, etc.
    1. facets
    1. Estatística. Refere-e a algumas funções estatísticas. Pode-se, por exemplo, acrescentar uma reta de regressão.
    1. Coord ou Sistema de coordenadas.
    1. Temas, theme: muda o fundo do gráfico.

Desse modo, vamos plotando o gráfico, nível por nível. A ordem pode mudar um pouco, alguns podem estar ausentes, mas são obrigatórios os três primeiros (dados, aes e geoms), e sem eles, não temos o gráfico. Para ilustar, vamos fazer um histograma, um gráfico simples, e que só precisa do eixo x.

ggplot(data = MeuDataBase, aes(x=ColunaDoDatabase_que_será_o_eixo_x)) + geom_histogram()

E agora um exemplo prático:

ggplot(data = mtcars, aes(x=mpg)) + geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Vamos fazer o mesmo barplot de aeroportos

class(aeroportos)
## [1] "character"
# aeroportos não pode ser um vetor char para usarmos no ggplot
# temos de transformá-lo em um tibble 
aer.tibble <- tibble::tibble(aer = aeroportos)
ggplot(aer.tibble, aes(aer)) + geom_bar() 

Podemos reordenar com base não na ordem alfabética, mas em valores, crescentes ou decrescentes. Para tal, usamos a função fct_reorder() no nível aes, no seguinte modo: aes(fct_reorder( eixoX, eixoY), eixoY)).

7.4.1 ggplot: nível aes

Como dito, o nível “aes” define os eixos x e y. É nele que definimos onde entram os dados. Também é aqui que podemos redefinir a ordem de apresentação dos dados. Por exemplo, no gráfico dos aeroportos, podemos reordená-los da seguinte forma:

# plyr cria um data frame com a coluna "x" de nomes/fatores e "freq" com a frequência
aeroportos.df <- plyr::count(aeroportos) 
# gerando o gráfico
ggplot(aeroportos.df, aes(reorder(x, -freq), freq)) + geom_col()

Usamos reorder para reordenar conforme o valor de “freq”. Se quisermos em ordem crescente, usamos aes(reorder(x, freq), freq)). Se quisermos a ordem inversa, dos valores maiores aos menores, acrescentamos o sinal de - assim: aes(reorder(x, -freq), freq)).

No caso abaixo, usamos um database já disponível sobre diamantes. Atribuímos, para cada coluna/variável, um aspecto no gráfico, como eixos x e y, cores diferentes e formas.

ggplot(data = diamonds, 
       aes(x=carat, y=price,
# 'shape' aqui diz que cada valor na variável 'cut' terá uma forma (shape) diferente
           shape = cut,
# 'color' diz que cada valor na variável terá uma cor diferente. 
# "clarity" é o nome da variável/coluna com base na qual as cores variarão 
            color = clarity
           )) + 
  geom_point()
## Warning: Using shapes for an ordinal variable is not advised

7.4.1.1 ggplot:Argumento position

Ao menos no caso de gráficos de barras, podemos especificar como gráficos com mais de uma variável terão as informações agrupadas. Primeiro, vamos criar um database com valores aleatórios

meuDF <- read.table(header = T, text = '
  mes ano valor valor2
  1   2019  23  14
  1   2020  31  36
  1   2021  28  13
  2   2019  28  20
  2   2020  29  21
  2   2021  30  19
  3   2019  19  20
  3   2020  26  16
  3   2021  24  24')

Gerando o gráfico barras - geom_bar() - ou de colunas - geom_col() - é possível distribuir os gráficos de modos distintos.

# para facilitar, vamos salvar parte do código numa variável
p <- ggplot(meuDF, aes(x=ano, y=valor, fill=as.factor(mes))) 

# Vamos agora testar diferentes posições (positions):
# No caso, para cada ano, os valores dos meses
# usando a posição "dodge": "desviar" ou "esquivar"
p + geom_col(position = "dodge")

# Fill que calcula percentualmente. O eixo y vai até 100%
p + geom_col(position = "fill")

# stack vai o valor nominal
p + geom_col(position = "stack")

Se está incomodado com a legenda “as.factor(mes)”, veremos mais adiante como personalizá-lo.

7.4.2 ggplot: Nível geom

“geom”, ou “geometry” (geometria), define o tipo de gráfico que queremos, se gráfico de barras ou linhas, se boxplot, etc. Há 37 tipos diferentes. Olhando a folha de dicas (cheat sheet) do ggplot2 opção1, opção2 podemos ver as opções de gráficos (geom_alguma_coisa) quando temos uma variável somente, quando tempos duas e assim por diante.

7.4.2.1 geom_line: gráfico de linha

Criando um data frame com duas variáveis numéricas para testarmos.

dataf <- read.table(header=TRUE, text='
 Letra Valor1 Valor2
    A 9   4
    B 14  6
    C 11  8
    D 12  5')

Gerando um gráfico de linha simples

ggplot(dataf, aes(x=Valor1, y=Valor2)) + 
  geom_line()

Na versão ampliada

ggplot(dataf, aes(x=Valor1, y=Valor2)) + 
  geom_line(
    # largura da linha
          size=1.5, 
    # tipo de linha. pontilhada=dashed
            linetype = "dotted", 
            color = "darkblue", # cor 
  # adiciona uma seta. ver grid::arrow()
            arrow=arrow()
            ) +
# adiciona pontos  na interseção
 geom_point(size=3, color="red") 

  • O linetype pode ser “blank” (vazio), “solid”, “dashed” (tracejado), “dotted” (pontilhado), “dotdash” (ponto e traço), “longdash” (traços longos), “twodash”. Estes também podem ser especificados por números, sendo 1 para “blank”, 2 para “dashed” e assim por diante.

Para o caso de várias linhas

ggplot(meuDF, aes(x=mes, y=valor)) + 
  geom_line(aes(group =ano, 
            # cor conforme o ano
                color=as.factor(ano),
            # tipo de linha conforme a varivel ano
                linetype = as.factor(ano),),
            # size: espessura das linhas no gráfico
                size=1) 

  • Se não usarmos o as.factor em ano, os anos serão considerados contínuos e podem aparecer errados na escala, como “2019.5”. Para evitar isso, caso aconteça, usamos o as.factor() na variável.
  • linetype = as.factor(ano), dentro de aes do geom_line, para gerar o gráfico como queremos. Forçamos a variável ano em as.factor() pois ao tentar rodar, vimos na mensagem de erro que estava como variável contínua, o que não funciona para este tipo de gráfico. Forçamos então a se tornar discreta com o comando as.factor e booom! funcionou.
  • Mais à frente veremos opções de configurações de cores mais avançadas.

Vejamos agora os níveis opcionais do ggplot. Não há nenhuma ordem certa entre eles.

7.4.2.2 geom_point: gráfico de dispersão

Para um gráfico de dispersão precisamos de duas variáveis contínuas. No DF que criamos com valores aleatórios, temos as colunas “valor” e “valor2”.

meuDF |>
  ggplot(aes(x=valor, y=valor2)) +
  geom_point()

7.4.3 ggplot: nível facet_

Caso queiramos quebrar as informações em diferentes gráficos, usamos facet. Podemos usar facet_grid ou facet_wrap (este inverte os eixos x e y) ver “facetting” no sheet cheat.

# salvando tudo em uma variável para facilitar o uso
g <- ggplot(data=diamonds, aes(x=carat, y=price)) +geom_point()

g + facet_grid(.~cut)

# se quiser compará-los na horizontal:
g + facet_grid(cut~.)

# cria um grid entre cut e clarity
g + facet_grid(cut~clarity)

Dica ggplot: facet_

7.4.4 ggplot: nível stat

O nível “stat” refere-se a “estatística”. Pode-se acrescentar a linha de regressão em um gráfico de dispersão, por exemplo. Há opções de usar funções como lm (linear models, usado em modelos de regressão), glm, gam, loss, rlm.

meuDF |>
  ggplot(aes(x=valor, y=valor2)) +
  geom_point() +
  geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

Se quisermos a linha da regressão linear, usamos o argumento method = "lm", lm significando “linear model”:

meuDF |>
  ggplot(aes(x=valor, y=valor2)) +
  geom_point() +
  geom_smooth(method = "lm")
## `geom_smooth()` using formula 'y ~ x'

O sombreamento ao redor da linha indica o erro padrão. Caso opte por retirá-la, acrescente o argumento se = FALSE ou se = 0.

7.4.5 ggplot: nível sistema de coordenadas

  • Caso queira limitar os dados que aparecem no gráfico, é possível com xlim e ylim().
  • Pode-se mudar a proporção, ampliando ou reduzindo os eixos através do ratio, como em coord_fixed(ratio=4)
  • Para rotacionar o gráfico em 90º, acrescente o parâmetro + coord_flip().

7.4.6 Cores no ggplot

É possível utilizar paletas de cores diferentes do padrão. Um modo é usar o pacote RColorBrewer e o comando scale_fill_brewer()

Gerando o gráfico usando apenas a coluna Valor1 e a letra

ggplot(dataf, aes(x=Letra, y=Valor1, fill=Letra)) + geom_bar(stat="identity") +
    scale_fill_brewer(palette= "BuGn")

Há diversas outras paletas de cores.

  • Há cores divergentes, como como BrBG, PiYG, PRGn, PuOr, RdBu, RdGy, RdYlBu, RdYlGn e Spectral;
  • há sequência de cores qualitativas, como Accent, Dark2, Paired, Pastel1, Pastel2, Set1, Set2, Set3
  • Sequenciais como: Blues, BuGn, BuPu, GnBu, Greens, Greys, Oranges, OrRd, PuBu, PuBuGn, PuRd, Purples, RdPu, Reds, YlGn, YlGnBu, YlOrBr e YlOrRd.

Palestas de cores Fonte: cookbook-r.com

Há ainda outras escalas de cores, como scale_alpha(), scale_colour_continuous(), scale_colour_gradient(), scale_colour_grey(), scale_colour_hue(), scale_colour_steps(), scale_colour_viridis_d().

7.4.6.1 Cores definidas manualmente: scale_fill_manual

Para usar sequência de cores personalizadas usa-se comando é scale_fill_manual e uma sequência de nomes de cores - como “green”, “blue”. Para ver a lista completa, digite colors() no console - ou use valores hexadecimais das cores.

Cores = c("yellowgreen", "#66CC99", "#3CB371", "seagreen4")
ggplot(dataf, aes(x=Letra, y=Valor1, fill=Letra)) + 
  geom_bar(stat="identity") + 
    scale_fill_manual(values=Cores)

7.4.6.2 Cores contínuas

Primeiro criando um data frame com valores aleatórios.

df <- read.table(header=TRUE, text='
  valorX valorY
  3  3.4
  2  4
  2.5 5
  1  2.3
  3.5 5.4
  1.7 2.7
  2.3  2.6
  2.7 3.1')

Podemos acrescentar gradientes diferentes, como o comando rainbow(). O valor dentro dele refere-se ao número de cores dentro do espectro do arco-íris

ggplot(df, aes(x=valorX, y=valorY, colour=valorX)) + 
  geom_point(stat="identity") + 
    scale_colour_gradientn(colours=rainbow(4))

7.4.7 Anotações no ggplot: annotate()

Caso queira adicionar anotação em um gráfico, a função annotate() permite adicionar comentários, destaques, linhas, etc. Em sua versão mínima para adicionar comentário de texto, precisamos dos argumentos: annotate(geom, x = valorX, y = valorY, label = "texto".

O argumento geom da função annotate aceita os seguintes parâmetros:

  • "text": para o texto sem caixa
  • "label": para texto dentro de uma caixa
  • "segment": para fazer um traço (parâmetros exigidos: x, xend, y, yend)
  • "pointrange": para um traço com ponto (parâmetros exigidos: x, y, ymin, ymax)
  • "rect": para destacar uma região com um retângulo. (parâmetros exigidos: xmin, xmax ymin, ymax)

Vamos gerar um gráfico e salvá-lo como o objeto “grafico”

grafico <- meuDF |>
  ggplot(aes(x=valor, y=valor2)) +
  geom_point()

grafico

grafico + ggplot2::annotate(geom = "label", # ou "text", caso não queira a caixa ao redor do texto
    x = 24, y = 25, # posições no eixo cartesiano
    colour = "blue",
    size = 2,         # tamanho da letra
    label =  "texto")

A função annotate também permite destacar região no gráfico

grafico +
  ggplot2::annotate("rect",
    # posições no eixo cartesiano:
    xmin = 25, xmax = 28.5,
    ymin = 15, ymax = 22,
    # colour="blue", # cor de contorno da caixa
    alpha =  .2 # nível de transparência
  )

PARTE SOBRE GGPLOT AINDA EM EXPANSÃO

7.4.8 Dicas ggplot

Dicas

Saindo do básico no ggplot

7.4.9 Dicas de extensões e outros pacotes gráficos

Dica para tirar dúvidas com o GGplot

O pacote ggx permite digitar sua dúvida sobre o ggplot e este retornar a solução. Não faz milagres, mas pode ajudar. Para utilizá-lo, após instalá-lo através do install.packages('ggx'):

library(ggx) # carregando o pacote
gghelp("flip x and y axis")
## coord_flip()
gghelp("label in darkblue")
## theme(axis.title.x=element_text(color='darkblue'))
gghelp("rotate x-axis label 45 degree")
## theme(axis.text.x = element_text(angle = 45))

Dicas

  • O pacote patchwork torna fácil fazer gráficos múltiplos. Há um exemplo de seu uso no apêndice sobre CPI da Pandemia.
  • psych::pairs.panels() apresenta correlação de Pearson, histograma e regressão
  • O ggplot possui diversos plugins de extensão, como:
    • ggaly extensão do ggplot.
    • ggtext: para diversas otimizações nos textos, como múltiplas cores e a possibilidade de usar markups como markdown ou LaTex nos títulos dos gráficos.
    • ggpattern: para usar hachuras ou texturas nos gráficos
    • gghighlight: para realçar algo no gráfico.
    • gganimate: para fazer gráficos animados
    • ggradar para construir gráficos de radar
    • Há esta lista mais completa, com cerca de 111 extensões registradas para o ggplot, com a curadoria do pessoal envolvido no tidyverse. Há dicas de como fazer um pacote para o ggplot.

7.5 Gráficos de visualização textual

Esta seção pretende mostar alguns gráficos mais peculiares da análise textual. Alguns exemplos de usos de gráficos ou indicação para seções posteriores, como nuvens de palavras, dedrogramas, pyramid plot, etc.

Seção sobre visualização textual em expansão

O pacote ggpage permite criar visualizações que destaca de modo panorâmico a incidência de certas palavras no texto.

library(ggpage)
library(dplyr)
str(tinderbox)
## tibble [211 × 2] (S3: tbl_df/tbl/data.frame)
##  $ text: chr [1:211] "A soldier came marching along the high road: \"Left, right - left, right.\" He" "had his knapsack on his back, and a sword at his side; he had been to the wars," "and was now returning home. As he walked on, he met a very frightful-looking old" "witch in the road. Her under-lip hung quite down on her breast, and she stopped" ...
##  $ book: chr [1:211] "The tinder-box" "The tinder-box" "The tinder-box" "The tinder-box" ...
ggpage_quick(tinderbox)

E usando um exemplo o próprio pacote:

tinderbox %>%
  ggpage_build() %>%
  mutate(long_word = stringr::str_length(word) > 8) %>%
  ggpage_plot(aes(fill = long_word)) +
  labs(title = "Palavras longas através do texto Tinder-box") +
  scale_fill_manual(values = c("grey70", "blue"),
                    labels = c("8 ou menos", "9 ou mais"),
                    name = "Comprimento das palavras")

Há mais opções de visualizações de exemplo na página do pacote, inclusive com animações, uso de dicionários (como em análise de sentimentos). Como exemplificado no apêndice deste manual, no exemplo da CPI da Pandemia, há também o gráfico de dispersão lexical (lexical dispertion), do pacote Quanteda, que também mostra a ocorrência de certo termo ao longo do(s) texto(s).