Плотно 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")))