\[ \cdot \]
\(\qquad\) O pacote RMarkdown oferece uma funcionalidade para criar documentos HTML a partir de um arquivo R Markdown. Essa ferramenta possibilita a conversão do código R em saídas HTML, como tabelas, gráficos e visualizações interativas, que são incorporadas ao documento final. A opção de saída em HTML é uma das alternativas para gerar relatórios interativos que permitem a exploração dos gráficos de forma interativa.
\(\qquad\) Com a saída em HTML, é possível incluir gráficos interativos criados com o pacote Plotly diretamente em um documento HTML. Essa funcionalidade permite que os usuários interajam com os gráficos, ajustando eixos, visualizando informações adicionais ao passar o mouse sobre o gráfico, entre outras possibilidades. A interatividade é uma característica fundamental para a exploração de dados, já que permite que os usuários analisem visualmente as informações em diferentes perspectivas. A seguir, apresentaremos quatro exemplos.
# pacotes necessarios
base::library(tidyverse)
base::library(plotly)
base::library(treemap)
base::library(reshape2)
\[ \cdots \]
\(\qquad\) É um gráfico que mostra a intensidade de uma determinada variável por meio de cores em uma matriz. Ele é usado para visualizar relações entre duas variáveis contínuas em uma grande quantidade de dados. As cores podem ser usadas para representar diferentes níveis de intensidade, o que permite a fácil identificação de padrões. No nosso caso iremos usar o conjunto de dados Motor Trend Car Road Tests, mtcars. Esse conjunto de dados é bastante utilizado para estudo e já está disponível nos pacotes nativos do R. Vamos verificar o heatmap das correlações de Pearson das variáveis quantitativas contínuas.
mydata <- mtcars[, c(1,3,4,5,6,7)]
cormat <- round(cor(mydata), 2)
# melted_cormat <- reshape2::melt(cormat)
# Get lower triangle of the correlation matrix
get_lower_tri <- function(cormat){
cormat[upper.tri(cormat)] <- NA
return(cormat)
}
# Get upper triangle of the correlation matrix
get_upper_tri <- function(cormat){
cormat[lower.tri(cormat)] <- NA
return(cormat)
}
# upper_tri <- get_upper_tri(cormat)
#
# melted_cormat <- reshape2::melt(upper_tri, na.rm = TRUE)
reorder_cormat <- function(cormat){
# Use correlation between variables as distance
dd <- as.dist((1-cormat)/2)
hc <- hclust(dd)
cormat <-cormat[hc$order, hc$order]
}
# Reorder the correlation matrix
cormat <- reorder_cormat(cormat)
upper_tri <- get_upper_tri(cormat)
# Melt the correlation matrix
melted_cormat <- reshape2::melt(upper_tri, na.rm = TRUE)
# Create a ggheatmap
ggheatmap <- ggplot2::ggplot(melted_cormat, ggplot2::aes(Var2, Var1, fill = value)) +
ggplot2::geom_tile(color = "white")+
ggplot2::scale_fill_gradient2(low = "blue", high = "red", mid = "white",
midpoint = 0, limit = c(-1,1), space = "Lab",
name="Pearson\nCorrelation") +
ggplot2::theme_minimal()+ # minimal theme
ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 45, vjust = 1,
size = 12, hjust = 1))+
ggplot2::coord_fixed()
## Warning in register(): Can't find generic `scale_type` in package ggplot2 to
## register S3 method.
ggheatmap +
ggplot2::geom_text(ggplot2::aes(Var2, Var1, label = value), color = "black", size = 4) +
ggplot2::theme(
axis.title.x = ggplot2::element_blank(),
axis.title.y = ggplot2::element_blank(),
panel.grid.major = ggplot2::element_blank(),
panel.border = ggplot2::element_blank(),
panel.background = ggplot2::element_blank(),
axis.ticks = ggplot2::element_blank(),
legend.justification = c(1, 0),
legend.position = c(0.6, 0.7),
legend.direction = "horizontal")+
ggplot2::guides(fill = ggplot2::guide_colorbar(barwidth = 7, barheight = 1,
title.position = "top", title.hjust = 0.5))
\[ \cdots \]
\(\qquad\) É um gráfico que mostra a relação entre três variáveis contínuas em um espaço tridimensional. Ele é útil para visualizar relações complexas entre variáveis, especialmente quando os dados não podem ser facilmente representados em um gráfico bidimensional. Por exemplo, pode-se usar um 3D Scatter Plot para analisar a relação entre a altura, o peso e a idade de um grupo de pessoas. No nosso caso iremos analisar os conjuntos de dados mtcars e iris. O conjunto de dados Iris também é bastante utilizado e já está instalado nos pacotes nativos do R.
# Carregar o conjunto de dados iris
utils::data(iris)
# Criar o gráfico 3D scatterplot
plotly::plot_ly(iris, x = ~Sepal.Length,
y = ~Sepal.Width,
z = ~Petal.Length,
color = ~Species, colors = c("#F8766D",
"#00BA38",
"#619CFF"),
marker = list(size = 3)) |>
plotly::add_markers()
utils::data(mtcars)
mtcars$am[which(mtcars$am == 0)] <- 'Automatic'
mtcars$am[which(mtcars$am == 1)] <- 'Manual'
mtcars$am <- as.factor(mtcars$am)
fig <- plotly::plot_ly(mtcars,
x = ~wt,
y = ~hp,
z = ~qsec,
color = ~am, colors = c('#BF382A',
'#0C4B8E'))
fig <- fig |> plotly::add_markers()
fig <- fig |> plotly::layout(scene = list(xaxis = list(title = 'Weight'),
yaxis = list(title = 'Gross horsepower'),
zaxis = list(title = '1/4 mile time')))
fig
fig <- plotly::plot_ly(mtcars,
x = ~wt,
y = ~hp,
z = ~qsec,
marker = list(color = ~mpg,
colorscale = c('#FFE1A1',
'#683531'),
showscale = TRUE))
fig <- fig |> plotly::add_markers()
fig <- fig |> plotly::layout(scene = list(xaxis = list(title = 'Weight'),
yaxis = list(title = 'Gross horsepower'),
zaxis = list(title = '1/4 mile time')),
annotations = list(
x = 1.13,
y = 1.05,
text = 'Miles/(US) gallon',
xref = 'paper',
yref = 'paper',
showarrow = FALSE
))
fig
\[ \cdots \]
\(\qquad\) É semelhante ao 3D Scatter Plot, mas usa bolhas em vez de pontos para representar os dados. O tamanho da bolha é proporcional a uma quarta variável. Este gráfico é útil para visualizar grandes quantidades de dados, pois as bolhas podem sobrepor-se sem afetar a legibilidade. Por exemplo, pode-se usar um 3D Bubbleplot para analisar a relação entre o preço de uma ação, seu volume de negociação, sua capitalização de mercado e o retorno sobre o patrimônio líquido. No nosso caso iremos utilizar um conjunto de dados econômicos.
file <- "https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv"
data <- utils::read.csv(file)
data_2007 <- data[which(data$year == 2007),]
data_2007 <- data_2007[order(data_2007$continent, data_2007$country),]
data_2007$size <- data_2007$pop
colors <- c('#4AC6B7',
'#1972A4',
'#965F8A',
'#FF7070',
'#C61951')
fig <- plotly::plot_ly(data_2007,
x = ~gdpPercap,
y = ~lifeExp,
z = ~pop,
color = ~continent,
size = ~size,
colors = colors,
marker = list(symbol = 'circle', sizemode = 'diameter'),
sizes = c(5, 150),
text = ~paste('Country:', country,
'<br>Life Expectancy:', lifeExp,
'<br>GDP:', gdpPercap,
'<br>Pop.:', pop))
fig <- fig |>
plotly::layout(title = 'Life Expectancy v. Per Capita GDP, 2007',
scene = list(xaxis = list(title = 'GDP per capita (2000 dollars)',
gridcolor = 'rgb(255, 255, 255)',
range = c(2.003297660701705, 5.191505530708712),
type = 'log',
zerolinewidth = 1,
ticklen = 5,
gridwidth = 2),
yaxis = list(title = 'Life Expectancy (years)',
gridcolor = 'rgb(255, 255, 255)',
range = c(36.12621671352166, 91.72921793264332),
zerolinewidth = 1,
ticklen = 5,
gridwith = 2),
zaxis = list(title = 'Population',
gridcolor = 'rgb(255, 255, 255)',
type = 'log',
zerolinewidth = 1,
ticklen = 5,
gridwith = 2)),
paper_bgcolor = 'rgb(243, 243, 243)',
plot_bgcolor = 'rgb(243, 243, 243)')
fig
## No trace type specified:
## Based on info supplied, a 'scatter3d' trace seems appropriate.
## Read more about this trace type -> https://plotly.com/r/reference/#scatter3d
## No scatter3d mode specifed:
## Setting the mode to markers
## Read more about this attribute -> https://plotly.com/r/reference/#scatter-mode
\[ \cdots \]
\(\qquad\) É um gráfico hierárquico que usa retângulos para representar hierarquias aninhadas de dados. Cada retângulo é dividido em sub-retângulos, representando as sub-hierarquias. O tamanho do retângulo é proporcional a uma determinada medida, enquanto a cor pode ser usada para representar outra medida. Este gráfico é útil para analisar grandes quantidades de dados hierárquicos. No nosso caso iremos gerar um conjunto de dados para facilitar o entendimento. Esses dados serão um exemplo de vendas por departamentos de uma determinada empresa de varejo.
# conjunto de dados fictício com 10 categorias e vendas simuladas
dados <- base::data.frame(
Categoria = c("Eletrônicos", "Moda Feminina",
"Moda Masculina", "Livros",
"Alimentos", "Bebidas", "Artigos de Esporte",
"Jogos de Tabuleiro", "Produtos de Beleza", "Brinquedos"),
Vendas = c(8500, 7100, 6400, 5600, 4800, 4200, 3500, 2800, 2100, 1400)
)
# treemap que mostre a distribuição de vendas por categoria
treemap::treemap(
dados,
index = "Categoria",
vSize = "Vendas",
type = "index",
fontsize.labels = 12,
fontsize.title = 16
)
\[ \cdot \]