Pergunta

Histogramas e gráficos de dispersão são ótimos métodos para visualizar dados e a relação entre variáveis, mas recentemente tenho me perguntado sobre quais técnicas de visualização estou faltando. O que você acha que é o tipo de enredo mais subutilizado?

As respostas devem:

  1. Não ser muito comumente usado na prática.
  2. Seja compreensível sem muita discussão em segundo plano.
  3. Ser aplicável em muitas situações comuns.
  4. Inclua código reproduzível para criar um exemplo (de preferência em r). Uma imagem vinculada seria boa.
Foi útil?

Solução

Eu realmente concordo com os outros pôsteres: Os livros de Tufte são fantásticos e vale a pena ler.

Primeiro, eu apontaria você para Um tutorial muito bom sobre ggplot2 e ggobi De "Olhe para os dados" no início deste ano. Além disso, eu apenas destacaria uma visualização de R e dois pacotes de gráficos (que não são tão amplamente utilizados quanto os gráficos de base, treliça ou ggplot):

Mapas de calor

Eu realmente gosto de visualizações que podem lidar com dados multivariados, especialmente dados de séries temporais. Mapas de calor pode ser útil para isso. Um realmente legal foi apresentado por David Smith no blog Revolutions. Aqui está o código GGPlot, cortesia de Hadley:

stock <- "MSFT"
start.date <- "2006-01-12"
end.date <- Sys.Date()
quote <- paste("http://ichart.finance.yahoo.com/table.csv?s=",
                stock, "&a=", substr(start.date,6,7),
                "&b=", substr(start.date, 9, 10),
                "&c=", substr(start.date, 1,4), 
                "&d=", substr(end.date,6,7),
                "&e=", substr(end.date, 9, 10),
                "&f=", substr(end.date, 1,4),
                "&g=d&ignore=.csv", sep="")    
stock.data <- read.csv(quote, as.is=TRUE)
stock.data <- transform(stock.data,
  week = as.POSIXlt(Date)$yday %/% 7 + 1,
  wday = as.POSIXlt(Date)$wday,
  year = as.POSIXlt(Date)$year + 1900)

library(ggplot2)
ggplot(stock.data, aes(week, wday, fill = Adj.Close)) + 
  geom_tile(colour = "white") + 
  scale_fill_gradientn(colours = c("#D61818","#FFAE63","#FFFFBD","#B5E384")) + 
  facet_wrap(~ year, ncol = 1)

O que acaba parecendo um pouco assim:

alt text

RGL: gráficos 3D interativos

Outro pacote que vale bem o esforço para aprender é Rgl, que fornece facilmente a capacidade de criar gráficos 3D interativos. Existem muitos exemplos online para isso (inclusive na documentação do RGL).

O R-wiki tem um bom exemplo de como plotar gráficos de dispersão 3D usando RGL.

Ggobi

Outro pacote que vale a pena saber é rgggobi. Há um livro de Springer sobre o assunto, e muitas ótimas documentação/exemplos online, inclusive no "Olhando para os dados" curso.

Outras dicas

Eu realmente gosto PLOPPLOTS E encontre quando os recomendo a outras pessoas para obter problemas de dados apropriados, eles estão invariavelmente surpresos e encantados. Eles não parecem ter muita utilidade e não consigo descobrir o porquê.

Aqui está um exemplo do Quick-R:dotplot on car data

Acredito que Cleveland é o mais responsável pelo desenvolvimento e promulgação deles, e o exemplo em seu livro (no qual dados defeituosos foram facilmente detectados com um aparelho de pontapé) é um argumento poderoso para o seu uso. Observe que o exemplo acima coloca apenas um ponto por linha, enquanto o poder real deles vem com você tem vários pontos em cada linha, com uma lenda explicando qual é qual. Por exemplo, você pode usar símbolos ou cores diferentes para três momentos diferentes e, daí, obter facilmente um senso de padrões de tempo em diferentes categorias.

No exemplo a seguir (feito no Excel de todas as coisas!), Você pode ver claramente qual categoria pode ter sofrido com uma troca de etiquetas.

Dotplot with 2 groups

As parcelas usando coordenadas polares certamente são subutilizadas-alguns diriam por um bom motivo. Eu acho que as situações que justificam seu uso não são comuns; Eu também acho que quando essas situações surgem, as parcelas polares podem revelar padrões em dados que as parcelas lineares não podem.

Eu acho que é porque às vezes seus dados são inerentemente Polar e não linear-EG, é cíclico (coordenadas X representando tempos durante o dia 24 horas durante vários dias), ou os dados foram anteriormente mapeados em um espaço de recurso polar.

Aqui está um exemplo. Este gráfico mostra o volume médio de tráfego de um site por hora. Observe os dois picos às 22:00 e às 1:00. Para os engenheiros de rede do site, esses são significativos; Também é significativo que eles ocorram perto um do outro (apenas dois horas de intervalo). Mas se você plotar os mesmos dados em um sistema de coordenadas tradicionais, esse padrão seria completamente oculto-tocado linearmente, esses dois picos seriam 20 horas de intervalo, o que eles são, embora também estejam com apenas duas horas de intervalo em dias consecutivos. O gráfico polar acima mostra isso de maneira parcimoniosa e intuitiva (uma lenda não é necessária).

Polar chart showing site traffic, with peaks at hours 1 and 22

Existem duas maneiras (que estou ciente) para criar gráficos como essa usando R (criei o gráfico acima com). Uma é codificar sua própria função nos sistemas gráficos de base ou grade. Eles de outra maneira, o que é mais fácil, é usar o Pacote circular. A função que você usaria é 'rose.diag':

data = c(35, 78, 34, 25, 21, 17, 22, 19, 25, 18, 25, 21, 16, 20, 26, 
                 19, 24, 18, 23, 25, 24, 25, 71, 27)
three_palettes = c(brewer.pal(12, "Set3"), brewer.pal(8, "Accent"), 
                   brewer.pal(9, "Set1"))
rose.diag(data, bins=24, main="Daily Site Traffic by Hour", col=three_palettes)

Se o seu gráfico de dispersão tiver tantos pontos que se tornar uma bagunça completa, tente um gráfico de dispersão suavizada. Aqui está um exemplo:

library(mlbench) ## this package has a smiley function
n <- 1e5 ## number of points
p <- mlbench.smiley(n,sd1 = 0.4, sd2 = 0.4) ## make a smiley :-)
x <- p$x[,1]; y <- p$x[,2]
par(mfrow = c(1,2)) ## plot side by side
plot(x,y) ## left plot, regular scatter plot
smoothScatter(x,y) ## right plot, smoothed scatter plot

o hexbin O pacote (sugerido por @dirk eddelbuettel) é usado para o mesmo objetivo, mas smoothScatter() tem a vantagem de que pertence ao graphics pacote, e, portanto, faz parte da instalação R padrão.

Smiley as a regular or smoothed scatter plot

Em relação a Sparkline e outra idéia tufte, a YALETOOLKIT pacote ligado Cran fornece funções sparkline e sparklines.

Outro pacote útil para conjuntos de dados maiores é hexbina Como os dados de 'caixotes' de 'caixas' em baldes para lidar com conjuntos de dados que podem ser muito grandes para gráficos de dispersão ingênuos.

Parcelas de violino (que combinam gráficos de caixa com densidade do kernel) são relativamente exóticos e bem legais. o VIOLOT O pacote em R permite que você os faça com facilidade.

Aqui está um exemplo (o link da Wikipedia também mostra um exemplo):

enter image description here

Outra boa visualização da série temporal que eu estava apenas revisando é o "gráfico de bump" (como apresentado em Este post no blog "Learning R"). Isso é muito útil para visualizar mudanças na posição ao longo do tempo.

Você pode ler sobre como criá -lo http://learnr.wordpress.com/, mas é assim que está parecendo:

alt text

Eu também gosto de modificações de gráficos de caixa da Tufte, que permitem fazer pequenos múltiplos comparação com muito mais facilidade porque são muito "finos" horizontalmente e não bagunçam o enredo com tinta redundante. No entanto, funciona melhor com um número bastante grande de categorias; Se você só tem alguns em um enredo, os gráficos regulares (Tukey) parecem melhores, pois eles têm um pouco mais de peso.

library(lattice)
library(taRifx)
compareplot(~weight | Diet * Time * Chick, 
  data.frame=cw , 
  main = "Chick Weights",
  box.show.mean=FALSE,
  box.show.whiskers=FALSE,
  box.show.box=FALSE
  )

compareplot

Outras maneiras de fazer isso (incluindo o outro tipo de boxplot de tufte) são discutido nesta questão.

Gráficos de horizonte (PDF), para visualizar muitas séries temporais de uma só vez.

Coordenadas paralelas parcelas (PDF), para análise multivariada.

Associação e mosaico parcelas, para visualizar tabelas de contingência (veja o vcd pacote)

Não devemos esquecer o enredo fofo e (historicamente) importante e a folha (que Tufte também ama!). Você obtém uma visão geral diretamente numérica da densidade e forma de dados (é claro que se o seu conjunto de dados não for maior, então cerca de 200 pontos). Em r, a função stem Produz o seu deslay de caule e folha (no espaço de trabalho). Eu prefiro usar gstem função do pacote fmsb Para desenhá -lo diretamente em um dispositivo gráfico. Abaixo está uma variação da temperatura corporal do castor (os dados devem estar no seu conjunto de dados padrão) em uma tela de tronco por folha:

  require(fmsb)
  gstem(beaver1$temp)

enter image description here

Além do excelente trabalho da Tufte, recomendo os livros de William S. Cleveland: Visualizando dados e a Elementos de dados gráficos. Eles não são apenas excelentes, mas todos foram feitos em R, e acredito que o código está disponível ao público.

Boxplots! Exemplo da ajuda R:

boxplot(count ~ spray, data = InsectSprays, col = "lightgray")

Na minha opinião, é a maneira mais útil de dar uma rápida olhada nos dados ou comparar distribuições. Para distribuições mais complexas, há uma extensão chamada vioplot.

Parece -me que as parcelas de mosaico atendem a todos os quatro critérios mencionados. Existem exemplos em r, em MosaicPlot.

Confira o trabalho de Edward Tufte e especialmente este livro

Você também pode tentar pegar sua apresentação viajante. É muito bom e inclui um pacote de quatro de seus livros. (Eu juro que não possuo o estoque de sua editora!)

A propósito, eu gosto da técnica de visualização de dados Sparkline. Surpresa! O Google já escreveu e apagou Código do Google

Plotas de resumo? Como mencionado nesta página:

Visualizando estatísticas resumidas e incerteza

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top