Из документации scatter-marker-color проблема в том, что цвета указаны в неправильном формате. Обратите внимание на часть, выделенную жирным шрифтом ниже
Устанавливает шкалу цветов. Имеет эффект, только если в marker.line.color
установлен числовой массив. Цветовая шкала должна быть массивом, содержащим массивы , отображающие нормализованное значение в rgb, rgba, шестнадцатеричную, hsl, hsv или именованную цветовую строку. Как минимум, требуется сопоставление наименьшего (0) и наибольшего (1) значений. Например, [[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]
. Чтобы контролировать границы шкалы цветов в цветовом пространстве, используйте marker.line.cmin
и marker.line.cmax
. В качестве альтернативы, colorscale
может быть строкой названия палитры из следующего списка:
- Grays, YlGnBu, Greens, YlOrRd, Bluered, RdBu, Reds, Blues, Picni c, Rainbow, Portland, Jet, Hot, Blackbody, Earth, Electri c, Viridis, Cividis.
В R
массив создается с использованием array
или list
списков (или список векторов). Таким образом, мы можем получить полностью серую окраску двумя способами:
- Установка
colourscale = 'Greys'
- Переназначение вашего вектора в список векторов.
Используя данные mtcars
в качестве примера, это можно сделать как
data(mtcars)
library(plotly)
plot_ly(mtcars, x = ~hp, y = ~cyl, z = ~mpg,
type = 'scatter3d', mode = 'markers',
marker = list(color = ~ hp,
# Use either a named palette in the above list:
#colorscale = 'Greys',
# Or use a list of vector scales.
colorscale = list(c(0, rgb(55, 55, 55, max = 255)),
c(1, rgb(244, 244, 244, max = 255))),
showscale = TRUE))
Обратите внимание, что аргумент line
не нужен, если вы не хотите специально добавлять строки между точками, и что порядок из вашего списка имеет значение (например, c(1, ...)
всегда должно стоять после c(0, ...)
).