Exibindo séries temporais com R

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


[Esteartigofoipublicadopelaprimeiravezem[Thisarticlewasfirstpublishedon R no Coding Club UC3M, e gentilmente contribuiu para os R-blogueiros]. (Você pode relatar um problema sobre o conteúdo desta página aqui)


Deseja compartilhar seu conteúdo com R-blogueiros? clique aqui se você tiver um blog ou aqui se não tiver.

de Oscar Perpiñán Lamigueiro

Introdução

Uma série temporal é uma sequência de observações registradas em consecutivas
instantes de tempo. A visualização de séries temporais pretende revelar
mudanças de uma ou mais variáveis ​​quantitativas ao longo do tempo e
exibir as relações entre as variáveis ​​e sua evolução
através do tempo. O gráfico padrão de séries temporais exibe o tempo
o eixo horizontal. Por outro lado, o tempo pode ser concebido como um
variável de agrupamento ou condicionamento. Esta solução permite vários
variáveis ​​a serem exibidas juntamente com um gráfico de dispersão, usando diferentes
painéis para subconjuntos de dados (tempo como variável condicionante) ou
usando atributos diferentes para grupos de dados (hora como um agrupamento
variável). Finalmente, o tempo pode ser usado como uma variável complementar que
adiciona informações a um gráfico onde várias variáveis ​​são confrontadas.

As próximas seções fornecem uma variedade de exemplos para ilustrar um conjunto de
técnicas úteis que trabalham com três conjuntos de dados disponíveis no data

pasta do repositório.

Este documento foi preparado com conteúdo extraído e adaptado
da segunda edição do livro “Exibindo séries temporais,
e dados de espaço-tempo com R “
publicado com Chapman & Hall / CRC.

Os pacotes mais relevantes são: lattice, latticeExtrae
ggplot2 para gráficos estáticos; zoo e xts para leitura e
organizar dados como séries temporais; RColorBrewer para definir a cor
paletas; e pacotes dygraphs, highchartere plotly, Sediada
no htmlwidgets estrutura, para gerar animações ou interações
gráficos.

Vamos começar a carregar os pacotes principais e definir alguns gráficos
parâmetros de lattice e latticeExtra.

library(lattice)
library(ggplot2)
# latticeExtra must be loaded after ggplot2 to prevent masking of `layer`
library(latticeExtra)
library(RColorBrewer)
# lattice and latticeExtra configuration
myTheme <- custom.theme.2(
  pch=19, cex=0.7, region=rev(brewer.pal(9, 'YlOrRd')),
  symbol=brewer.pal(n=8, name="Dark2"))
myTheme$strip.background$col = myTheme$strip.shingle$col =
  myTheme$strip.border$col = 'transparent'

myArgs <- list(
  as.table=TRUE, between=list(x=0.5, y=0.2),
  xscale.components = function(...)
    modifyList(xscale.components.default(...), list(top=FALSE)),
  yscale.components = function(...)
    modifyList(yscale.components.default(...), list(right=FALSE)))

lattice.options(default.theme=myTheme, default.args=modifyList(
  lattice.options()$default.args, myArgs))

library(zoo) 

E estes são os dados que usaremos:

  • aranjuez.RData
  • navarra.RData
  • CO2.RData
load('aranjuez.RData')
load('navarra.RData')
load('CO2.RData')

Tempo no eixo horizontal

O método de visualização mais frequente de uma série temporal usa o
eixo horizontal para representar o índice de tempo. Esta seção ilustra
duas variantes dessa abordagem para exibir séries temporais multivariadas:
séries temporais múltiplas com escalas diferentes e variáveis ​​com o
mesma escala.

Gráfico de tempo de variáveis ​​com diferentes escalas

Existe uma variedade de pesquisas científicas interessadas no
relação entre várias variáveis ​​meteorológicas. Um adequado
abordagem é exibir a evolução temporal de todos eles usando um
painel para cada uma das variáveis. A superposição de variáveis
características diferentes não é muito útil (a menos que
os valores foram redimensionados anteriormente), portanto essa abordagem é adiada por
a próxima seção (variáveis ​​com a mesma escala).

Para o primeiro exemplo, usaremos os oito anos de dados diários de
uma estação meteorológica localizada em Aranjuez (Madri).
Esta série temporal multivariada pode ser exibida com o xyplot

método de lattice para zoo objetos com um painel para cada variável.

## The layout argument arranges panels in rows
xyplot(aranjuez, layout = c(1, ncol(aranjuez))) 

O pacote ggplot2 fornece o método genérico autoplot para
automatize a exibição de determinadas classes com um comando simples. o
pacote zoo fornece um autoplot método para o zoo aula com
resultado semelhante ao obtido com xyplot.

## facet_free allows each panel to have its own range
autoplot(aranjuez) + facet_free() 

Séries temporais de variáveis ​​com a mesma escala

Como exemplo de séries temporais de variáveis ​​com a mesma escala, iremos
use medições de radiação solar de diferentes condições meteorológicas
estações.

A primeira tentativa de exibir essa série temporal multivariada faz uso
do xyplot.zoo método. O objetivo deste gráfico é
exibir o comportamento da coleção como um todo: as séries são
sobrepostos no mesmo painel (superpose=TRUE) sem legenda
(auto.key=FALSE), usando linhas finas e parcial
transparência. A transparência suaviza os problemas de overplotting e revela
agrupamentos de densidade porque as regiões com mais linhas sobrepostas são
mais escuro. O próximo código exibe as variações ao longo do tempo médio
(avRad)

avRad <- zoo(rowMeans(navarra, na.rm = 1), index(navarra))
pNavarra <- xyplot(navarra - avRad,
        superpose = TRUE, auto.key = FALSE,
        lwd = 0.5, alpha = 0.3, col = 'midnightblue') 
pNavarra 

Este resultado pode ser melhorado com o gráfico do horizonte. O gráfico do horizonte
é útil para examinar como um grande número de séries muda ao longo do tempo,
e faz isso de uma maneira que permita ambas as comparações entre os
séries temporais individuais e análises independentes de cada
Series. Além disso, comportamentos extraordinários e padrões predominantes são
facilmente distinguido.

Este gráfico exibe várias séries empilhadas recolhendo o eixo y
para liberar espaço vertical:

  • Valores positivos e negativos compartilham a mesma vertical
    espaço. Valores negativos são invertidos e colocados acima do
    linha de referência. O sinal é codificado usando diferentes tonalidades (positivo
    valores em azul e valores negativos em vermelho).
  • As diferenças de magnitude são exibidas como diferenças de cor
    intensidade (cores mais escuras para maiores diferenças).
  • As faixas coloridas compartilham a mesma linha de base e são sobrepostas, com
    bandas mais escuras na frente das mais claras.

Como os painéis compartilham a mesma estrutura de design, uma vez que
Como é compreendida a técnica, é fácil estabelecer comparações ou identificar
eventos extraordinários. Esse método é o que o Tufte descreveu como pequeno
múltiplos.

Leia Também  Apresentando o bwsTools: um pacote para os projetos dos melhores piores dimensionamentos (MaxDiff) do caso 1

O próximo código exibe as variações da radiação solar ao longo do tempo
média com um gráfico de horizonte usando uma linha para cada série temporal. No
código que escolhemos origin=0 e deixe o argumento horizonscale

indefinido (padrão). Com essa combinação, cada painel tem diferentes
escalas e as cores em cada painel representam desvios da
origem. Isso é representado na chave de cores com o ( Delta_i ) símbolo,
onde o subscrito i denota a existência de vários painéis com
escalas diferentes.

horizonplot(navarra - avRad,
            layout = c(1, ncol(navarra)),
            origin = 0, ## Deviations in each panel are calculated
                        ## from this value
            colorkey = TRUE,
            col.regions = brewer.pal(6, "RdBu")) 

O gráfico do horizonte também é útil para revelar as diferenças entre
uma série temporal univariada e outra referência. Por exemplo, podemos
estar interessado na partida da temperatura observada do
média de longo prazo ou, em outras palavras, a mudança de temperatura
Tempo. Vamos ilustrar essa abordagem com a série temporal diária
temperaturas médias medidas na estação meteorológica de
Aranjuez. A referência é a média diária de longo prazo calculada com
ave.

Ta <- aranjuez$TempAvg
timeIndex <- index(aranjuez)
longTa <- ave(Ta, format(timeIndex, '%j'))
diffTa <- (Ta - longTa) 

O próximo código usa horizonplot com o método de cortar e empilhar para distinguir entre anos.

years <- unique(format(timeIndex, '%Y'))
  
horizonplot(diffTa, cut = list(n = 8, overlap = 0),
            colorkey = TRUE, layout = c(1, 8),
            scales = list(draw = FALSE, y = list(relation = 'same')),
            origin = 0, strip.left = FALSE) +
    layer(grid.text(years[panel.number()], x  =  0, y  =  0.1, 
                    gp = gpar(cex = 0.8),
                    just = "left")) 

Uma alternativa é um gráfico de nível que exibe as séries temporais usando peças
de seu índice de tempo como variável independente e condicionante.
O código a seguir exibe as diferenças com o dia do mês em
o eixo horizontal e o ano no eixo vertical, com um
painel diferente para cada número de mês. Portanto, cada célula da próxima
O valor corresponde a um determinado dia da série temporal.

year <- function(x)as.numeric(format(x, '%Y'))
day <- function(x)as.numeric(format(x, '%d'))
month <- function(x)as.numeric(format(x, '%m')) 
myTheme <- modifyList(custom.theme(region = brewer.pal(9, 'RdBu')),
                      list(
                          strip.background = list(col = 'gray'),
                          panel.background = list(col = 'gray')))

maxZ <- max(abs(diffTa))

levelplot(diffTa ~ day(timeIndex) * year(timeIndex) | factor(month(timeIndex)),
          at = pretty(c(-maxZ, maxZ), n = 8),
          colorkey = list(height = 0.3),
          layout = c(1, 12), strip = FALSE, strip.left = TRUE,
          xlab = 'Day', ylab = 'Month', 
          par.settings = myTheme)

o ggplot versão requer um data.frame com o dia, ano e mês organizados em colunas diferentes.

df <- data.frame(Vals = diffTa,
                 Day = day(timeIndex),
                 Year = year(timeIndex),
                 Month = month(timeIndex)) 

Os valores (Vals coluna deste data.frame) são exibidos como uma plotagem de nível, graças à geom_raster função.

library(scales) 
## The packages scales is needed for the pretty_breaks function.

ggplot(data = df,
       aes(fill = Vals,
           x = Day,
           y = Year)) +
    facet_wrap(~ Month, ncol = 1, strip.position = 'left') +
    scale_y_continuous(breaks = pretty_breaks()) + 
    scale_fill_distiller(palette = 'RdBu', direction = 1) + 
    geom_raster() +
    theme(panel.grid.major = element_blank(),
          panel.grid.minor = element_blank()) 

Gráficos interativos

Esta seção descreve as alternativas interativas do sistema estático
figuras incluídas nas seções anteriores com vários pacotes:
dygraphs, highchartere plotly. Esses pacotes
estamos R interfaces para bibliotecas JavaScript com base no htmlwidgets

pacote.

Dygraphs

o dygraphs pacote é uma interface para o dygraphs Javascript
biblioteca e fornece recursos para traçar séries temporais. Funciona
automaticamente com xts objetos de séries temporais ou com objetos que podem
ser coagido a esta classe. O resultado é um gráfico interativo, onde
os valores são exibidos de acordo com a posição do mouse ao longo do tempo
Series. As regiões podem ser selecionadas para aumentar o zoom em um período de tempo.

library(dygraphs)

dyTemp <- dygraph(aranjuez[, c("TempMin", "TempAvg", "TempMax")],
       main = "Temperature in Aranjuez",
       ylab = "ºC")

widgetframe::frameWidget(dyTemp)

{"x": {"url": "/ post / 2020-03-03_files / figure-html // widgets / widget_unknown-chunk-14.html", "options": {"xdomain": "*", " allowfullscreen ": false," lazyload ": false}}," evals ":[], "jsHooks":[]}

Você pode personalizar dygraphs canalizando comandos adicionais para o
gráfico original. A função dyOptions fornece várias opções
para o gráfico e a função dyHighlight configura opções para
realce do mouse sobre a série de dados. Por exemplo, com o próximo código
o valor da semitransparência das linhas não selecionadas é reduzido e
a largura da linha selecionada é aumentada.

dyTemp %>%
  dyHighlight(highlightSeriesBackgroundAlpha = 0.2,
    highlightSeriesOpts = list(strokeWidth = 2)) %>%
  widgetframe::frameWidget()

{"x": {"url": "/ post / 2020-03-03_files / figure-html // widgets / widget_unknown-chunk-15.html", "options": {"xdomain": "*", " allowfullscreen ": false," lazyload ": false}}," evals ":[], "jsHooks":[]}

Uma abordagem alternativa para descrever as variáveis ​​superiores e inferiores de
essa série temporal é com uma região sombreada. o dySeries função
aceita um vetor de caracteres de comprimento 3 que especifica um conjunto de entradas
nomes de colunas a serem usados ​​como inferior, valor e superior para uma série com um
região sombreada ao redor.

dygraph(aranjuez[, c("TempMin", "TempAvg", "TempMax")],
 main = "Temperature in Aranjuez",
 ylab = "ºC") %>%
   dySeries(c("TempMin", "TempAvg", "TempMax"),
      label = "Temperature") %>%
  widgetframe::frameWidget()

{"x": {"url": "/ post / 2020-03-03_files / figure-html // widgets / widget_unknown-chunk-16.html", "options": {"xdomain": "*", " allowfullscreen ": false," lazyload ": false}}," evals ":[], "jsHooks":[]}

Highcharter

o highcharter pacote é uma interface para o highcharts

Biblioteca JavaScript, com um amplo espectro de gráficos
soluções. É possível exibir séries temporais com este pacote
com a combinação do genérico highchart função e vários
chamadas para o hc_add_series_xts função através do tubo %>%

operador. Mais uma vez, o resultado é um gráfico interativo com
recursos de seleção e zoom.

library(highcharter)
library(xts)

aranjuezXTS %
   hc_add_series(name = 'TempMax',
           aranjuezXTS[, "TempMax"]) %>%
   hc_add_series(name = 'TempMin',
           aranjuezXTS[, "TempMin"]) %>%
   hc_add_series(name = 'TempAvg',
           aranjuezXTS[, "TempAvg"]) %>%
  widgetframe::frameWidget()

{"x": {"url": "/ post / 2020-03-03_files / figure-html // widgets / widget_unknown-chunk-17.html", "options": {"xdomain": "*", " allowfullscreen ": false," lazyload ": false}}," evals ":[], "jsHooks":[]}

conspirador

o plotly pacote é uma interface para o plotly Javascript
biblioteca, também com um amplo espectro de soluções gráficas. Este pacote
não fornece nenhuma função especificamente focada no tempo
Series. Assim, o objeto de série temporal deve ser transformado em um
data.frame incluindo uma coluna para o índice de tempo. Se o
data.frame é em Largo formato (uma coluna por variável), cada
A variável será representada com uma chamada para o add_lines

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br

função. No entanto, se o data.frame é em grandes formato (uma coluna
para valores e uma coluna para nomes de variáveis) apenas uma chamada para
add_lines É necessário. O próximo código segue essa abordagem usando o
combinação de fortify, para converter o zoo objeto em um
data.framee melt, para transformar do formato amplo para o longo.

aranjuezDF <- fortify(aranjuez[,
            c("TempMax",
              "TempAvg",
              "TempMin")],
           melt = TRUE)

summary(aranjuezDF) 
##      Index                Series         Value        
##  Min.   :2004-01-01   TempMax:2898   Min.   :-12.980  
##  1st Qu.:2005-12-29   TempAvg:2898   1st Qu.:  7.107  
##  Median :2008-01-09   TempMin:2898   Median : 13.560  
##  Mean   :2008-01-03                  Mean   : 14.617  
##  3rd Qu.:2010-01-03                  3rd Qu.: 21.670  
##  Max.   :2011-12-31                  Max.   : 41.910  
##                                      NA's   :10

O próximo código produz um gráfico interativo com a função genérica
plot_ly conectado com add_lines através do operador do tubo,
%>%.

library(plotly)

plot_ly(aranjuezDF) %>%
   add_lines(x = ~ Index,
       y = ~ Value,
       color = ~ Series) %>%
  widgetframe::frameWidget()

{"x": {"url": "/ post / 2020-03-03_files / figure-html // widgets / widget_unknown-chunk-19.html", "options": {"xdomain": "*", " allowfullscreen ": false," lazyload ": false}}," evals ":[], "jsHooks":[]}

Leia Também  Usando {drake} para Machine Learning

Tempo como variável condicionante ou de agrupamento

Anteriormente, aprendemos a exibir a evolução no tempo de vários tempos
série com escalas diferentes. Mas, e se, em vez de exibir o
evolução do tempo, queremos representar a relação entre o
variáveis? Esta seção segue esta abordagem: primeiro, um gráfico de dispersão
matriz usando grupos é definida de acordo com o tempo como um agrupamento
variável; a seguir, um gráfico de dispersão aprimorado com o tempo como condicionador
A variável é produzida usando a técnica de pequenos múltiplos.

Matriz de dispersão: tempo como uma variável de agrupamento

As matrizes de dispersão são baseadas na técnica de pequenas
múltiplos: representações pequenas e em miniatura de várias imagens
exibidos de uma só vez, o que permite ao leitor imediatamente e em
paralelamente, compare as diferenças entre os quadros. Uma matriz de dispersão
é uma exibição de todos os gráficos de dispersão bivariados em pares dispostos em um (p vezes p ) matriz para (p ) variáveis. Cada subparcela mostra a relação
entre o par de variáveis ​​na interseção da linha e
coluna indicada pelos nomes das variáveis ​​nos painéis diagonais.

Essa ferramenta gráfica é implementada no splom função. o
O código a seguir exibe a relação entre o conjunto de
variáveis ​​meteorológicas usando uma paleta seqüencial do
Catálogo ColorBrewer (RbBu, com preto adicionado para concluir uma
paleta de doze cores) para codificar o mês. A ordem das cores de
esta paleta é escolhida para exibir os meses de verão com
cores intensas e para distinguir entre o primeiro e o segundo
metade do ano com vermelho e azul, respectivamente.

aranjuezDF <- as.data.frame(aranjuez)
aranjuezDF$Month <- format(index(aranjuez), '%m') 
## Red-Blue palette with black added (12 colors)
colors <- c(brewer.pal(n = 11, 'RdBu'), '#000000')
## Rearrange according to months (darkest for summer)
colors <- colors[c(6:1, 12:7)] 
splom(~ aranjuezDF[1:10], ## Do not include "Month"
     groups = aranjuezDF$Month,
     auto.key = list(space = 'right', 
         title = 'Month', cex.title = 1),
     pscale = 0, varname.cex = 0.7, xlab = '',
     par.settings = custom.theme(symbol = colors,
             pch = 19),
     cex = 0.3, alpha = 0.1)

o ggplot2 A versão deste gráfico é produzida graças ao
ggpairs função fornecida pelo GGally pacote.

library(GGally)

ggpairs(aranjuezDF,
 columns = 1:10, ## Do not include "Month"
 upper = list(continuous = "points"),
 mapping = aes(colour = Month, alpha = 0.1)) 

Gráfico de dispersão com o tempo como variável condicionante

Os gráficos anteriores usam cores para codificar meses. Em vez disso, vamos agora
exibir gráficos de dispersão separados com um painel para cada mês. Dentro
Além disso, o tipo de estatística (média, máximo, mínimo) é incluído
como uma variável condicionante adicional.

Primeiro, o conjunto de dados deve ser remodelado a partir do formato amplo
(uma coluna para cada variável) para o formato longo (apenas uma coluna para
os valores de temperatura com uma linha para cada observação). Esta tarefa
é facilmente realizado com o melt função incluída no
reshape2 pacote.

library(reshape2)

aranjuezRshp <- melt(aranjuezDF,
                     measure.vars = c('TempMax',
                                      'TempAvg',
                                      'TempMin'),
                     variable.name = 'Statistic',
                     value.name = 'Temperature')

Essa matriz de painéis pode ser exibida com ggplot usando
facet_grid. O código seguinte usa transparência parcial para lidar com
overplotting, pequenos segmentos horizontais e verticais (geom_rug) para
densidade de pontos de exibição em ambas as variáveis ​​e uma linha suave em cada
painel.

ggplot(data = aranjuezRshp, aes(Radiation, Temperature)) +
   facet_grid(Statistic ~ Month) +
   geom_point(col = 'skyblue4', pch = 19, cex = 0.5, alpha = 0.3) +
   geom_rug() +
   stat_smooth(se = FALSE, method = 'loess',
     col = 'indianred1', lwd = 1.2) +
   theme_bw() 

A versão com lattice precisa do useOuterStrips função de
a latticeExtra pacote, que imprime os nomes dos condicionamentos
variáveis ​​nas margens externas superior e esquerda.

useOuterStrips(
   xyplot(Temperature ~ Radiation | Month * Statistic,
    data = aranjuezRshp,
    between = list(x = 0),
    col = 'skyblue4', pch = 19,
    cex = 0.5, alpha = 0.3)) +
   layer({
 panel.rug(..., col.line = 'indianred1',
       end = 0.05, alpha = 0.6)
 panel.loess(..., col = 'indianred1',
         lwd = 1.5, alpha = 1)
   }) 

O tempo como variável complementar

Nesta seção, o tempo será usado como uma variável complementar que
adiciona informações a um gráfico onde várias variáveis ​​são
confrontado. Ilustraremos essa abordagem com a evolução do
a relação entre Renda Nacional Bruta (RNB) e carbono
dióxido ( (CO_2 )) para um conjunto de países extraídos do
banco de dados dos Dados Abertos do Banco Mundial. Vamos tentar várias soluções
para exibir a relação entre (CO_2 ) emissões e RNB sobre
os anos usando o tempo como variável complementar.

Polilinhas

Nossa primeira abordagem é exibir todos os dados em um painel com um
gráfico de dispersão usando nomes de países como o fator de agrupamento. Pontos de cada
país estão conectados com polilinhas para revelar a evolução do tempo.

## lattice version
xyplot(GNI.capita  ~ CO2.capita, data = CO2data,
xlab = "Carbon dioxide emissions (metric tons per capita)",
ylab = "GNI per capita, PPP (current international $)",
groups = Country.Name, type = 'b') 

Três melhorias podem ser adicionadas a este resultado gráfico:

  1. Defina uma paleta melhor para melhorar a discriminação visual entre
    países.
  2. Exiba informações de tempo com rótulos para mostrar os valores do ano.
  3. Rotule cada polilinha com o nome do país em vez de uma legenda.
Leia Também  Atualização de recuperação de sistemas Travelex

Escolhendo cores

o Country.Name variável categórica será codificada com um
paleta qualitativa, nomeadamente as cinco primeiras cores de Set1 paleta
de RColorBrewer pacote. Porque existem mais países
do que cores, temos que repetir algumas cores para completar o número de
níveis da variável Country.Name. O resultado é uma paleta com
cores não exclusivas e, portanto, alguns países compartilharão o mesmo
cor. Isso não é um problema porque as curvas serão rotuladas e
países com a mesma cor serão exibidos a distância suficiente.

nCountries <- nlevels(CO2data$Country.Name)
pal <- brewer.pal(n = 5, 'Set1')
pal <- rep(pal, length = nCountries) 

As cores adjacentes desta paleta são escolhidas para serem facilmente
distinguível. Portanto, a conexão entre cores e
países devem estar de forma que as linhas próximas sejam codificadas com
cores adjacentes da paleta. Uma abordagem simples é calcular o
média anual da variável a ser representada ao longo do eixo x
(CO2.capita) e extraia cores da paleta de acordo com o
ordem deste valor.

## Rank of average values of CO2 per capita
CO2mean <- aggregate(CO2.capita ~ Country.Name,
          data = CO2data, FUN = mean)
palOrdered <- pal[rank(CO2mean$CO2.capita)]  

## simpleTheme encapsulates the palette in a new theme for xyplot
myTheme <- simpleTheme(pch = 19, cex = 0.6, col = palOrdered) 
## lattice version
pCO2.capita <- xyplot(GNI.capita  ~ CO2.capita,
           data = CO2data,
           xlab = "Carbon dioxide emissions (metric tons per capita)",
           ylab = "GNI per capita, PPP (current international $)",
           groups = Country.Name,
           par.settings = myTheme,
           type = 'b')

pCO2.capita 

## ggplot2 version
gCO2.capita <- ggplot(data = CO2data,
           aes(x = CO2.capita,
           y = GNI.capita,
           color = Country.Name)) +
   geom_point() + geom_path() +
   scale_color_manual(values = palOrdered, guide = FALSE) +
   xlab('CO2 emissions (metric tons per capita)') +
   ylab('GNI per capita, PPP (current international $)') +
   theme_bw() 

Etiquetas para mostrar informações de hora

Esse resultado pode ser melhorado com etiquetas exibindo os anos para mostrar
a evolução do tempo. A função do painel panel.text imprime o
etiquetas de ano com a combinação de +.trellis, glayer_ e
panel.text. Usando glayer_ ao invés de glayer garantimos que o
as etiquetas são impressas abaixo das linhas.

## lattice version
pCO2.capita <- pCO2.capita +
   glayer_(panel.text(...,
        labels = CO2data$Year[subscripts],
          pos = 2, cex = 0.5, col = 'gray'))
pCO2.capita 

## ggplot2 version
gCO2.capita <- gCO2.capita + geom_text(aes(label = Year),
                colour = 'gray',
                size = 2.5,
                hjust = 0, vjust = 0)

Nomes de países: etiquetas de posicionamento

A solução comum para vincular cada curva ao valor do grupo é adicionar
Uma lenda. No entanto, uma legenda pode ser confusa com muitos itens. Dentro
Além disso, o leitor deve executar uma tarefa complexa: escolha a linha,
memorize sua cor, procure-a na legenda e leia o país
nome.

Uma abordagem melhor é rotular cada linha usando o texto próximo com o
mesma codificação de cores. Um método adequado é colocar os rótulos
evitando a sobreposição entre rótulos e linhas. O pacote
directlabels inclui um amplo repertório de métodos de posicionamento para
lidar com a sobreposição. A função principal, direct.label, é capaz de
determinar um método adequado para cada gráfico, embora o usuário possa
escolha um método diferente da coleção ou defina um método personalizado
método. Para o pCO2.capita objeto, os melhores resultados são obtidos
com extreme.grid.

library(directlabels)

## lattice version
direct.label(pCO2.capita,
      method = 'extreme.grid') 

## ggplot2 version
direct.label(gCO2.capita, method = 'extreme.grid') 

Gráficos interativos: animação

Esta seção descreve como exibir os dados através de animação com
funcionalidades interativas com uma solução que se assemelha ao movimento
produto gráfico publicado pela Gapminder.

Gapminder é uma fundação independente com sede em Estocolmo,
Suécia. Sua missão é “desmascarar mitos devastadores sobre o mundo
oferecendo acesso gratuito a uma visão de mundo baseada em fatos ". Eles fornecem gratuitamente
ferramentas, dados e vídeos on-line “para entender melhor as mudanças
mundo." O desenvolvimento inicial do Gapminder foi o Trendalyzer
software, usado por Hans Rosling em várias seqüências de seu documentário
"A alegria das estatísticas."

A técnica de visualização de informações usada pelo Trendalyzer é uma
gráfico interativo de bolhas. Por padrão, ele mostra cinco variáveis: duas
variáveis ​​numéricas nos eixos vertical e horizontal, tamanho da bolha e
cor e uma variável de tempo que pode ser manipulada com um controle deslizante. o
O software utiliza técnicas de escovação e vinculação para exibir o
valor numérico de um país destacado.

Vamos imitar a solução Trendalyzer / Motion Chart com o pacote
plotly, usando bolhas itinerantes de cores diferentes e com raio
proporcional aos valores da variável CO2.PPP. Anteriormente, você
deve assistir ao vídeo magistral “200 Países, 200 Anos, 4 Minutos”.

o plotly O pacote já foi usado anteriormente para criar um
gráfico interativo que representa o tempo no eixo x. Nesta secção
este pacote produz uma animação canalizando o resultado da plot_ly

e add_markers funções através do animation_slider função.

Variáveis CO2.capita e GNI.capita são representados no eixo x
e eixo y, respectivamente.

p <- plot_ly(CO2data,
      x = ~CO2.capita,
      y = ~GNI.capita,
      sizes = c(10, 100),
      marker = list(opacity = 0.7,
            sizemode = 'diameter')) 

CO2.PPP é codificado com os tamanhos dos círculos, enquanto Country.Name é
representado com cores e com rótulos.

p <- add_markers(p,
      size = ~CO2.PPP,
      color = ~Country.Name,
      text = ~Country.Name, hoverinfo = "text",
      ids = ~Country.Name,
      frame = ~Year,
      showlegend = FALSE) 

Por fim, a animação é criada com animation_opts, para personalizar o
tempos de quadro e transição e com animation_slider para definir o
controle deslizante.

p <- animation_opts(p,
         frame = 1000,
         transition = 800,
         redraw = FALSE)

p <- animation_slider(p,
           currentvalue = list(prefix = "Year "))

widgetframe::frameWidget(p)

{"x": {"url": "/ post / 2020-03-03_files / figure-html // widgets / widget_unknown-chunk-38.html", "options": {"xdomain": "*", " allowfullscreen ": false," lazyload ": false}}," evals ":[], "jsHooks":[]}

var vglnk = {key: '949efb41171ac6ec1bf7f206d57e90b8'};

(função (d, t) {
var s = d.createElement
s.src = '//cdn.viglink.com/api/vglnk.js';
var r = d.getElementsByTagName
} (documento, 'script'));

Para Deixe um comentário para o autor, siga o link e comente no blog: R no Coding Club UC3M.

R-bloggers.com oferece atualizações diárias por email sobre notícias e tutoriais do R sobre o aprendizado do R e muitos outros tópicos. Clique aqui se você deseja publicar ou encontrar um emprego em ciência da dados / R.


Deseja compartilhar seu conteúdo com R-blogueiros? clique aqui se você tiver um blog ou aqui se não tiver.



cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br