plot es la función mÔs bÔsica para graficar datos en R.
ācarsā es un dataset incluido originalmente en R.
plot(cars$speed, cars$dist, main="velocidad vs distancia", xlab = "speed", ylab = "dist", col="red")la función āaesā describe en forma estĆ©tica cómo las variables son mapeadas.
library("dplyr")##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library("ggplot2")
data(mtcars)
# grafico simple
ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point()+ggtitle("Titulo") +
theme(plot.title = element_text(hjust=0.5,face="bold", color = "red"))# cambiar tamaƱo de punto y forma
ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point(size=2, shape=23)ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point(aes(size=qsec))ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() + geom_text(label=rownames(mtcars))# cambiar colores
ggplot(mtcars, aes(x=wt, y=mpg, color=cyl)) + geom_point()#
ggplot(faithful, aes(x=eruptions, y=waiting)) + geom_point()# una elipse alrededor de todos los puntos
ggplot(faithful, aes(waiting, eruptions))+ geom_point()+ stat_ellipse()# Elipse por grupos
p <- ggplot(faithful, aes(waiting, eruptions, color = eruptions > 3))+ geom_point()
p + stat_ellipse()# cambiar el tipo de elipse: posibles valores son "t", "norm", "euclid"
p + stat_ellipse(type = "norm")La grĆ”fica de violĆn permite visualizar la distribución de una variable numĆ©rica para uno o varios grupos. Cada violĆn representa un grupo o una variable. La forma representa la estimación de densidad de la variable: cuantos mĆ”s puntos de datos haya en un rango especĆfico, mayor serĆ” el tamaƱo del violĆn para ese rango. EstĆ” muy cerca de una parcela, pero permite una comprensión mĆ”s profunda de la distribución.
Violin plot es una potente técnica de visualización de datos que permite comparar tanto el ranking de varios grupos como su distribución. Sorprendentemente, es menos utilizado que el boxplot, incluso si proporciona mÔs información.
Los violines se adaptan especialmente cuando la cantidad de datos es enorme y resulta imposible mostrar observaciones individuales. Para conjuntos de datos pequeños, una grÔfica de caja con fluctuaciones es probablemente una mejor opción, ya que realmente muestra toda la información.
ggplot(diamonds, aes(x = cut, y = price)) + geom_violin()ggplot(diamonds, aes(x = cut, y = price, fill = cut)) + geom_violin() + scale_y_log10()ggplot(diamonds, aes(x = cut, y = price, fill = cut)) +
geom_violin() + scale_y_log10() +
geom_boxplot(width = 0.2)Un grÔfico de densidad es una representación de la distribución de una variable numérica. Utiliza una estimación de la densidad del núcleo para mostrar la función de densidad de probabilidad de la variable.
Las grÔficas de densidad se utilizan para estudiar la distribución de una o varias variables. Revisar la distribución de sus variables una por una es probablemente la primera tarea que debe hacer cuando obtenga un nuevo conjunto de datos. Proporciona una buena cantidad de información.
No compare mĆ”s de ~3 grupos en el mismo diagrama de densidad. El grĆ”fico se desordena y es difĆcil de entender. En su lugar, utilice una trama de violĆn, una trama de caja, una trama de lĆnea de crestas o utilice mĆŗltiples pequeƱos.
d <- density(mtcars$mpg) # returns the density data
plot(d) # plots the resultsggplot(data = storms, aes(x = pressure)) +
geom_density(fill = 'cyan')ggplot(iris, aes(x = Sepal.Length)) +
geom_density(aes(color = Species))ggplot(iris, aes(x = Sepal.Length)) +
geom_density() +
facet_wrap(~Species)Permite mostrar una distribucióde una variable. Se utiliza para explicar tendencias en un set de datos.
set.seed(1234)
df <- data.frame(
sex=factor(rep(c("F", "M"), each=200)),
weight=round(c(rnorm(200, mean=55, sd=5), rnorm(200, mean=65, sd=5)))
)
# Basic histogram
p <-ggplot(df, aes(x=weight)) + geom_histogram(binwidth=1,color="black", fill="white")
p# agregar una lĆnea media
p+ geom_vline(aes(xintercept=mean(weight)),color="blue", linetype="dashed", size=1)## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ā¹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
# Histogram con density plot
ggplot(df, aes(x=weight)) +
geom_histogram(aes(y=..density..),binwidth=1, colour="black", fill="white")+
geom_density(alpha=.2, fill="#FF6666") ## Warning: The dot-dot notation (`..density..`) was deprecated in ggplot2 3.4.0.
## ā¹ Please use `after_stat(density)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
# Usar llenado semi-transparent
p<-ggplot(df, aes(x=weight, fill=sex, color=sex)) + geom_histogram(position="identity", alpha=0.5, binwidth = 1)
p# Multi-panel
p<-ggplot(df, aes(x=weight))+
geom_histogram(color="black", fill="white")+
facet_grid(sex ~ .)
p## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Boxplot, Ridgeline (lĆnea de crestas)
Scatter (dispersiograma), Heatmap, Correlogram, Buble, Connected scatter, Density 2d
Una carta tĆ©rmica āHeatmapā es una representación grĆ”fica de datos en la que los valores individuales contenidos en una matriz se representan en forma de colores.
La función heatmap() se proporciona de forma nativa en R. Produce una matriz de alta calidad y ofrece herramientas estadĆsticas para normalizar los datos de entrada, ejecutar algoritmos de agrupación y visualizar el resultado con dendrogramas.
Los mapas tƩrmicos pueden ser una muy buena alternativa para visualizar series de tiempo, especialmente cuando el marco de tiempo que usted estudia se estƔ repitiendo, como semanas.
Heatmap es realmente Ćŗtil para mostrar una vista general de los datos numĆ©ricos, no para extraer puntos de datos especĆficos. En el grĆ”fico de arriba, el enorme tamaƱo de la población de China y la India aparece por ejemplo.
Heatmap tambiĆ©n es Ćŗtil para mostrar el resultado de la agrupación jerĆ”rquica. BĆ”sicamente, la agrupación verifica quĆ© paĆses tienden a tener las mismas caracterĆsticas en sus variables numĆ©ricas, quĆ© paĆses son similares. La forma usual de representar el resultado es usar dendrograma.
# The mtcars dataset:
data <- as.matrix(mtcars)
# Default Heatmap
heatmap(data)# Use 'scale' to normalize
heatmap(data, scale="column")# No dendrogram nor reordering for neither column or row
heatmap(data, Colv = NA, Rowv = NA, scale="column")# cambio de color
heatmap(data, Colv = NA, Rowv = NA, scale="column", col = terrain.colors(256))Barplot, Spider / Radar, Woedcloud, Paralell, Lollipop, Circular barplot
A diferencia de los histogramas se ontrola en mayor medida los ejes X e Y entregando valores fijos.
df <- data.frame(dose=c("D0.5", "D1", "D2"), len=c(4.2, 10, 29.5))
# Basic barplot
p<-ggplot(data=df, aes(x=dose, y=len)) +
geom_bar(stat="identity")
p# Horizontal bar plot
p + coord_flip()# Valores dentro de las barras
ggplot(data=df, aes(x=dose, y=len)) +
geom_bar(stat="identity", fill="steelblue")+
geom_text(aes(label=len), vjust=1.6, color="white", size=3.5)+
theme_minimal()# valores fuera de las barras
ggplot(data=df, aes(x=dose, y=len)) +
geom_bar(stat="identity", fill="steelblue")+
geom_text(aes(label=len), vjust=-0.3, size=3.5)+
theme_minimal()# con valores solo en eje x
# Don't map a variable to y
ggplot(mtcars, aes(x=factor(cyl)))+
geom_bar(stat="count", width=0.7, fill="steelblue")+
theme_minimal()# llenar con colores por grupo
p<-ggplot(df, aes(x=dose, y=len, fill=dose)) +
geom_bar(stat="identity")+theme_minimal()
p# Use custom color palettes
p+scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9"))# usar un set colores
p <- p+scale_fill_brewer(palette="Blues")
p + theme(legend.position="top")p + theme(legend.position="bottom")# Multiple Groups
df2 <- data.frame(supp=rep(c("VC", "OJ"), each=3),
dose=rep(c("D0.5", "D1", "D2"),2),
len=c(6.8, 15, 33, 4.2, 10, 29.5))
head(df2)## supp dose len
## 1 VC D0.5 6.8
## 2 VC D1 15.0
## 3 VC D2 33.0
## 4 OJ D0.5 4.2
## 5 OJ D1 10.0
## 6 OJ D2 29.5
# Barras apiladas con multiples grupos
ggplot(data=df2, aes(x=dose, y=len, fill=supp)) + geom_bar(stat="identity")# Use position=position_dodge()
ggplot(data=df2, aes(x=dose, y=len, fill=supp)) +
geom_bar(stat="identity", position=position_dodge())# etiquetas dentro del grafico
ggplot(data=df2, aes(x=dose, y=len, fill=supp)) +
geom_bar(stat="identity", position=position_dodge())+
geom_text(aes(label=len), vjust=1.6, color="white",
position = position_dodge(0.9), size=3.5)+
scale_fill_brewer(palette="Paired")+
theme_minimal()Una nube de palabras (o nube de etiquetas) es una representación visual de datos de texto. Las etiquetas suelen ser de una sola palabra, y la importancia de cada etiqueta se muestra con el tamaño o color de la fuente. En R, dos paquetes permiten crear nubes de palabras: Wordcloud y Wordcloud2.
Las nubes de palabras son útiles para percibir rÔpidamente los términos mÔs prominentes. Son ampliamente utilizadas en los medios de comunicación y bien comprendidas por el público.
library(wordcloud)## Loading required package: RColorBrewer
# Crear una lista de palabras (Random words concerning my work)
a <- c("Cereal","WSSMV","SBCMV","Experimentation","Talk","Conference","Writing",
"Publication","Analysis","Bioinformatics","Science","Statistics","Data",
"Programming","Wheat","Virus","Genotyping","Work","Fun","Surfing","R", "R",
"Data-Viz","Python","Linux","Programming","Graph Gallery","Biologie", "Resistance",
"Computing","Data-Science","Reproductible","GitHub","Script")
#I give a frequency to each word of this list
b <- sample(seq(0,1,0.01) , length(a) , replace=TRUE)
#The package will automatically make the wordcloud ! (I add a black background)
par(bg="black")
wordcloud(a , b , col=terrain.colors(length(a) , alpha=0.9) , rot.per=0.3 )## Warning in wordcloud(a, b, col = terrain.colors(length(a), alpha = 0.9), :
## Conference could not be fit on page. It will not be plotted.
## Warning in wordcloud(a, b, col = terrain.colors(length(a), alpha = 0.9), :
## Surfing could not be fit on page. It will not be plotted.
line plot, Area, Stacked area, Streamchart, Time series
# Libraries
library(ggplot2)
library(dplyr)
#library(hrbrthemes)
# Load dataset from github
data <- read.table("https://raw.githubusercontent.com/holtzy/data_to_viz/master/Example_dataset/3_TwoNumOrdered.csv", header=T)
data$date <- as.Date(data$date)
# Plot
data %>%
tail(10) %>%
ggplot( aes(x=date, y=value)) +
geom_line( color="grey") +
geom_point(shape=21, color="black", fill="#69b3a2", size=4) +
ggtitle("Evolution of bitcoin price")# Libraries
library(ggplot2)
library(babynames) # dataset: a dataframe called babynames
library(dplyr)
library(viridis)## Loading required package: viridisLite
# Keep only 3 names
don <- babynames %>%
filter(name %in% c("Ashley", "Patricia", "Helen")) %>%
filter(sex=="F")
# Plot nombres mas populares en U.S.
don %>%
ggplot( aes(x=year, y=n, group=name, color=name)) +
geom_line() +
scale_color_viridis(discrete = TRUE) +
ggtitle("Popularity of American names in the previous 30 years") +
ylab("Number of babies born")Las series temporales tienen por objeto estudiar la evolución de una o varias variables a lo largo del tiempo. Esta sección da ejemplos usando R. Se hace un enfoque en ātidyverseā: el paquete de ālubridateā es de hecho su mejor amigo para tratar con el formato de fecha, y āggplot2ā permite trazarlo eficientemente. El paquete de ādygraphsā tambiĆ©n se considera para construir grĆ”ficos interactivos impresionantes.
# Libraries
library(ggplot2)
library(dplyr)
# Dummy data
data <- data.frame(
day = as.Date("2017-06-14") - 0:364,
value = runif(365) + seq(-140, 224)^2 / 10000
)
# Most basic bubble plot
p <- ggplot(data, aes(x=day, y=value)) +
geom_line() +
xlab("")
p# Libraries
library(ggplot2)
library(dplyr)
#library(hrbrthemes)
# Dummy data
data <- data.frame(
day = as.Date("2017-06-14") - 0:364,
value = runif(365) + seq(-140, 224)^2 / 10000
)
# Most basic bubble plot
p <- ggplot(data, aes(x=day, y=value)) +
geom_line( color="steelblue") +
geom_point() +
xlab("") +
theme(axis.text.x=element_text(angle=60, hjust=1)) +
scale_x_date(limit=c(as.Date("2017-01-01"),as.Date("2017-02-11"))) +
ylim(0,1.5)
p## Warning: Removed 323 rows containing missing values (`geom_line()`).
## Warning: Removed 323 rows containing missing values (`geom_point()`).
library(ggplot2)
library(dplyr)
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
# Load dataset from github
data <- read.table("https://raw.githubusercontent.com/holtzy/data_to_viz/master/Example_dataset/3_TwoNumOrdered.csv", header=T)
data$date <- as.Date(data$date)
# plot
data %>%
ggplot( aes(x=date, y=value)) +
geom_line(color="#69b3a2") +
ylim(0,22000) +
annotate(geom="text", x=as.Date("2017-01-01"), y=20089,
label="Bitcoin price reached 20k $\nat the end of 2017") +
annotate(geom="point", x=as.Date("2017-12-17"), y=20089, size=10, shape=21, fill="transparent") +
geom_hline(yintercept=5000, color="orange", size=.5)