在 R plot_ly 中添加箱线图显着性指示线和星号
add boxplot significance indicator lines and asterisks in R plot_ly
什么是 R plot_ly 向绘图添加水平显着性条(和星号)的命令? and "Put stars on ggplot barplots and boxplots - to indicate the level of significance (p-value)" 的答案为 ggplot 提供了很好的代码。
首先,确定显着性:
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
提供所需输出的可怕的 hacky 解决方案
- 将括号添加为单独的线轨迹
- 将显着性标记添加为隐藏条形图顶部的标签
- 通过
layout
隐藏辅助分类值
使用注释的问题是无法将星号放在正确的位置,三个箱线图意味着三个分类 x 值。通过条形图添加新的 x 值。
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
下图显示了用于使图表正确的所有隐藏轨迹:
什么是 R plot_ly 向绘图添加水平显着性条(和星号)的命令?
首先,确定显着性:
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
提供所需输出的可怕的 hacky 解决方案
- 将括号添加为单独的线轨迹
- 将显着性标记添加为隐藏条形图顶部的标签
- 通过
layout
隐藏辅助分类值
使用注释的问题是无法将星号放在正确的位置,三个箱线图意味着三个分类 x 值。通过条形图添加新的 x 值。
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
下图显示了用于使图表正确的所有隐藏轨迹: