A construção de gráficos no R foi revolucionada com a criação do pacote ggplot2, fruto da tese de doutorado de Hadley Wickham. Essa revolução teve base na filosofia adotada por Hadley ao definir o que deveria ser um gráfico estatístico.
Em 2005, Leland publicou o livro The Grammar of graphics, uma fonte de princípios fundamentais para a construção de gráficos estatísticos. No livro, ele defende que um gráfico é o mapeamento dos dados a partir de atributos estéticos (posição, cor, forma, tamanho) de objetos geométricos (pontos, linhas, barras, caixas).
Livro “The Grammar of graphics”
No R há vários dispositivos para fazer gráficos, porém o ggplot2 é um dos mais elegantes e versáteis. Este implementa a gramática, um sistema coerente para descrever e construir gráficos.
Livro “ggplot2”
O ggplot2 traz outras vantagens em relação aos gráficos do R base:
No ggplot2, os gráficos são construídos camada por camada (ou, layers, em inglês), sendo a primeira delas dada pela função ggplot() . Essa função recebe um data frame e cria a camada base do gráfico. Se rodarmos apenas a função ggplot(), obteremos um painel em branco.
library(ggplot2)
head(mtcars)
ggplot(data = mtcars)
ggplot(data = mtcars) +
geom_point(mapping = aes(x = disp, y = mpg))
Perceba que a segunda camada é dada pela função geom_point(), especificando a forma geométrica utilizada no mapeamento das observações;
As camadas são somadas com um +;
O mapeamento na função geom_point() recebe a função aes(), responsável por descrever como as variáveis serão mapeadas nos aspectos visuais da forma geométrica escolhida, no caso, pontos.
ggplot(data = mtcars) +
geom_point(mapping = aes(x = disp, y = mpg)) +
labs(x = "Cilindradas", y = "Milhas/galão")
am1<-factor(mtcars$am,labels = c("automatic","manual"))
ggplot(data = mtcars) +
geom_point(mapping = aes(x = disp, y = mpg, color = am1))
####
ggplot(mtcars, aes(disp,mpg)) + geom_point(aes(colour = "red"))
ggplot(mtcars, aes(disp,mpg)) + geom_point(colour = "blue")
ggplot(mtcars) +
geom_point(mapping = aes(x = disp, y = mpg, colour = carb))
ggplot(mtcars) +
geom_point(mapping = aes(x = disp, y = mpg, colour = carb,size = wt))
ggplot(mtcars) +
geom_point(mapping = aes(x = disp, y = mpg, colour = carb,size = wt),alpha = 1,shape = 6)
ggplot(mtcars, aes(disp, mpg)) +
geom_point(size = 4,color = "lightblue") +
geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
ggplot(mtcars, aes(disp, mpg)) +
geom_point(size = 4,color = "lightblue") +
geom_smooth(method = "lm")
Os geoms definem qual forma geométrica será utilizada para a visualização das observações. Por exemplo, a função geom_point() gera gráficos de dispersão transformando pares (x,y) em pontos. Veja a seguir outros geoms bastante utilizados:
ggplot(mtcars, aes(x=as.factor(am),y = mpg)) +
geom_boxplot()
ggplot(mtcars) +
geom_histogram(aes(x = mpg))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
ggplot(mtcars, aes(carb)) +
geom_bar()
### outros tipos
ggplot(mtcars, aes(x=as.factor(am),y = mpg)) +
geom_violin()
# O gráfico de violino é a combinação do boxplot e a linha de densidade no mesmo diagrama, permitindo visualizar detalhes que as duas técnicas sozinhas não seriam capaz de detectar [Hintze and Nelson 1998].
ggplot(mtcars) +
geom_freqpoly(aes(x = mpg))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
O facet permite a visualização de diferentes subconjuntos de dados em gráficos separados, permitindo a mostrar comportamentos diferentes entre os grupos analisados.
ggplot(mtcars, aes(y = mpg, x = disp)) +
geom_point() +
geom_smooth(method = "lm") +
facet_grid(~am)
‘O maior valor de uma imagem é quando ela nos força a notar o que nunca esperávamos ver - John Tukey’
head(PlantGrowth)
bp <- ggplot(data = PlantGrowth, aes(x = group, y = weight)) + geom_boxplot()
bp
bp1 <- ggplot(data = PlantGrowth, aes(x = group, y = weight, fill=group)) + geom_boxplot()
bp1
# retirando a legenda
bp2 <- ggplot(data = PlantGrowth, aes(x = group, y = weight, fill=group)) + geom_boxplot()
bp2 + guides(fill = FALSE)
# ou da forma bp2 + theme(legend.position="none")
bp3 <- ggplot(data = PlantGrowth, aes(x = group, y = weight, fill=group)) + geom_boxplot()
bp3 + theme(legend.position="none")
# removendo o nome da legenda
bp4 <- ggplot(data = PlantGrowth, aes(x = group, y = weight, fill=group)) + geom_boxplot()
bp4 + guides(fill=guide_legend(title=NULL))
# Remove o título de todas as legendas "+ theme(legend.title = element_blank())"
bp5 <- ggplot(data = PlantGrowth, aes(x = group, y = weight, fill=group)) + geom_boxplot()
bp5 + scale_fill_discrete(name = "Tratamentos",
breaks = c("ctrl", "trt1", "trt2"),
labels = c("Controle", "Tratamento 1", "Tratamento 2"))
Uma das formas de encontrar uma paleta de cores no R e fazer de forma automática é via o pacote RColorBrewer. Ao executar a função display.brewer.all() você irá observar diferentes paletas de cores que você pode utilizar. Outra opção, é utilizar o site deles colorbrewer2(http://colorbrewer2.org/#type=diverging&scheme=RdYlGn&n=11).
library(RColorBrewer)
bp5 + scale_fill_discrete(name = "Tratamentos",
breaks = c("ctrl", "trt1", "trt2"),
labels = c("Controle", "Tratamento 1", "Tratamento 2"))
# mudando as cores
bp5 + scale_fill_brewer(palette = "RdYlGn", direction = 1)
# ou da forma
bp5 + scale_fill_manual(values=c("#b83535", "#4c618a", "#512a6e"),
name="Tratamentos",
breaks=c("ctrl", "trt1", "trt2"),
labels=c("Controle", "Tratamento 1", "Tratamento 2"))
Existem inúmeras modificações que podem ser realizadas na aparência da legenda. Todas elas estão relacionadas à modificação do element_text().
bp5 + scale_fill_manual(values=c("#b83535", "#4c618a", "#512a6e"),
name="Tratamentos",breaks=c("ctrl", "trt1", "trt2"),
labels=c("Controle", "Tratamento 1", "Tratamento 2")) +
theme(legend.title = element_text(color = "blue", size = 16, face = "bold"))
###
bp5 + scale_fill_manual(values=c("#b83535", "#4c618a", "#512a6e"),
name="Tratamentos",breaks=c("ctrl", "trt1", "trt2"),
labels=c("Controle", "Tratamento 1", "Tratamento 2")) +
theme(legend.title = element_text(color = "blue", size = 16, face = "bold"),legend.position="top")
bp5 + labs(x="Tratamentos",y="Peso") + labs(title="Crescimento do cultivar")
g<-bp5 + labs(x="Tratamentos",y="Peso") + labs(title="Crescimento do cultivar")
ggsave(filename = "meugrafico.png", plot = g)
## Saving 7 x 5 in image
library(devtools)
## Loading required package: usethis
install_github("thomasp85/patchwork")
## Skipping install of 'patchwork' from a github remote, the SHA1 (36b49187) has not changed since last install.
## Use `force = TRUE` to force installation
library(patchwork)
p<-ggplot(PlantGrowth, aes(weight,fill=group)) + geom_histogram()
s<-ggplot(PlantGrowth, aes(weight, colour = group)) + geom_freqpoly()
(g | p) / s
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Mais informações em : https://gotellilab.github.io/GotelliLabMeetingHacks/NickGotelli/ggplotPatchwork.html.
Uma forma de incrementar um boxplot é plotar também todos os pontos, e não apenas os cinco que o boxplot representa. Isso pode ser feito com a função geom_jitter().
g + geom_jitter(color = "red")
Um característica do ggplot2 é o seu conjunto de temas pré-definidos.
g + theme_dark()
g + theme_replace()
library(cowplot)
##
## ********************************************************
## Note: As of version 1.0.0, cowplot does not change the
## default ggplot2 theme anymore. To recover the previous
## behavior, execute:
## theme_set(theme_cowplot())
## ********************************************************
g + theme_set(theme_cowplot(12))
g + theme_nothing()
library(MASS)
head(Cars93)
ggplot(Cars93,aes(x=Type)) +
geom_bar() +
labs(y="Frequência", title = "Tipo do carro")
## gráfico de barras agrupadas
type1<-subset(Cars93,select=c("Type","Origin"))
head(type1)
ggplot(type1,aes(x=Type,fill = Origin)) +
geom_bar(position = "dodge",color = "lightblue")
Vamos utilizar o dataset “airquality” para construirmos um gráfico com uma condição. Por exemplo, se um nível de ozônio para um dia específico for menor ou igual ao nível médio, consideraremos “Baixo”, do contrário “Alto”.
library(tidyr)
aq.no.NA<-drop_na(airquality)
med<-mean(aq.no.NA$Ozone)
ozone_level<-NULL
for (i in 1:nrow(aq.no.NA)){
if (aq.no.NA$Ozone[i]<=med){
ozone_level[i]<-'Baixo'}
else {ozone_level[i]<-'Alto'}
}
aq.ozone_level<-cbind(aq.no.NA,ozone_level)
head(aq.ozone_level)
ggplot(aq.ozone_level,aes(x=Wind,y=Temp,color = ozone_level)) + geom_point(size = 4) + theme_bw()
library(car)
## Loading required package: carData
library(Rmisc)
## Loading required package: lattice
## Loading required package: plyr
head(Salaries)
df<-summarySE(Salaries,measurevar=c('salary'),groupvars=c('rank','sex')) # que outra maneira poderíamos fazer isso?
head(df)
# Gráfico
ep<-ggplot(df,aes(x=rank,y=salary,fill=sex))
ep1<-ep + geom_bar(stat="identity",position ="dodge") + geom_errorbar(aes(ymin = salary-se, ymax = salary + se), position = "dodge", width = 0.3)
ep1
library(scatterplot3d)
with(aq.ozone_level,scatterplot3d(Wind ~Temp + Ozone, pch = 18))
library(plotly)
##
## Attaching package: 'plotly'
## The following objects are masked from 'package:plyr':
##
## arrange, mutate, rename, summarise
## The following object is masked from 'package:MASS':
##
## select
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
plot_ly(aq.ozone_level, x = ~Temp, y = ~Ozone, z = ~Wind) %>%
add_markers(color = ~Temp)
Uma matriz de gráficos de dispersão mostra as relações de pares entre mais de duas variáveis.
library(GGally)
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
aq_subset<-subset(aq.no.NA, select = c(Ozone, Wind, Temp, Solar.R))
ggpairs(aq_subset)
É muito comum que tenhamos um conjunto de dados com muitas variáveis e queiramos saber a relação entres estas variáveis, por exemplo, quais são mais ou menos correlacionadas entre si (positiva ou negativamente) ou se as correlações são parecidas entre si (matriz de correlação estruturada) ou todas bem diferentes (matriz não estruturada).
library(GGally)
ggpairs(iris, lower = list(continuous = "smooth"))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
# ou da forma:
ggpairs(iris, columns = 1:4, ggplot2::aes(colour=Species))
p <- ggpairs(iris, aes(color = Species))+ theme_bw()
for(i in 1:p$nrow) {
for(j in 1:p$ncol){
p[i,j] <- p[i,j] +
scale_fill_manual(values=c("#00AFBB", "#E7B800", "#FC4E07")) +
scale_color_manual(values=c("#00AFBB", "#E7B800", "#FC4E07"))
}
}
p
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Outra maneira de apresentar as relações (nesse caso, as correlações) entre as variáveis quantitativas é usando gráficos que se assemelham aos gráficos de “calor” (heatmaps), no qual as cores de cada correlação vão indicar a força e o sinal da correlação.
head(swiss)
ggcorr(swiss, label=T)
knitr::kable(cor(swiss))
Fertility | Agriculture | Examination | Education | Catholic | Infant.Mortality | |
---|---|---|---|---|---|---|
Fertility | 1.0000000 | 0.3530792 | -0.6458827 | -0.6637889 | 0.4636847 | 0.4165560 |
Agriculture | 0.3530792 | 1.0000000 | -0.6865422 | -0.6395225 | 0.4010951 | -0.0608586 |
Examination | -0.6458827 | -0.6865422 | 1.0000000 | 0.6984153 | -0.5727418 | -0.1140216 |
Education | -0.6637889 | -0.6395225 | 0.6984153 | 1.0000000 | -0.1538589 | -0.0993218 |
Catholic | 0.4636847 | 0.4010951 | -0.5727418 | -0.1538589 | 1.0000000 | 0.1754959 |
Infant.Mortality | 0.4165560 | -0.0608586 | -0.1140216 | -0.0993218 | 0.1754959 | 1.0000000 |
# outra forma
library(corrplot)
## corrplot 0.84 loaded
M <- cor(swiss)
corrplot(M)
# Podemos utilizar o método de agrupamento hierárquico por meio da função 'hclust'
corrplot(M, order = "hclust", addrect = 3, tl.pos="d")
# por último
library(corrgram)
## Registered S3 method overwritten by 'seriation':
## method from
## reorder.hclust gclus
##
## Attaching package: 'corrgram'
## The following object is masked from 'package:plyr':
##
## baseball
## The following object is masked from 'package:lattice':
##
## panel.fill
corrgram(swiss, lower.panel = panel.pts, upper.panel= panel.conf, diag.panel = panel.density)
Ao trabalhar com uma variável contínua pedemos dividir os dados em intervalos e fazer um histograma e calcular a densidade de kernel estimada para a distribuição da variável.
ggplot(aq.no.NA,aes(x = Wind)) +
geom_density()
ggplot(aq.no.NA,aes(x = Temp)) +
geom_density(color = "lightblue")
dados <- ts(matrix(rnorm(300), 100, 3), start=c(1961, 1),
frequency=12)
dados[1:4,]
## Series 1 Series 2 Series 3
## [1,] -1.5228361 0.4991462 0.07349756
## [2,] -0.3458876 -1.0889726 -0.97966218
## [3,] 0.2574385 0.9616205 0.18518546
## [4,] 0.8776312 -1.2920549 0.01267323
plot(ts(dados))
# no pacote lattice
library(lattice)
xyplot(dados)
xyplot(dados, superpose = TRUE)
# ggplot2
datas <- seq(as.Date(paste(c(start(dados),1), collapse="/")),
by = "month", length.out = length(dados))
dados.df <- data.frame(date = datas, value = dados)
ggplot(data=dados.df) + geom_line(aes(date, value.Series.1))
## colocar as séries em um único gráfico
tmp <- stack(dados.df, select = -1)
tmp$date <- dados.df[,1]
ggplot(data=dados.df) + geom_line(aes(date, value.Series.1))
library(fpp)
## Loading required package: forecast
## Registered S3 method overwritten by 'xts':
## method from
## as.zoo.xts zoo
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
## Registered S3 methods overwritten by 'forecast':
## method from
## fitted.fracdiff fracdiff
## residuals.fracdiff fracdiff
## Loading required package: fma
##
## Attaching package: 'fma'
## The following object is masked from 'package:corrgram':
##
## auto
## The following object is masked from 'package:GGally':
##
## pigs
## The following object is masked from 'package:plyr':
##
## ozone
## The following objects are masked from 'package:MASS':
##
## cement, housing, petrol
## Loading required package: expsmooth
## Loading required package: lmtest
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Loading required package: tseries
autoplot(a10) +
ggtitle("Gráfico para Vendas de antibióticos na Austrália") +
ylab("$ milhões") + xlab("Ano")
# gráfico de sazonalidade
ggseasonplot(a10, year.labels=TRUE, year.labels.left=TRUE) +
ylab("$ milhões") + xlab("Mês")+ ggtitle("Gráfico GGSeasonplot para Vendas de antibióticos na Austrália")
Um gráfico polar exibe uma série como um conjunto de pontos agrupados por categoria em um círculo de 360 graus. Os valores são representados pelo comprimento do ponto, conforme medido do centro do círculo. Quanto mais distante o ponto está do centro, maior é o seu valor.
Um gráfico de radar exibe uma série como uma linha ou área circular. Ao contrário do gráfico polar, o gráfico de radar não exibe dados em termos de coordenadas polares.
O gráfico de radar é útil para comparações entre várias séries de dados de categoria.
Os gráficos polares são usados com mais freqüência para fazer gráficos de dados polares, nos quais cada ponto de dados é determinado por um ângulo ou uma distância.
Os gráficos polares não podem ser combinados com qualquer outro tipo de gráfico na mesma área de gráfico.
ggseasonplot(a10, polar=TRUE) +
ylab("$ milhoes") + xlab("Mes") + ggtitle("Graf. Polar")
Por fim, podemos comparar as diferentes estações por mês. No gráfico abaixo, temos as séries divididas pelos meses com o traço azul indicando a média de cada um.
ggsubseriesplot(a10) + ylab("$ milhões") + xlab("Mês")+
ggtitle("Graf. GGSubseriesplot")
library(tidyverse)
## -- Attaching packages ------------------------------------------- tidyverse 1.2.1 --
## v tibble 2.1.3 v dplyr 0.8.3
## v readr 1.3.1 v stringr 1.4.0
## v purrr 0.3.2 v forcats 0.4.0
## -- Conflicts ---------------------------------------------- tidyverse_conflicts() --
## x dplyr::arrange() masks plotly::arrange(), plyr::arrange()
## x purrr::compact() masks plyr::compact()
## x dplyr::count() masks plyr::count()
## x dplyr::failwith() masks plyr::failwith()
## x dplyr::filter() masks plotly::filter(), stats::filter()
## x dplyr::id() masks plyr::id()
## x dplyr::lag() masks stats::lag()
## x dplyr::mutate() masks plotly::mutate(), plyr::mutate()
## x dplyr::recode() masks car::recode()
## x dplyr::rename() masks plotly::rename(), plyr::rename()
## x dplyr::select() masks plotly::select(), MASS::select()
## x purrr::some() masks car::some()
## x dplyr::summarise() masks plotly::summarise(), plyr::summarise()
## x dplyr::summarize() masks plyr::summarize()
url <- "http://www.leg.ufpr.br/~walmes/data/duster_venda_260314.txt"
dus <- read.table(file = url,
header = TRUE,sep = "\t",
encoding = "utf-8")
glimpse(dus)
## Observations: 699
## Variables: 10
## $ modelo <fct> RENAULT DUSTER 1.6 EXPRESSION 4X2 16V FLEX 4P MANUAL, R...
## $ cor <fct> Prata, Azul, Prata, Prata, Prata, Vermelho, Preto, Pret...
## $ km <int> 31442, 40800, 56000, NA, 45000, 50000, 44000, 30000, 41...
## $ ano <fct> 2011/2012, 2011/2012, 2011/2012, 2011/2012, 2011/2012, ...
## $ valor <dbl> 41990, 42500, 42900, 42990, 43800, 43999, 44900, 45000,...
## $ cambio <fct> MANUAL, MANUAL, MANUAL, MANUAL, MANUAL, MANUAL, MANUAL,...
## $ poten <dbl> 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 2.0, 1.6, 1.6, ...
## $ trac <fct> 4X2, 4X2, 4X2, 4X2, 4X2, 4X2, 4X2, 4X2, 4X2, 4X2, 4X2, ...
## $ cat <fct> EXPRESSION , , DYNAMIQUE , DYNAMIQUE , , , DYNAM...
## $ novo <fct> usado, usado, usado, usado, usado, usado, usado, usado,...
x <- table(dus$cambio)
class(x)
## [1] "table"
x <- xtabs(~cambio, data = dus)
class(x)
## [1] "xtabs" "table"
barplot(x,xlab = "Tipo de câmbio",
ylab = "Frequência absoluta",
col = c("seagreen", "yellow"))
pie(x,col = c("#5398ed",rgb(12, 58, 114, max = 255)),
main = "Tipo de câmbio")
##
df <- data.frame(group = c("M", "F", "C"),
value = c(2, 3, 5))
head(df)
bp<- ggplot(df, aes(x="", y=value, fill=group))+
geom_bar(width = 1, stat = "identity")
bp
pie <- bp + coord_polar("y")
pie
pie + scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9"))
##
library(scales)
##
## Attaching package: 'scales'
## The following object is masked from 'package:purrr':
##
## discard
## The following object is masked from 'package:readr':
##
## col_factor
pie + scale_fill_brewer("Blues") +
theme(axis.text.x=element_blank()) +
geom_text(aes(y = value/3 + c(0, cumsum(value)[-length(value)]),
label = percent(value/100)), size=5)
# como fazer um pie para o exemplo anterior?
head(HairEyeColor)
## [1] 32 53 10 3 11 50
mosaicplot(HairEyeColor,
off = 2,
col = c("blue", "yellowgreen"))
###
dimnames(HairEyeColor)
## $Hair
## [1] "Black" "Brown" "Red" "Blond"
##
## $Eye
## [1] "Brown" "Blue" "Hazel" "Green"
##
## $Sex
## [1] "Male" "Female"
Tabela <- apply(HairEyeColor,
MARGIN = c(1, 2),
FUN = sum)
print(Tabela)
## Eye
## Hair Brown Blue Hazel Green
## Black 68 20 15 5
## Brown 119 84 54 29
## Red 26 17 14 14
## Blond 7 94 10 16
# Vetor que associa cores conforme os níveis dos fatores às cores usadas para preenchimento
cols <- c(Brown = "#6b2205",
Blue = "#4fb2ff",
Green = "#1a9b1e",
Blond = "#d8d652",
Red = "#bc1405",
Black = "#210a08",
Hazel = "#a86526")
mosaicplot(Tabela, col = cols[colnames(Tabela)])
O pacote plotly é uma ferramenta fornecida por uma empresa de mesmo nome que tem o objetivo de unificar a visualização de dados de várias linguagens de programação.
A biblioteca plotly possibilita a produção de gráficos na web. Sua função principal são os gráficos do tipo ggplotly que são gráficos baseados no ggplot2, mas com possibilidade de renderização em HTML.
library(plotly)
library(ggplot2)
p <- mtcars %>%
ggplot(aes(x = disp, y = mpg, colour = as.factor(am))) +
geom_point()
ggplotly(p)
library(dplyr)
library(tidyverse)
library(plotly)
head(ToothGrowth)
### Gráfico de barras erro (pode ser erro padrão da média também)
med<-ToothGrowth %>% group_by(supp,dose) %>% summarize(med=mean(len))
desvio<-ToothGrowth %>% group_by(supp,dose) %>% summarize(desvio=sd(len))
data<-data.frame(med,desvio$desvio)
data<-as_tibble(data)
data1 <- data %>% rename(desvio = desvio.desvio)
data1$dose <- as.factor(data1$dose)
p0 <- plot_ly(data = data1[which(data1$supp == 'OJ'),], x = ~ dose, y = ~ med, type = 'bar', name = 'OJ',
error_y = ~list(array = desvio,color = '#000000')) %>%
add_trace(data = data1[which(data1$supp == 'VC'),], name = 'VC')
p0
### Scatterplot
p1 <- plot_ly(data = data1[which(data1$supp == 'OJ'),], x = ~ dose, y = ~ med, type = 'scatter', name = 'OJ', error_y = ~list(array = desvio,color = '#000000')) %>% add_trace(data = data1[which(data1$supp == 'VC'),], name = 'VC')
p1
## No scatter mode specifed:
## Setting the mode to markers
## Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode
## No scatter mode specifed:
## Setting the mode to markers
## Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode
### Scatterplot com linha
p2 <- plot_ly(data = data1[which(data1$supp == 'OJ'),], x = ~ dose, y = ~ med, type = 'scatter', name = 'OJ',
mode = 'lines+markers',error_y = ~list(array = desvio,color = '#000000')) %>%
add_trace(data = data1[which(data1$supp == 'VC'),], name = 'VC')
p2
## Gráfico de violino
p3 <- ToothGrowth %>%
plot_ly(y = ~len,type = 'violin',box = list(visible = T),
meanline = list(visible = T),x0 = 'Tooth length') %>%
layout(yaxis = list(title = "",zeroline = F))
p3
#######
p4 <- ToothGrowth %>%
plot_ly(x = ~supp,y = ~len,split = ~supp,type = 'violin',
box = list(visible = T),meanline = list(visible = T)) %>%
layout(xaxis = list(title = ""),yaxis = list(title = "",zeroline = F))
p4