Felipe S. M. Barros
30/10/2018
Temario
mpg <- read.csv("mpg.csv")
head(mpg)
manufacturer model displ year cyl trans drv cty hwy fl class
1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compact
2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compact
3 audi a4 2.0 2008 4 manual(m6) f 20 31 p compact
4 audi a4 2.0 2008 4 auto(av) f 21 30 p compact
5 audi a4 2.8 1999 6 auto(l5) f 16 26 p compact
6 audi a4 2.8 1999 6 manual(m5) f 18 26 p compact
# manufacturer
# model
# displ = engine displacement, in litres (size)
# year = year of manufacture
# cyl = number of cylinders
# trans = type of transmission
# drv = f = front-wheel drive, r = rear wheel drive, 4 = 4wd
# cty = city miles per gallon
# hwy = highway miles per gallon
# fl = fuel type
# class = "type" of car
Como podríamos ver eso con un grafico de disperción
plot(mpg$displ, mpg$hwy)
vamos ocupar una librería llamada ggplot; que permite crear gráficos de forma mas intutiva y con mejor estetica
# install.packages('ggplot2')
library(ggplot2)
El ggplot trabaja con capas. La primera que creamos es las base del grafico, adonde informamos que datos serán usados (en ese caso mpg).
A esa base se agregan (por eso el +) informaciones como la geometria a ser usada y la estetica (aparencia)
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy))
Ua vez que tenemos definido la geometrias (dispersión = geom_point()), podemos agregar otras variables para mejorar el grafico. Por ejemplo, hacer con que cambie el color de los puntos acuerdo a las clases de auto.
ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy, colour = class))
Así como ocupamos el parametro estético colour, como te crees que podemos cambiar el formato de los puntos?
Que resultado tendrán los comandos abajo?
ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy) , colour = "red")
ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy) , shape = 6)
Que te parece que vá apresentar el codigo abajo?
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, color = "blue"))
# que ha de equivocado en ese comando?
Que te parece que vá apresentar el codigo abajo?
# Que pasa al ocupar una variable continua al color?
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, color = cty))
# y en el tamaño?
# y en formato?
# Como la estetica cambia en relación a variables categoricas / continuas?
Se puede ocupar una misma variable en distintos elementos esteticos, como en lo ejemplo abajo.
Como queda el grafico?
# Mapeando la misma variable en distintos elementos esteticos
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, size = cty, color = cty))
Se puede definir distintos colores en relación a una operación lógica.
Como quedan los gráficos?
# Se puede trabajar con condicionales (logicos)
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, colour = displ < 5))
# Y se hago eso:
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, colour = displ < 5 | hwy < 20))
ggplotnos permite dividir de forma facilitada un grafico en función de una variable categorica, usando la función facet_warp()
# El primero argumento de facet_earp debe ser la formula en la cual se debe dividir los graficos
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_wrap(~class)
Para hacer la división en relación a dos variables categoricas, debemos usar facet_grid
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_grid(drv ~ cyl)
facet_warp? Tiene sentido?Para hacermos otros graficos mas allá de los graficos de dispersión, vamos ocupar las otras formas de geometría (geom_*) de ggplot:
Por ejemplo:
geom_smooth (suavizador)
ggplot(data = mpg) +
geom_smooth(mapping = aes(x = displ, y = hwy))
Muchas veces los parametros esteticos (que figuran en aes() ), son los mismos. Pero no siempre
Con smooth no se puede usar shape, pero si se puede usar linetype
Como quedará este grafico?
ggplot(data = mpg) +
geom_smooth(mapping = aes(x = displ, y = hwy, linetype = drv))
Como estamos trabajando con capas del grafico, podemos agregar distintas geometrias.
Como crees que podríamos hacer eso?
Ejemplo:
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
geom_smooth(mapping = aes(x = displ, y = hwy))
Perciba que estamos repetindo algunos elementos esteticos;
Que pasa si hacemos eso?
ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
geom_point() +
geom_smooth()
# cuales serían los beneficios de eso?
Y si queremos que los puntos estén relacionados a la clase de auto?
Atención: Solo los puntos!
** como quedaría el codigo para hacer ese grafico?**
Que grafico producirá el codigo abajo? Hay algo de nuevo en él? De que se trata?
ggplot(data = mpg, mapping = aes(x = displ, y = hwy, color = drv)) +
geom_point() +
geom_smooth(se = FALSE)
Estos codigos producirán distintos graficos?
ggplot() +
geom_point(data = mpg, mapping = aes(x = displ, y = hwy)) +
geom_smooth(data = mpg, mapping = aes(x = displ, y = hwy))
ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
geom_point(aes(colour = class)) +
geom_smooth()
Como harías estos gráficos?
Que otras geometrías vos ocuparías para hacer:
Los graficos de barra son muy interesantes pués presentan un cambio en los datos, una vez que la información count no existe en la tabla.
Los graficos de barras, histogramas ajustan sus datos antes de hacer el grafico. Tal cual hace la geometria smooth, que ajusta una regresión, y los graficso de caja boxplots.
ggplot(data = mpg) +
geom_bar(mapping = aes(x = class))
Los graficos de barras, histogramas ajustan sus datos antes de hacer el grafico. Tal cual hace la geometria smooth, que ajusta una regresión, y los grafico de caja boxplots.
Que resultado tendrán los seguientes condigos?
ggplot(data = mpg) +
geom_bar(mapping = aes(x = class, colour = class))
ggplot(data = mpg) +
geom_bar(mapping = aes(x = class, fill = class))
Que pasa si creamos un grafico de barra basado en las clases de autos pero el color en función del tipo de motor (delantero, trasero o cuatro rodas)?
ggplot(data = mpg) +
geom_bar(mapping = aes(x = class, fill = drv))
Permite que se compare de forma mas eficiente las proporciones:
ggplot(data = mpg) +
geom_bar(mapping = aes(x = class, fill = drv), position = "fill")
Hay un argumento más que resulta ser interesante:
Con ggplot que facil cambiar la orientación de los graficos, usando la función coord_flip().
En base al grafico abajo:
ggplot(data = mpg, mapping = aes(x = class, y = hwy)) +
geom_boxplot()
La función coord_polar() ocupa el sistema de simbolos en formato polar, y suele ser util a algunos casos.
ggplot(data = mpg)+
geom_bar(mapping = aes(x = class, fill = class)) + coord_polar()
Como quedaría si ponemos el color en función a otras variables categorica?
ggplot(data = mpg)+
geom_bar(mapping = aes(x = class, fill = drv)) + coord_polar()
Y si ocupamos el parametro position = "fill"?
ggplot(data = mpg)+
geom_bar(mapping = aes(x = class, fill = drv), position = 'fill') + coord_polar()
De forma general, vimos que ggplot tiene una sintaxis específica para elborar los graficos.
Podemos resumir de esta forma:
ggplot(data = <DATA>) +
<GEOM_FUNCTION>(
mapping = aes(<MAPPINGS>),
stat = <STAT>,
position = <POSITION>
) +
<COORDINATE_FUNCTION> +
<FACET_FUNCTION>
ggsave("Mi_grafico_copado.png")
ggsave("Mi_grafico_copado.pdf")
Que graficos podrías hacer con los datos de diamantes?
diamonds <- read.csv('./Diamonds.csv')
head(diamonds)
carat cut color clarity depth table price x y z
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.29 Premium I VS2 62.4 58 334 4.20 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
Que graficos podrías hacer con los datos de diamantes?
ggplot(data = diamonds) +
geom_point(mapping = aes(x = price, y = depth)) +
facet_wrap(~clarity)