将拟合的回归线添加到R绘图小提琴

时间:2020-07-18 04:33:56

标签: r plotly lm violin-plot trendline

我在三个xy group中拥有三个integer的{​​{1}}数据:

age

我的目的是使用set.seed(1) df <- data.frame(value = c(rnorm(500,8,1),rnorm(600,6,1.5),rnorm(400,4,0.5),rnorm(500,2,2),rnorm(400,4,1),rnorm(600,7,0.5),rnorm(500,3,1),rnorm(500,3,1),rnorm(500,3,1)), age = c(rep(3,500),rep(8,600),rep(24,400),rep(3,500),rep(8,400),rep(24,600),rep(3,500),rep(8,500),rep(24,500)), group = c(rep("A",1500),rep("B",1500),rep("C",1500))) 的{​​{1}}将R绘制为plotly,如下所示:

value

enter image description here

并将violin拟合线添加到每个library(plotly) library(dplyr) df$age <- factor(df$age) plot_ly(x=df$group,y=df$value,type='violin',name=df$age,color=df$age,box=list(visible=T)) %>% layout(violinmode='group') 中,如果可能,还添加标准错误线。

因此,我首先将每个group的拟合线添加到lm中:

df

然后,我尝试只用一根group的小提琴加一条适合的线:

df$age <- as.integer(df$age)
df$fitted.value <- unlist(lapply(c("A","B","C"),function(g) lm(value ~ age,dplyr::filter(df,group == g)) %>% fitted.values()))

但这给出了group的长长列表:

df <- df %>% dplyr::filter(group == "A")
plot_ly(x=df$age,y=df$value,type='violin',color=df$age,box=list(visible=T)) %>%
  add_trace(x=df$age,y=df$fitted.value,mode="lines")

这个不想要的情节: enter image description here

有什么主意如何为所有warnings添加趋势线以及最佳地添加其标准误差线?

1 个答案:

答案 0 :(得分:2)

也许您可以使用此解决方案。首先,用一个新的df加上一个描述该组和 subgroup 的附加变量。

另一个DF建立group_by(group, moreA)的平均值。

使用ggplot进行绘制,并用来自第一个DF的数据geom_violin和来自第二个geom_point的{​​{1}}以及{{1 }}。 sum_resgeom_smooth的平均值进行拟合。

此后,将geom_smooth对象放入sum_res

不幸的是,在此reprex中没有出现ggplot这样的悬停行为。但它可以在RStudio中工作

ggplotly