2017-09-25 39 views
2

什麼是R plot_ly命令將水平顯着性條(和星號)添加到繪圖圖? "How to draw the boxplot with significant level?""Put stars on ggplot barplots and boxplots - to indicate the level of significance (p-value)"的答案爲ggplot提供了很好的代碼。在R plot_ly中添加boxplot顯着性指標線和星號

首先,確定顯着性:

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 

下面是情節爲R代碼。我如何添加線條和星星?

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

如果你想通過註釋做切換了將無法正常工作(的意義當跡線消失時,指示器將停留)。任何可能性都將是非常黑客和一次性的解決方案,添加一個用作指標的跡線,添加註釋等。 –

+0

@MaximilianPeters,感謝您的評論。這聽起來像是你建議不要使用R Plotly來添加這些重要指標。我將它們添加到Inkscape或Illustrator中並保存爲SVG。 –

+0

如果您禁用跟蹤切換,並且您使用hacky解決方案很好,我可以添加一個。 –

回答

0

可怕哈克溶液得到所需的輸出

  • 添加括號作爲單獨的線跡
  • 添加意義標記作爲標記隱條曲線
  • 的頂部隱藏輔助分類值通過layout

問題w使用註釋是沒有辦法將星號放在正確的位置,三個盒形圖表示三個分類x值。新的x值是通過條形圖添加的。

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 

下圖顯示了用於獲取右側圖中所有隱藏的痕跡:

enter image description here

+0

感謝您的聰明和詳細的解釋!我嘗試了一個函數,但放棄了,因爲這個方法太特殊了。我想知道將此功能添加到Plotly有多難? (您的答案有代碼的格式問題。) –

+1

@KayleSawyer:我希望Plotly正在開發它。感謝您發現格式錯誤,令人驚訝的是單行缺失的新行可以做什麼;) –