2017-09-25 2 views
2

Quelle est la commande R plot_ly pour ajouter des barres de signification horizontales (et des étoiles) à un graphe? Les réponses à "How to draw the boxplot with significant level?" et "Put stars on ggplot barplots and boxplots - to indicate the level of significance (p-value)" fournissent un bon code pour ggplot.ajouter des lignes d'indicateurs de signification de boîtes à moustaches et des astérisques dans R plot_ly

En premier lieu, déterminer l'importance:

library(lsmeans) 
lsmeans(lm(data = iris, Sepal.Width ~ Species), pairwise ~ Species) 
    $contrasts 
    contrast    estimate   SE df t.ratio p.value 
    setosa - versicolor  0.658 0.06793755 147 9.685 <.0001 
    setosa - virginica  0.454 0.06793755 147 6.683 <.0001 
    versicolor - virginica -0.204 0.06793755 147 -3.003 0.0088 

Voici un exemple de code R pour la parcelle. Comment ajouter des lignes et des étoiles?

library(plotly) 
p <- plot_ly() 
p <- add_boxplot(p, data = iris, x = ~Species, y = ~Sepal.Width, 
       color = ~Species, boxpoints = "all", jitter = 0.3, pointpos = 0) 
# p <- add_paths(p, data = iris, ???) 
# p <- add_line(p, data = iris, ???) 
p 
+1

Si vous voulez faire via des annotations basculement ne fonctionnera plus (l'importance l'indicateur restera pendant que la trace est partie). Toutes les possibilités seront assez hacky et une solution unique, en ajoutant une trace qui fonctionne comme un indicateur, en ajoutant des annotations, etc –

+0

@MaximilianPeters, merci pour le commentaire. Il semble que vous recommandiez d'utiliser R Plotly pour ajouter ces indicateurs de signification. Je vais les ajouter dans Inkscape ou Illustrator et les enregistrer au format SVG. –

+0

Si vous désactivez le basculement de trace et que vous êtes satisfait d'une solution hacky, je pourrais en ajouter un. –

Répondre

0

solution Horrible hacky qui donne la sortie désirée

  • Ajout des supports comme une trace de ligne séparée
  • Ajout des marqueurs de l'importance que les étiquettes sur le dessus de la barre cachés parcelles
  • Masquage de l'aide valeurs catégorielles via layout

Le problème w En utilisant les annotations, il n'y a aucun moyen de placer l'astérisque au bon endroit, trois boîtes à moustaches signifient trois valeurs x catégoriques. Les nouvelles valeurs x sont ajoutées via le graphique à barres.

enter image description here

library(plotly) 
p <- plot_ly() 
p <- add_bars(p, 
       x = c('setosa', 'setosa0', 'versicolor', 'versicolor0', 'virginica'), 
       y = c(3.5, 4.6, 2.5, 4.1, 3), 
       opacity=1, 
       showlegend = F, 
       marker=list(line = list(color='rgba(0,0,0,0'), 
          color = 'rgba(0,0,0,0'), 
       text = c('', '**', '', '*', ''), 
       textposition = 'outside', 
       legendgroup = "1" 
) 
p <- add_lines(p, 
       x = c('setosa', 'setosa', 'versicolor', 'versicolor'), 
       y = c(4.5, 4.6, 4.6, 4.5), 
       showlegend = F, 
       line = list(color = 'black'), 
       legendgroup = "1", 
       hoverinfo = 'none' 
) 

p <- add_lines(p, 
       x = c('versicolor', 'versicolor', 'virginica', 'virginica'), 
       y = c(4.0, 4.1, 4.1, 4.0), 
       showlegend = F, 
       line = list(color = 'black'), 
       legendgroup = "1", 
       hoverinfo = 'none' 
) 


p <- add_boxplot(p, data = iris, x = ~Species, y = ~Sepal.Width, 
       color = ~Species, boxpoints = "all", jitter = 0.3, pointpos = 0, 
       legendgroup="1") 


p <- layout(p, 
      xaxis = list(tickmode = 'array', 
         tickvals = c('setosa', 'sf', 'versicolor', 'vet', 'virginica'), 
         ticktext = c('setosa', '', 'versicolor', '', 'virginica')), 
      yaxis = list(range = c(0, 5)) 
      ) 
p 

Le graphique ci-dessous montre toutes les traces cachées utilisées pour obtenir le graphique de droite:

enter image description here

+0

Merci pour l'explication intelligente et détaillée! J'ai essayé de faire une fonction mais j'ai abandonné parce que la méthode est trop idiosyncratique. Je me demande comment il serait difficile d'ajouter cette fonctionnalité à Plotly? (Votre réponse a un problème de formatage avec le code.) –

+1

@KayleSawyer: J'espère que le Plotly travaille dessus. Merci d'avoir repéré l'erreur de formatage, incroyable ce que seule nouvelle ligne manquante peut faire;) –