繁体   English   中英

Plotly:如何在箱线图上添加中线

[英]Plotly: How to add a median line on a box plot

我想在我的箱线图上添加一条中线的痕迹。

像这样

在此处输入图片说明

到目前为止,这是我的情节:

在此处输入图片说明

library(plotly)
p <- plot_ly(y = ~rnorm(50), type = "box") %>%
  add_trace(y = ~rnorm(50, 1))

p

只需从使用plot_ly(..., type='scatter', mode='lines', ...) ,然后使用add_boxplot(...' inherit=FALSE, ...)每个箱线图。 以下是对整个data.frame执行此操作的方法:

在此处输入图片说明

带有示例数据的完整代码:

library(dplyr)
library(plotly)

# data
df <- data.frame(iris) %>% select(-c('Species'))
medians <- apply(df,2,median)

# create common x-axis values for median line and boxplots
xVals <- seq(0, length(medians)-1, by=1)

# plotly median line setup
p <- plot_ly(x = xVals, y=medians, type='scatter', mode='lines', name='medians')

# add a trace per box plot
i <- 0
for(col in names(df)){
  p <- p %>% add_boxplot(y = df[[col]], inherit = FALSE, name = col)
  i <- i + 1
}

# manage layout
p <- p %>% layout(xaxis = list(range = c(min(xVals)-1, max(xVals)+1)))
p

另一种选择是使用 ggplot2 并将其转换为 plotly

library(ggplot2)
library(dplyr)
library(tidyr)
library(plotly)

p = iris %>% pivot_longer(-Species) %>%
 ggplot(aes(x=name,y=value,col=name)) + 
geom_boxplot() + stat_summary(inherit.aes = FALSE,
aes(x=name,y=value,group=1),fun.y=median,geom="line")
ggplotly(p)

代码的简要说明,我使用pivot_longertidyr将数据框转换为长格式,并首先制作了列名作为x变量和颜色的箱线图。

stat_summary部分,我再次指定了相同的 x 和 y 变量,这次省略了颜色,添加了group=1 ,这告诉stat_summary将整个数据框视为一组,并汇总每个 x 的所有 y 值-组,并通过它画一条线。

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM