Сюжетная 3D заливка под линией

Я хотел бы построить график 3D-Line с Plotly для временных рядов и заполнить каждую строку. У меня есть пример кода здесь.

library(plotly)

dens <- with(diamonds, tapply(price, INDEX = cut, density))
data <- data.frame(
  x = unlist(lapply(dens, "[[", "x")),
  y = unlist(lapply(dens, "[[", "y")),
  cut = rep(names(dens), each = length(dens[[1]]$x)))

p <- plot_ly(data, x = ~cut, y = ~x, z = ~y, type = 'scatter3d', mode = 'lines', color = ~cut)
p

с помощью этого кода я могу создать этот сюжет

Трехлинейный график без заливки

введите здесь описание изображения

Я уже пробовал surfaceaxis=0, 1 или 2, и они дали не те пломбы.

3D-сюжет с неправильным заполнением

введите здесь описание изображения

Я хочу заполнить области между осью x и линейными графиками.

есть пример 3D-графика с другими значениями.

В качестве примера 3D-график с заливкой под кривыми для других значений

введите здесь описание изображения

Может кто-нибудь предложить метод? Заранее спасибо.

Изменить: он должен быть создан с пакетом "plotly"


person plotly_user    schedule 16.12.2017    source источник
comment
Не специфичная для R ошибка в пакете plotly. Нам следует дождаться релиза: github.com/plotly/plotly.py/issues/ 1206   -  person M--    schedule 29.04.2019
comment
github.com/plotly/plotly.js/issues/2352   -  person M--    schedule 17.05.2019


Ответы (2)


Если вы согласны с псевдо-3D, вы можете сделать график плотности хребта. Я полагаю, что есть и сюжетная версия.

Отказ от ответственности: я являюсь автором пакета ggridges.

library(ggplot2)
library(ggridges)

ggplot(diamonds, aes(x = price, y = cut, fill = cut)) +
  geom_density_ridges(scale = 2, alpha = 0.7) +
  scale_fill_brewer(guide = guide_legend(reverse = TRUE)) +
  scale_y_discrete(expand = c(0.01, 0)) +
  theme_ridges(center = TRUE)

введите описание изображения здесь

person Claus Wilke    schedule 16.12.2017

Обновлять:

FWIW, это похоже на ошибку в plotly, которая при заполнении под кривой не учитывает порядок точек и не специфична для R.

Посмотрите на эту проблему на GitHub: https://github.com/plotly/plotly.py/issues/1206



Вы можете попробовать использовать latticeExtra::cloud. Конечно, интерактивный сюжет, как plotly, не даст.

rle_x <- rle(as.numeric(factor(data$cut)))$lengths

mcolor <- c("red","blue","green","purple", "yellow")    

data$mcolor<-rep(mcolor[seq_along(rle_x)],times = rle_x)
    
cloud(y~x+cut, data, panel.3d.cloud=panel.3dbars, 
      xbase=0.4, ybase=0.4, scales=list(arrows=FALSE, col=1), 
      par.settings = list(axis.line = list(col = "transparent")),
      col.facet = data$mcolor,
      col = data$mcolor)

введите здесь описание изображения

person M--    schedule 16.12.2017