Este es un archivo Notebook de R Markdown, Cando ejecutas el código con Run o Ctrl+Shift+Enter, el resultado aparecerá debajo del código

1. Función qplot()

Comienza instalando el paquete ggplot2 y cargando la librería

# install.packages("ggplot2")
library(ggplot2)

Revisa la ayuda de qplot() en http://ggplot2.tidyverse.org/reference/qplot.html

qplot(x, y = NULL, data, facets = NULL, margins = FALSE, geom = "auto", xlim = c(NA, NA), ylim = c(NA, NA), main = NULL, xlab = , ylab = , stat = NULL)

Luego utilizaremos el conjunto de datos mtcars para realizar diversos gráficos de exploración. Ggplot trabaja sobre data.frames, por ello asegurate que los datos sean data.frames.

data(mtcars)
class(mtcars)
## [1] "data.frame"
head(mtcars)
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

Histogramas

Al incluir una columna de un data.frame, por defecto se dibujará un historgrama

qplot(mpg, data = mtcars)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Incluye el argumento bins para indicar el número de clases del histograma

qplot(mpg, data = mtcars, bins=5)

Aunque está indicado por defecto, puedes igual incluir que el tipo de geometría del gráfico a dibujar sea histograma. El resultado será igual al gráfico anterior.

qplot(mpg, data = mtcars, bins=5, geom = "histogram")

Añade lineas verticales para mostrar la media y la mediana.

 qplot(mpg, data = mtcars, bins=5, geom = "histogram") +
geom_vline(xintercept = mean(mtcars$mpg), color="red")+
geom_vline(xintercept = median(mtcars$mpg), color="blue")

Clasifica el histograma de acuerdo con una segunda variable.

qplot(mpg, data = mtcars, bins=5, geom = "histogram", fill = as.factor(am))

Densidad

Convierte el histrograma en un gráfico de densidad.

qplot(mpg, data = mtcars, bins=5, geom = "density", fill = as.factor(am))
## Warning: Ignoring unknown parameters: bins

Cambia el argumento fill por color para hacer los polígonos vacios.

qplot(mpg, data = mtcars, bins=5, geom = "density", color = as.factor(am))
## Warning: Ignoring unknown parameters: bins

Cambia el tipo de línea de las densidades.

qplot(mpg, data = mtcars, bins=5, geom = "density", color = as.factor(am), linetype= as.factor(am))
## Warning: Ignoring unknown parameters: bins

Personalizar gráficos 1

Separando gráficos

Utiliza el argumento facets para dividir ambos poligonos de densidades en gráficos diferentes. Observa el argumento facets en los dos ejemplos. En el primero se graficarán como columnas y en el segundo como filas

qplot(mpg, data = mtcars, bins=5, geom = "density", color = as.factor(am), facets = .~ am)
## Warning: Ignoring unknown parameters: bins

qplot(mpg, data = mtcars, bins=5, geom = "density", color = as.factor(am), facets =  am ~.)
## Warning: Ignoring unknown parameters: bins

Título y nombres de ejes*

qplot(mpg, data = mtcars, geom = "density",
      xlab = "galones por millas", ylab = "Densidas", 
      main = "Densidad de galones por millas")

* Diagrama de disersión* Añadiendo dos columnas, mpg como eje x y wt como eje y se dibujará un diagrama de dispersión o scatterplot.

qplot(mpg, wt, data=mtcars)

El argumento color diferencia los puntos de acuerdo con una tercer variable.

qplot(mpg, wt, data=mtcars, color=factor(am))

Gráfico de puntos y gráfico de lineas

El valor por defecto del argumento geom es point, sin embargo dicho valor puede ser remplazado por line para graficar lineas.

qplot(mpg, wt, data=mtcars, geom=c("point", "line"))

El valor smooth de geom grafica el ajuste y el error estándar de LOESS (locally weighted scatterplot smoothing)

qplot(mpg, wt, data = mtcars, geom = c("point", "smooth"))# standar error
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

También es posible realizar el ajuste condicionado por una tercer variable…

qplot(mpg, wt, data = mtcars, color = factor(cyl), geom=c("point", "smooth")) # metodo loess
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

…y modificar el método de ajuste para realizar una regresión lineal

qplot(mpg, wt, data = mtcars, color = factor(cyl))+ geom_smooth(method = "lm") # metodo linear modeling, regresion lineal
## `geom_smooth()` using formula 'y ~ x'

qplot(mpg, wt, data = mtcars, facets = .~factor(cyl), color = factor(cyl))+ geom_smooth(method = "lm") # metodo linear modeling, regresion lineal
## `geom_smooth()` using formula 'y ~ x'

Personalizar gráficos 2

Los siguientes ejemplos muestran que la variable cyl es continua por lo que, por defecto, se selecciona una escala de color continua. Si queremos asignar una escala discreta, es necesario transformar cly al tipo de dato factor.

qplot(mpg, wt, data = mtcars, colour = cyl)

qplot(mpg, wt, data = mtcars, colour = factor(cyl))

El tamaño y la forma de puntos puede cambiarse acorde a una variable.

qplot(mpg, wt, data = mtcars, size = mpg)

qplot(mpg, wt, data = mtcars, shape = factor(cyl))

Etiquetas para puntos

qplot(mpg, wt, data = mtcars, label = rownames(mtcars), 
      geom=c("point", "text"),
      hjust=0, vjust=0)

Multiples diagramas de dispersión

qplot(mpg, data = mtcars, facets = ~ am, bins=5)

qplot(mpg, wt, data = mtcars, facets =  ~ am)

qplot(mpg, wt, data = mtcars, facets = gear ~ am)

Otro ejemplo con facets puede observarse a continuación

qplot(hp, mpg, data=mtcars, shape=factor(am), color=factor(am),
   facets=gear~cyl, size=I(3),
   xlab="Horsepower", ylab="Miles per Gallon")

Boxplots o diagramas de cajas y bigotes

qplot(factor(am),mpg , data = mtcars, geom="boxplot")

qplot(factor(am),mpg , data = mtcars, geom=c("boxplot", "jitter"))

qplot(factor(am),mpg , data = mtcars, 
      geom=c("boxplot", "jitter"), fill = factor(am))

qplot(factor(am),mpg , data = mtcars, 
      geom = "dotplot", stackdir = "center", binaxis = "y",
      color = factor(am), fill = factor(am))
## `stat_bindot()` using `bins = 30`. Pick better value with `binwidth`.

qplot(factor(am),mpg , data = mtcars, 
      geom = "violin", stackdir = "center", binaxis = "y",
      color = factor(am), fill = factor(am))
## Warning: Ignoring unknown parameters: stackdir, binaxis

Actividad 1

Utilice los datos “diamonds” para dibujar boxplots de “price” y “cut”

diamonds
## # A tibble: 53,940 x 10
##    carat cut       color clarity depth table price     x     y     z
##    <dbl> <ord>     <ord> <ord>   <dbl> <dbl> <int> <dbl> <dbl> <dbl>
##  1 0.23  Ideal     E     SI2      61.5    55   326  3.95  3.98  2.43
##  2 0.21  Premium   E     SI1      59.8    61   326  3.89  3.84  2.31
##  3 0.23  Good      E     VS1      56.9    65   327  4.05  4.07  2.31
##  4 0.290 Premium   I     VS2      62.4    58   334  4.2   4.23  2.63
##  5 0.31  Good      J     SI2      63.3    58   335  4.34  4.35  2.75
##  6 0.24  Very Good J     VVS2     62.8    57   336  3.94  3.96  2.48
##  7 0.24  Very Good I     VVS1     62.3    57   336  3.95  3.98  2.47
##  8 0.26  Very Good H     SI1      61.9    55   337  4.07  4.11  2.53
##  9 0.22  Fair      E     VS2      65.1    61   337  3.87  3.78  2.49
## 10 0.23  Very Good H     VS1      59.4    61   338  4     4.05  2.39
## # … with 53,930 more rows
#complete aqui

2. Función ggplot()

Este tutorial se basa en http://seananderson.ca/ggplot2-FISH554/ y https://rpubs.com/agrogan/ggplot2

Los elementos básicos de ggplot son

ggplot(): especificar los datos geom_point(): la geometría o tipo de gráfico puede ser de muchas maneras, en este caso es de tipo punto aes(): “aesthetic”, como las variables serán visualizadas facet_grid(): gráficos compartidos.

Los elementos de ggplot se unen con el símbolo +

ggplot(data = mtcars) + 
  geom_point(aes(mpg, qsec, colour = factor(am))) +
  facet_grid(~vs)

Algunos tipos de geometría son geom_point() Points geom_line() Lines geom_ribbon() Ribbons, y range with continuous x values geom_polygon() Polygon, a filled path geom_pointrange() Vertical line with a point in the middle geom_linerange() An interval represented by a vertical line geom_path() Connect observations in original order geom_histogram() Histograms geom_text() Text annotations geom_violin( Violin plot (another name for a beanplot) geom_map() Polygons on a map

Histogramas

ggplot(data = mtcars) + geom_histogram(aes(x=qsec))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

El siguiente es un código idéntico al anterior

ggplot(data = mtcars, aes(x = qsec)) + geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Limita el número de clases

ggplot(data = mtcars) + geom_histogram(aes(x=qsec,fill=factor(am)),bins=10)

Divide en categorias y asigna trasparencia

ggplot(data = mtcars) + geom_histogram(aes(x=qsec,fill=factor(am)),bins=10, position = "stack",alpha = 0.5)#stack

ggplot(data = mtcars) + geom_histogram(aes(x=qsec,fill=factor(am)),bins=10, position = "identity",alpha = 0.5)

Ancho de barras

ggplot(data = mtcars) + geom_histogram(aes(x=qsec,fill=factor(am)),bins=10, position = "stack",alpha = 0.5, binwidth=0.5)

Gráfico de densidad

ggplot(data = mtcars) + geom_density(aes(x=qsec,fill=factor(am)),bins=10, position = "identity",alpha = 0.5)
## Warning: Ignoring unknown parameters: bins

Actividad 2

Utilice los datos “diamonds” para dibujar un histograma de “price”

diamonds
## # A tibble: 53,940 x 10
##    carat cut       color clarity depth table price     x     y     z
##    <dbl> <ord>     <ord> <ord>   <dbl> <dbl> <int> <dbl> <dbl> <dbl>
##  1 0.23  Ideal     E     SI2      61.5    55   326  3.95  3.98  2.43
##  2 0.21  Premium   E     SI1      59.8    61   326  3.89  3.84  2.31
##  3 0.23  Good      E     VS1      56.9    65   327  4.05  4.07  2.31
##  4 0.290 Premium   I     VS2      62.4    58   334  4.2   4.23  2.63
##  5 0.31  Good      J     SI2      63.3    58   335  4.34  4.35  2.75
##  6 0.24  Very Good J     VVS2     62.8    57   336  3.94  3.96  2.48
##  7 0.24  Very Good I     VVS1     62.3    57   336  3.95  3.98  2.47
##  8 0.26  Very Good H     SI1      61.9    55   337  4.07  4.11  2.53
##  9 0.22  Fair      E     VS2      65.1    61   337  3.87  3.78  2.49
## 10 0.23  Very Good H     VS1      59.4    61   338  4     4.05  2.39
## # … with 53,930 more rows
#complete aqui

Boxplots

ggplot(data = mtcars) + geom_boxplot(aes(x=factor(am), y=mpg))

ggplot(data = mtcars) + geom_boxplot(aes(x=factor(am), y=mpg))+ coord_flip()

Gráfico de barras

ggplot(mtcars, aes(x=qsec)) + geom_bar()

ggplot(mtcars, aes(x=qsec,fill=factor(am))) + geom_bar()

Gráfico de tortas

df <- data.frame(
  group = c("Male", "Female", "Child"),
  value = c(25, 25, 50)
  )
head(df)
##    group value
## 1   Male    25
## 2 Female    25
## 3  Child    50
# Barplot
bp <- ggplot(df, aes(x="", y=value, fill=group))+
geom_bar(width = 1, stat = "identity")
bp

pie <- bp + coord_polar("y", start=0)
pie

pie + scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9"))

pie

Aesthetics

Color, forma, tamaño y transparencia

ggplot(mtcars, aes(mpg, qsec)) + geom_point(colour = "red")

ggplot(mtcars, aes(mpg, qsec)) + geom_point(aes(colour = factor(cyl)))

ggplot(mtcars, aes(mpg, qsec)) + geom_point(aes(size = cyl), alpha = 0.4)

ggplot(mtcars, aes(mpg, qsec)) + geom_point(aes(shape = factor(cyl)), alpha = 0.4)

Facet wrap y grid

ggplot(mtcars, aes(mpg, qsec)) + geom_point(aes(size = hp), alpha = 0.4)+
  facet_wrap(~factor(am))

ggplot(mtcars, aes(mpg, qsec)) + geom_point(aes(size = hp), alpha = 0.4)+
  facet_wrap(~factor(am)+factor(cyl))

ggplot(mtcars, aes(mpg, qsec)) + geom_point(aes(size = hp), alpha = 0.4)+
  facet_wrap(factor(cyl)~factor(am))# compare con facet grid

ggplot(mtcars, aes(mpg, qsec)) + geom_point(aes(size = hp), alpha = 0.4)+
 facet_grid(factor(cyl)~factor(am))

Actividad 3

Utilice los datos “diamonds” para dibujar un grafico de dispersion de “depth” en funcion de “carat”, asigne color por “price” y utilice facet grid con “cut”

diamonds
## # A tibble: 53,940 x 10
##    carat cut       color clarity depth table price     x     y     z
##    <dbl> <ord>     <ord> <ord>   <dbl> <dbl> <int> <dbl> <dbl> <dbl>
##  1 0.23  Ideal     E     SI2      61.5    55   326  3.95  3.98  2.43
##  2 0.21  Premium   E     SI1      59.8    61   326  3.89  3.84  2.31
##  3 0.23  Good      E     VS1      56.9    65   327  4.05  4.07  2.31
##  4 0.290 Premium   I     VS2      62.4    58   334  4.2   4.23  2.63
##  5 0.31  Good      J     SI2      63.3    58   335  4.34  4.35  2.75
##  6 0.24  Very Good J     VVS2     62.8    57   336  3.94  3.96  2.48
##  7 0.24  Very Good I     VVS1     62.3    57   336  3.95  3.98  2.47
##  8 0.26  Very Good H     SI1      61.9    55   337  4.07  4.11  2.53
##  9 0.22  Fair      E     VS2      65.1    61   337  3.87  3.78  2.49
## 10 0.23  Very Good H     VS1      59.4    61   338  4     4.05  2.39
## # … with 53,930 more rows
table(diamonds$clarity)
## 
##    I1   SI2   SI1   VS2   VS1  VVS2  VVS1    IF 
##   741  9194 13065 12258  8171  5066  3655  1790
#complete aqui

ggplot(diamonds, aes(carat, depth)) + geom_point(aes(color = price), alpha = 0.4)+
 facet_grid(~factor(cut))

Scale free

ggplot(mtcars, aes(mpg, qsec)) + geom_point(aes(size = hp), alpha = 0.4)+
facet_grid(factor(cyl)~factor(am), scale="free")

Titulos y nombres de ejes

ggplot(mtcars, aes(mpg, qsec)) + geom_point(aes(size = hp), alpha = 0.4)+
 facet_grid(factor(cyl)~factor(am), scale="free")+
xlab("Nombre")+ # eje x
ylab("Nombre")+ # eje y
ggtitle("Título")+ #título del gráfico
labs(size = "Caballo de potencia") # título de legenda

Gráficos compuestos

# install.packages(gridExtra)
library(gridExtra)
df <- data.frame(x = 1:10, y = rnorm(100))
p1 <- ggplot(df, aes(x, y)) + geom_point()
p2 <- ggplot(df, aes(y)) + geom_histogram()
grid.arrange(p1, p2)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

grid.arrange(p1, p2, ncol=2)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

3. Vinculación con Plotly

library(plotly)
## 
## Attaching package: 'plotly'
## 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
ggplotly(ggplot(mtcars, aes(mpg, qsec)) + geom_point(aes(size = cyl), alpha = 0.4))
ggplotly(ggplot(data = mtcars) + geom_histogram(aes(x=qsec,fill=factor(am)),bins=10, position = "identity",alpha = 0.5))

Actividad 4

Utiliza los datos de WorldPhones y dibuja las series temporales con puntos y lineas de los diferentes continentes. Observe la organizacion y tipo de datos. Convierta a data.frame.

Actividad 5

Explora en google ejemplos de ggplot

Actividad 6

Carga datos propios en R y dibuja gráficos de histograma y de cajas.