强制小提琴图不要在零值上显示小提琴

时间:2019-03-05 21:25:35

标签: r plotly violin-plot

我有几组的测量值,我想将它们绘制成小提琴图:

set.seed(1)
df <- data.frame(val = c(runif(100,1,5),runif(100,1,5),rep(0,100)),
                 group = c(rep("A",100),rep("B",100),rep("C",100)))

使用R的{​​{1}}:

ggplot2

我得到: enter image description here

但是当我尝试使用以下方法获得与library(ggplot2) ggplot(data = df, aes(x = group, y = val, color = group)) + geom_violin() 的{​​{1}}等效时:

R

我得到: enter image description here

“ C”组得到充气/人造小提琴的地方。

有人知道如何处理而不是使用plotly吗?

1 个答案:

答案 0 :(得分:1)

我没有找到一种方法来解决plotly的行为(可能值得为此提供错误报告)。一种解决方法是过滤数据以仅在范围大于零的组上绘制小提琴图。如果还需要显示其他组的位置,则可以使用箱形图。

为了演示,我将library(data.table)用于过滤阶段。如果您愿意,可以使用dplyr或同一过程的基本版本:

setDT(df)[, toplot := diff(range(val)) > 0, group]

现在,我们可以根据是否应使用小提琴来绘制使用不同轨迹样式的组

plot_ly() %>%
  add_trace(data = df[(toplot)], x = ~group, y = ~val, split = ~group, 
            type = 'violin', box = list(visible = F), points = F) %>% 
  add_boxplot(data = df[(!toplot)], x = ~group, y = ~val, split = ~group)

enter image description here