Visualisation en coordonnées parallèles avec R

Parallel Coordinate plots chart with R

L'essentiel de cette page !

Réaliser une visualisation en coordonnées parallèles prends du temps, surtout si on veut faire plein de test. Cette méthode est idéale pour visualiser plusieurs variables numériques en colorant en fonction d'une autre variable numérique ou d'une variable catégorielle.

Cette méthode rentre dans les techniques de dadataviz adaptées aux grands jeux de données.

Voici une fonction tapée maison qui va vous permettre de faire votre affichage en 1 ligne sans vous prendre la tête.

Je peux réaliser des coordonnées parallèles en 1 ligne de code avec la fonction maison parco() : il suffit de copier-coller son code ci-dessous.

data(iris)

parco(data=iris,Y=1,X=c(2:4)) # a fonction parco() doit d'abord être collée ci-dessous

Remarque : on peut remplacer les numéros de colonnes par les titres !

parco(data=iris,Y=2,X=c("Sepal.Length","Sepal.Width"))

Une amélioration à envisager pour autoriser des Y en variable de catégories.

Code de la fonction parco()  à copier-coller

require("plotly")

require("htmlwidgets")

# VERSION 02 janvier 2021

# Mettre titre d'une colonne en variable

parco <- function(data,Y=c(),X=c(),save=F,file="file.html") {

  colnames(data)<-gsub("-",".",colnames(data))

  # data : une data.frame

  # Y : un numéro de colonne ou un titre

  # X : un vecteur contenant ou des numéros de colonnes ou des titres

  if (is.numeric(Y) == T) {

      mon_titre = paste("Variable :",colnames(data)[Y])

      j <- colnames(data)[Y]

  }else {

  Y<-gsub("-",".",Y)

      mon_titre = paste("Variable :",Y)

      j <- Y

  }

  if (length(X)==0) {X <- 1:ncol(data)}

  if (is.numeric(X) == T) {

   dims <- list() ; k<-0

      for (i in X) {

     k<-k+1

        dims[[k]]<- list(range = range(data[,i],na.rm=T),

       label = colnames(data)[i],values = formula(paste0("~",colnames(data)[i])))

      }

  }else {

   dims <- list() ; k<-0

      for (i in X) {

     k<-k+1

         dims[[k]]<- list(range = range(data[[i]],na.rm=T),

       label = i,values = formula(paste0("~",i)))

      }

  } 

  # Cette version a été réalisée par Antoine Massé

  # Site  :Aide à l'utilisation de R

  # Merci d'en indiquer la source si vous la recopiée

  # parallele coordinate plot sur variable

  fig <- data %>% plot_ly(type = 'parcoords',

    line = list(color = ~get(j),

    colorscale = 'Jet',

    showscale = TRUE,

    reversescale = TRUE,

    cmin = min( data[[j]]),

    cmax = max( data[[j]])),

    dimensions = dims) %>% layout(title = mon_titre)

  if (save==F) {print(fig)}

  if (save==T) {saveWidget(fig, file, selfcontained = F, libdir = "lib")}

}