通过组变量在绘图框图中着色抖动

时间:2016-12-25 18:03:47

标签: r plot plotly boxplot

我正在处理数据集,如下所示

Age = sample(10:99, 50, replace=T)
Level = sample( LETTERS[1:4], 50, replace=TRUE )
df = as.data.frame(cbind(Age, Level))

这是我的箱形图,其中包含变量Age

的抖动
library(plotly)
plot_ly(y = ~df$Age, type = "box", boxpoints = "all", jitter = 0.3,
        pointpos = -1.8)

enter image description here

我的问题是,如何根据水平变量对左侧的抖动点进行不同的着色?现在我的数据集中有四个级别,A,B,C,D。对应于A级的点应该是某种颜色,对应于B级的点应该是不同的颜色等等。

我试过

plot_ly(y = ~df$Age, type = "box", boxpoints = "all", jitter = 0.3, color = ~df$Level,pointpos = -1.8)

这给了我四个不同的箱图。我的目标只是一个箱形图,其中抖动根据等级变量着色。所以任何建议或帮助都非常感谢。

1 个答案:

答案 0 :(得分:3)

我不确定是否可能,但这里有另一种选择。也许您可以使用子图并将散点图和箱形图组合在一起。

首先为散点图创建一个虚拟x变量。

df$AgeX <- rnorm(50, 2, 0.3)

然后将两个图组合起来

p1 <- plot_ly(df, y = ~Age, x=~AgeX) %>%
  add_markers(name = ~"jitter", color=~Level) %>% layout(xaxis = b1y)
p2 <- plot_ly(df, y = ~Age) %>%
  add_boxplot(name = ~"boxplot") 
p <- subplot(p1, p2, shareY = TRUE, widths = c(0.2, 0.8), margin = 0)
p

enter image description here

您可以使用%>% hide_legend()删除图例,只需要使用边距和宽度来获得您真正想要的内容。