如何控制绘图中箱线图点的颜色?

Sas*_*sha 4 r plotly

我想通过使用本机绘图功能来重现此 ggplot 图

ggplot(mtcars, aes(x="mpg", y=mpg))+
geom_boxplot()+geom_jitter(aes(color = mpg),width = 0.3,size=4)+
scale_color_gradient(low="blue", high="yellow", guide = 'none')
ggplotly()
Run Code Online (Sandbox Code Playgroud)

我正在尝试做这样的事情

    plot_ly(data=mtcars, y = ~mpg, 
               type = "box", boxpoints = "all", jitter = 0.3, 
               marker=list(color=~mpg, size=10),pointpos = 0)
Run Code Online (Sandbox Code Playgroud)

但我找不到控制点颜色的方法(color=~mpg 不执行任何操作)

我需要使用本机绘图而不是使用上面提到的“plotlyfied”ggplot 来实现它的原因是我需要与在本机绘图中实现的其他绘图保持风格一致性。

dww*_*dww 5

这有点黑客行为,但它有效:

  1. 使用单独的迹线绘制箱线图(无点)
  2. 添加 scatter 类型的第二条轨迹来绘制点
  3. 不幸的是,分散痕迹不接受抖动作为参数
  4. 这意味着我们需要在 x 轴上使用连续刻度并使用以下命令添加抖动rnorm
  5. 我们并不真的希望 x 轴看起来像连续的数字刻度,因此我们手动设置刻度标签以看起来像类别

像这样:

plot_ly(data=mtcars) %>%
  add_trace(y = ~mpg, x=1, type = "box", boxpoints = "none") %>%
  add_trace(type="scatter", mode="markers", 
            y=~mpg, x=rnorm(nrow(mtcars),1,0.05), marker=list(color = ~mpg, size=10))%>%
  layout(xaxis = list(tickmode="array", tickvals=c(1), ticktext=c("mtcars") )) 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

您可以扩展此方法以拥有多个这样的类别

plot_ly(data=mtcars) %>%
  add_trace(y = ~mpg, x=~gear, type = "box", boxpoints = "none") %>%
  add_trace(type="scatter", mode="markers", y=~mpg, 
            x = ~gear+rnorm(nrow(mtcars),0,0.1), 
            marker=list(color = ~mpg, size=10))%>%
  layout(xaxis = list(tickmode="array", tickvals=c(3,4,5), ticktext=c("3","4","5") )) 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

要控制标记颜色,您可以使用colorscale参数以及autocolorscale = FALSE

色标必须是一个数组,其中包含将标准化值映射到 rgb、rgba、hex、hsl、hsv 或命名颜色字符串的数组。至少需要最低 (0) 和最高 (1) 值的映射。

例如,

cs = list(list(0, rgb(0,0,1)), list(1, rgb(1,1,0)))
plot_ly(data=mtcars) %>%
  add_trace(y = ~mpg, x=1, type = "box", boxpoints = "none") %>%
  add_trace(type="scatter", mode="markers", 
            y=~mpg, x=rnorm(nrow(mtcars),1,0.05), 
            marker=list(color = ~mpg, autocolorscale=F, 
                        colorscale = cs, size = 10)) %>%
  layout(xaxis = list(tickmode="array", tickvals=c(1), ticktext=c("mtcars") )) 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述