Mapa de Calor estruturado e com classes

quinta-feira, 19 de dezembro de 20130 comentários



Hoje apresento-lhes um gráfico muito útil e que tem sido utilizado em larga escala para análises baseadas em correlação, tendo esta como grau de intensidade das cores.

Porém neste exemplo, como pode ser observado na imagem acima, trabalharemos com dados de 50 atletas da NBA, obtidos no http://databasebasketball.com/ e disponibilizados no link que inseri no código.

Primeiramente criaremos um mapa como pode ser observado na imagem abaixo e então separaremos por classes para finalmente unificarmos as classes (vermelha, verde e azul).




Confira o código abaixo e deixe o seu comentário com possíveis usos para esse tipo de visualização!
_______________________________________________________


########################
#Escolhendo o diretório

wd = "C:\\JV\\"
setwd(wd)

#####################
# Importando os dados
nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv")
# Reordenando
nba$Name <- with(nba, reorder(Name, PTS))

#######################
# Instalando os pacotes

#install.packages('ggplot2')
library(ggplot2)
#install.packages("reshape");
library(reshape)
#install.packages("scales");
library(scales)

###########################################
# Transformando os valores em valores 0 a 1
nba.m <- melt(nba)

nba.m <- ddply(nba.m, .(variable), transform, rescale = rescale(value))

# Plotando
(p <- ggplot(nba.m, aes(variable, Name)) + geom_tile(aes(fill = rescale),
             colour = "white") + scale_fill_gradient(low = "white",
             high = "steelblue"))


#########################################
# Reduzindo a escala e plotando novamente

base_size <- 9
p + theme_grey(base_size = base_size) + labs(x = "",
               y = "") + scale_x_discrete(expand = c(0, 0)) +
               scale_y_discrete(expand = c(0, 0)) + theme(legend.position = "none",
               axis.ticks = element_blank(), axis.text.x = element_text(size = base_size *
               0.8, angle = 330, hjust = 0, colour = "grey50"))
                                                                                                               +         0.8, angle = 330, hjust = 0, colour = "grey50"))

##############################
# Corrigindo um erro de escala

nba.s <- ddply(nba.m, .(variable), transform,
               rescale = scale(value))
last_plot() %+% nba.s


#######################
# Colorindo por classes

nba.s$Category <- nba.s$variable
levels(nba.s$Category) <-
  list("Offensive" = c("PTS", "FGM", "FGA", "X3PM", "X3PA", "AST"),
       "Defensive" = c("DRB", "ORB", "STL"),
       "Other" = c("G", "MIN", "FGP", "FTM", "FTA", "FTP", "X3PP",
                   "TRB", "BLK", "TO", "PF"))

nba.s$rescaleoffset <- nba.s$rescale + 100*(as.numeric(nba.s$Category)-1)
scalerange <- range(nba.s$rescale)
gradientends <- scalerange + rep(c(0,100,200), each=2)
colorends <- c("white", "red", "white", "green", "white", "blue")

ggplot(nba.s, aes(variable, Name)) +
  geom_tile(aes(fill = rescaleoffset), colour = "white") +
  scale_fill_gradientn(colours = colorends, values = rescale(gradientends)) +
  scale_x_discrete("", expand = c(0, 0)) +
  scale_y_discrete("", expand = c(0, 0)) +
  theme_grey(base_size = 9) +
  theme(legend.position = "none",
        axis.ticks = element_blank(),
        axis.text.x = element_text(angle = 330, hjust = 0))

###################################
# Reordenando pelas classes (cores)

nba.s$variable2 <- reorder(nba.s$variable, as.numeric(nba.s$Category))

ggplot(nba.s, aes(variable2, Name)) +
  geom_tile(aes(fill = rescaleoffset), colour = "white") +
  scale_fill_gradientn(colours = colorends, values = rescale(gradientends)) +
  scale_x_discrete("", expand = c(0, 0)) +
  scale_y_discrete("", expand = c(0, 0)) +
  theme_grey(base_size = 9) +
  theme(legend.position = "none",
        axis.ticks = element_blank(),
        axis.text.x = element_text(angle = 330, hjust = 0))

# Para maiores informações: http://learnr.wordpress.com/2010/01/26/ggplot2-quick-heatmap-plotting/
Compartilhe :
 
Support : Creating Website | Johny Template | Mas Template
Copyright © 2011. Estatisti.co - All Rights Reserved
Template Created by Creating Website Published by Mas Template
Proudly powered by Blogger