Hola,
la semana pasada necesitaba hacer una gráfica para mostrar lado a lado varias distribuciones de miles de observaciones. Para ello me decanté por las llamadas gráficas violín, que mi colega Pablo Vinuesa ya había usado en esta figura (panel D) hace unos años.
Los violin plots permiten resumir distribuciones de manera concisa, mostrando la mediana (punto blanco), el rango intercuartil (el segmento negro grueso) y la densidad de puntos como una curva a cada lado. Por esta última característica son superiores a los diagramas de caja (boxplots).
El siguiente código en R muestra como calculé esta gráfica horizontal usando la librería vioplot de R a partir de múltiples ficheros de texto, de un valor por línea y extensión .tsv, uno por cada serie de datos.
library(vioplot) # setwd("path") # if required filedir="./" # parse input TSV file names repeat_files = list.files(path=filedir, pattern="\\.tsv") series_names = gsub("\\.tsv", "", repeat_files) # actually read files into data frames repeats = lapply(repeat_files, function(i){ log10(read.table(i, header=FALSE)) }) names(repeats) <- series_names # increase left and bottom margins to make room for axis labels par(mar = c(4, 11, 1, 1)) plot("", ylim = c(0.5, length(repeats)+0.5),
# low X values truncated in example
xlim = c(2, max(unlist(repeats))), yaxt = "n", ylab = "", xlab = "log10 repeat length") axis(2, labels = series_names, at = c(1:length(repeats)), las=1) # add violins one by one lapply(seq_along(repeats), function(x) vioplot(repeats[[x]], at = x, add = T, box = F, horizontal=T) )
Hasta pronto,
Bruno