2017-09-25 313 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正在开发它。感谢您发现格式错误,令人惊讶的是单行缺失的新行可以做什么;) –