6 de octubre de 2020

Violines desde varios ficheros en R

 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

1 comentario:

  1. Otras opciones: https://twitter.com/plantae_org/status/1115887358463873024

    ResponderEliminar