Цвет поверхности по переменной с плотно в R - PullRequest
0 голосов
/ 11 июня 2019

Используя данные volcano, я хотел бы закрасить поверхность вулкана другой переменной, которая представляет собой матрицу MatrixForColor того же размера, что и volcano, и она содержит только 1 и 2 (двоичный).Для MatrixForColor = 1 и MatrixForColor = 2 я хочу раскрасить синий и красный соответственно.

Вдохновленный из Форматирование графика persp3d , мне удалось добиться этого, используя пакет persp3d из rgl следующим образом:

library(rgl)    
color = c("blue", "red")
type  = MatrixForColor
persp3d(volcano, theta=50, phi=25, expand=0.75, col=color[type],
        ticktype="detailed", xlab="", ylab="", zlab="", axes=TRUE)

и получил эту цифру:

enter image description here

Я также пытался добиться этого с помощью plotly (адаптивно после отклика от заговор - разные цвета для разных поверхностей ) следующим образом:

library(plotly)
plot_ly(colors = c('blue', 'red')) %>%
  add_surface(z = volcano,
              opacity = 0.8,
              surfacecolor=MatrixForColor,
              cauto=F,
              cmax=1,
              cmin=0
  )

но я получаю эту цифру:

enter image description here

это не то, что я хочу, так как это не такокрашены в красный и синий цвета после MatrixForColor.

Кто-нибудь знает, как это сделать с plotly?

1 Ответ

1 голос
/ 11 июня 2019

Вам нужно будет установить правильные значения для cmin и cmax:

library(plotly)

MatrixForColor <- matrix(1, nrow = nrow(volcano), ncol = ncol(volcano))
MatrixForColor[, 1:30] <- 2

plot_ly(colors = c('blue', 'red')) %>%
  add_surface(z = volcano,
              opacity = 0.8,
              surfacecolor = MatrixForColor,
              cauto=F,
              cmax=max(MatrixForColor),
              cmin=min(MatrixForColor)
  )

enter image description here

...