/**
* jQuery Plugin: Sticky Tabs
*
* @author Aidan Lister
// Set the correct tab when the page loads showStuffFromHash(context);
// Set the correct tab when a user uses their back/forward button $(window).on('hashchange', function() { showStuffFromHash(context); });
// Change the URL when tabs are clicked $('a', context).on('click', function(e) { history.pushState(null, null, this.href); showStuffFromHash(context); });
return this; }; }(jQuery));
window.buildTabsets = function(tocID) {
// build a tabset from a section div with the .tabset class function buildTabset(tabset) {
// check for fade and pills options var fade = tabset.hasClass("tabset-fade"); var pills = tabset.hasClass("tabset-pills"); var navClass = pills ? "nav-pills" : "nav-tabs";
// determine the heading level of the tabset and tabs var match = tabset.attr('class').match(/level(\d) /); if (match === null) return; var tabsetLevel = Number(match[1]); var tabLevel = tabsetLevel + 1;
// find all subheadings immediately below var tabs = tabset.find("div.section.level" + tabLevel); if (!tabs.length) return;
// create tablist and tab-content elements var tabList = $('
'); $(tabs[0]).before(tabList); var tabContent = $('
'); $(tabs[0]).before(tabContent);
// build the tabset var activeTab = 0; tabs.each(function(i) {
// get the tab div var tab = $(tabs[i]);
// get the id then sanitize it for use with bootstrap tabs var id = tab.attr('id');
// see if this is marked as the active tab if (tab.hasClass('active')) activeTab = i;
// remove any table of contents entries associated with // this ID (since we'll be removing the heading element) $("div#" + tocID + " li a[href='#" + id + "']").parent().remove();
// sanitize the id for use with bootstrap tabs id = id.replace(/[.\/?&!#<>]/g, '').replace(/\s/g, '_'); tab.attr('id', id);
// get the heading element within it, grab it's text, then remove it var heading = tab.find('h' + tabLevel + ':first'); var headingText = heading.html(); heading.remove();
// build and append the tab list item var a = $('' + headingText + ''); a.attr('href', '#' + id); a.attr('aria-controls', id); var li = $('
'); li.append(a); tabList.append(li);
// set it's attributes tab.attr('role', 'tabpanel'); tab.addClass('tab-pane'); tab.addClass('tabbed-pane'); if (fade) tab.addClass('fade');
// move it into the tab content div tab.detach().appendTo(tabContent); });
// set active tab $(tabList.children('li')[activeTab]).addClass('active'); var active = $(tabContent.children('div.section')[activeTab]); active.addClass('active'); if (fade) active.addClass('in');
if (tabset.hasClass("tabset-sticky")) tabset.rmarkdownStickyTabs(); }
// convert section divs with the .tabset class to tabsets var tabsets = $("div.section.tabset"); tabsets.each(function(i) { buildTabset($(tabsets[i])); }); };
Repaso para hacer gráficos en R
ELEMENTOS GRÁFICOS
##data define con qué datos se va a trabajar.
##geom_ define los objetos geométricos que representan los datos (histograma, box-plot, puntos, rectas, etc.)
##aes características visuales que representan a los datos (x e y, tamaño, forma, color, transparencia, etc.)
##scale_ atributos de los ejes y aes (escala logarítmica, texto y orden de la escala, título de los ejes, intervalos, etc.)
##stat_ formas estadísticas de representar a los datos (intervalos de confianza, conteos, medias, rectas de regresiones, etc.)
##facet_ define paneles diferentes para subgrupos de datos
##theme_ aspecto general del gráfico (color de fondo, tipo de línea, tipo de texto, etc.)
#geom_
Estructura básica de dispersión
En el ejemplo que sigue, data define a los datos, aes define x e y (en ese orden), y geom_point() define que los datos van a ser puntos
library(ggplot2) # carga del paquete para hacer gráficos
flores<-read.csv("flores.csv") # carga los datos
ggplot(data=flores, aes(Sepal.Length, Petal.Length))+
geom_point()
Estructura básica de grupos
ggplot(data=flores, aes(Petal.Length))+ # define los datos y la variable a analizar
geom_bar() # histograma
ggplot(data=flores, aes(Species, Petal.Length))+
geom_boxplot() # diagrama de cajas
#aes
Color
cuando color (o fill) no están dentro de aes, lo aplica para todos. Caso contrario, aplica uno distinto para cada grupo que se defina
ggplot(data=flores, aes(Species, Petal.Length))+
geom_boxplot(color="violet") # el mismo color para todas las cajas
ggplot(data=flores, aes(Species, Petal.Length, color=Species))+ # un color diferente para cada valor de "Species" (3 en total)
geom_boxplot()
ggplot(data=flores, aes(Sepal.Length, Petal.Length))+
geom_point(color="blue") # el mismo color para todos los puntos
ggplot(data=flores, aes(Sepal.Length, Petal.Length, color=Species))+ # un color diferente para cada valor de "Species"
geom_point()
Tamaño
ggplot(data=flores, aes(Sepal.Length, Petal.Length, color=Species))+
geom_point(size=4) # mismo tamaño para todos los datos
ggplot(data=flores, aes(Sepal.Length, Petal.Length, color=Species, size=Sepal.Width))+ # el tamaño depende del ancho del sépalo
geom_point()
Forma
ggplot(data=flores, aes(Sepal.Length, Petal.Length, color=Species))+
geom_point(size=4, shape=22) # misma forma para todos los datos
ggplot(data=flores, aes(Sepal.Length, Petal.Length, color=Species, shape=Species))+ # la forma depende del valor de "Species"
geom_point(size=4)
Transparencia
ggplot(data=flores, aes(Sepal.Length, Petal.Length, color=Species, shape=Species))+
geom_point(size=4, alpha=0.4) # misma transparencia para todos los datos
ggplot(data=flores, aes(Sepal.Length, Petal.Length, color=Species, shape=Species, alpha=Petal.Length))+ # la transparencia depende del valor de "Petal.Length"
geom_point(size=4)
PARÉNTESIS
Se pueden graficar fuentes de datos diferentes en la misma figura. Para eso hay que definir los datos y variables en cada una de las cosas que se quieran graficar.
invento<-data.frame(eje_x=c(5,6,7,8), eje_y=c(2,2.5,3.5,6.5)) # crea unos datos inventados en el mismo rango que los de "flores"
ggplot()+
geom_point(data=flores, aes(Sepal.Length, Petal.Length, color=Species, shape=Species),size=4, alpha=0.6)+
geom_point(data=invento, aes(eje_x, eje_y)) # a lo que ya estaba, le agrega unos puntos nuevos con datos de otro data.frame (y por lo tanto otro x e y)
Rectas simples
ggplot()+
geom_point(data=flores, aes(Sepal.Length, Petal.Length, color=Species, shape=Species),size=4, alpha=0.6)+
geom_point(data=invento, aes(eje_x, eje_y))+
geom_line(data=invento, aes(eje_x, eje_y))+ #esta recta une los puntos
geom_vline(aes(xintercept=4), color="red", size=2, linetype=2) # recta vertical ("geom_hline" es la orizontal)
Recta del modelo lineal
ggplot()+
geom_point(data=flores, aes(Sepal.Length, Petal.Length, color=Species, shape=Species),size=4, alpha=0.6)+
geom_smooth(data=flores, aes(Sepal.Length, Petal.Length),method="lm") # agrega una recta común (por eso no puede estar "color" dentro de "aes")
ggplot(data=flores, aes(Sepal.Length, Petal.Length, color=Species, shape=Species))+
geom_point(size=4, alpha=0.4)+
geom_smooth(method="lm") # agrega una recta e intervalo de confianza para cada "Species"
#scale_
Colores manuales
manual es para definir valores a mano, pueden ser colores (este caso), tipos de línea, formas, etc.
ggplot(data=flores, aes(Sepal.Length, Petal.Length, color=Species, shape=Species))+
geom_point(size=4, alpha=0.4)+
geom_smooth(method="lm")+
scale_color_manual(values=c("black", "orange", "violet")) # define los colores
En otro orden
ggplot(data=flores, aes(Sepal.Length, Petal.Length, color=Species, shape=Species))+
geom_point(size=4, alpha=0.4)+
geom_smooth(method="lm")+
scale_color_manual(breaks=c("virginica", "versicolor","setosa"), # con "breaks" define el orden
values=c("black", "orange", "violet"))
Con otros nombres
ggplot(data=flores, aes(Sepal.Length, Petal.Length, color=Species, shape=Species))+
geom_point(size=4, alpha=0.4)+
geom_smooth(method="lm")+
scale_color_manual(breaks=c("virginica", "versicolor","setosa"),
labels=c("vir", "ver", "set"), # "labels" es para ponerle otros nombres
values=c("black", "orange", "violet"),
name="colores feos") # y "name" define el título de esa escala (en este caso, la de color)
Unificando leyendas
ggplot(data=flores, aes(Sepal.Length, Petal.Length, color=Species, shape=Species))+
geom_point(size=4, alpha=0.7)+
geom_smooth(method="lm")+
scale_color_manual(breaks=c("virginica", "versicolor","setosa"),
labels=c("vir", "ver", "set"),
values=c("black", "orange", "violet"),
name="mismo nombre")+ # ésta y la de abajo se llaman igual
scale_shape_manual(breaks=c("virginica", "versicolor","setosa"),
labels=c("vir", "ver", "set"),
values=c(16,17,15), # define las formas
name="mismo nombre") # al tener igual nombre se unifican
Escalas continuas
ggplot(data=flores, aes(Sepal.Length, Petal.Length, color=Species, shape=Species))+
geom_point(size=4, alpha=0.4)+
geom_smooth(method="lm")+
scale_x_continuous(name="Sépalo",
breaks=c(4,6,8), # los valores del eje x que muestra
labels=c("cuatro", "seis", "ocho"), # cómo aparecen esos valores
limits=c(3,9))+ # rango del eje x
scale_y_continuous(name="No lo sepa") # nombre del eje y
#stat_
Funciones
summary es para aplicar funciones a los datos. Si no se especifica qué función, calcula media + EE.
ggplot(data=flores, aes(Species, Sepal.Length, color=Species, shape=Species))+
stat_summary()
## No summary function supplied, defaulting to `mean_se()
#facet_
Grilla
facet_grid define una grilla de paneles. Lo que figura antes del ~ es lo que define las filas, y lo que está después, las columnas. El . es para avisar que no hay una variable que defina filas (o columnas).
ggplot(data=flores, aes(Sepal.Length, Petal.Length, color=Species, shape=Species))+
geom_point(size=4, alpha=0.7)+
geom_smooth(method="lm")+
facet_grid(.~Species) # un panel por valor de "Species", cada uno en una columna
ggplot(data=flores, aes(Sepal.Length, Petal.Length, color=Species, shape=Species))+
geom_point(size=4, alpha=0.7)+
geom_smooth(method="lm")+
facet_grid(round(Sepal.Width)~Species) # un panel por valor de "Species" por columna y valor de "Sepal.Width" (redondeado) por fila
Escalas libres y cambio de nombre
Con scales="free" cada panel tiene su propia escala. La función as.labeller es para cambiar el título de los paneles.
ggplot(data=flores, aes(Sepal.Length, Petal.Length, color=Species, shape=Species))+
geom_point(size=4, alpha=0.7)+
geom_smooth(method="lm")+
facet_grid(Species~., scales="free", labeller = as_labeller(c("setosa"="se","versicolor"="ve", "virginica"="vi")))
#theme_ Hay varios formatos predefinidos, cada uno con un nombre diferente. Para probarlos y ahorrar código creamos un gráfico y lo llamamos vago.
vago<-ggplot(data=flores, aes(Sepal.Length, Petal.Length, color=Species, shape=Species))+
geom_point(size=4, alpha=0.7)+
geom_smooth(method="lm")+
labs(x="Sépalo", y="Pétalo", title="Largo")+
facet_grid(.~Species)
vago
vago + theme_bw()
vago + theme_linedraw()
vago + theme_dark()
vago + theme_minimal()
vago + theme_classic()
Para un control mucho mayor está la función theme()
vago + theme(legend.position = "top",
axis.line = element_line(size = 2, colour = "violet"), #define tamaño y color de los ejes
axis.text = element_text(size=20,colour = "red"), # tamaño y color del texto de los ejes
axis.title =element_text(size=20,colour = "darkgreen"), # tamaño y color del título de los ejes
axis.title.y = element_text(size = rel(1.5)), # sólo el eje y, definido en forma relativa al valor de "axis.title"
text = element_text(size=30), # tamaño de partida de todos los textos
strip.background = element_rect(color="blue", fill="yellow", size=3), # color de borde y fondo del tiulo de los paneles
plot.background = element_rect(color="red", fill="gray80", size=3), # color de borde y fondo de la figura
panel.background = element_rect(fill="gray70"), # color de fondo del panel
legend.background = element_rect(fill="lightyellow"), # color de fondo de la leyenda
panel.grid.major = element_line(colour = "black"), # color de las grillas principales
panel.grid.minor = element_blank() ) # "element_blank()" es para que no grafique lo que está antes del "=", en este caso, las grillas secundarias
Ahora la salida cómoda
library(cowplot) # carga un paquete con mejoras para ggplot2
##
## Attaching package: 'cowplot'
## The following object is masked from 'package:ggplot2':
##
## ggsave
vago # carga el gráfico con el que veníamos trabajando, ahora con otro formato más prolijo
Uniendo figuras
# abajo crea una nueva figura llamada "otro", con la relación entre el ancho del sépalo y el pétalo
otro<-ggplot(data=flores, aes(Sepal.Width, Petal.Width, color=Species, shape=Species))+
geom_point(size=4, alpha=0.7)+
geom_smooth(method="lm")+
facet_grid(.~Species)+
scale_x_continuous(breaks=c(2:4))+
labs(x="Sépalo", y="Pétalo", title="Ancho")
otro
plot_grid(vago, otro, labels="AUTO") # une las dos figuras y les pone una letra a cada una en mayúscula
Tuneada final
a_ver_si_anda<-plot_grid(vago+theme(axis.title.x=element_blank(), # saca el título del eje x (después vamos a poner uno común)
legend.position="none"), # saca la leyenda
otro+theme(axis.title.x=element_blank(), # saca el título del eje x,
axis.title.y=element_blank(), # el del eje y,
legend.position="none"), # y la leyenda
labels="AUTO",
align="vh") # define que cada figura tenga el mismo largo y ancho
a_ver_si_anda
# a la figura de recién le agregamos un texto abajo (que va a ser el título común del eje x)
centro<-ggdraw(add_sub(a_ver_si_anda, "Sépalo"))
# extraemos la leyenda
leyenda<-get_legend(vago+theme(legend.position="top"))
# y unimos la leyenda con las dos figuras ya unidas
plot_grid(leyenda, centro,ncol=1, rel_heights = c(1,9))
// add bootstrap table styles to pandoc tables function bootstrapStylePandocTables() { $('tr.header').parent('thead').parent('table').addClass('table table-condensed'); } $(document).ready(function () { bootstrapStylePandocTables(); });