我有几组的测量值,我想将它们绘制成小提琴图:
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
但是当我尝试使用以下方法获得与library(ggplot2)
ggplot(data = df, aes(x = group, y = val, color = group)) + geom_violin()
的{{1}}等效时:
R
“ C”组得到充气/人造小提琴的地方。
有人知道如何处理而不是使用plotly
吗?
答案 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)