Плотно 3D заливка под линией

Я хотел бы построить 3D-линейный график с помощью 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

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

3-й линейный участок без заливки

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

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

3D-Plotly с неправильной заливкой

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

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

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

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

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

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

Редактировать: он должен быть создан с пакетом "плотно"

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)

Обновить:

Это должно работать для вас;

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)

Первое издание ответа:

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

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")))

Другие вопросы по тегам