Plotly 3D 填充线下
Posted
技术标签:
【中文标题】Plotly 3D 填充线下【英文标题】:Plotly 3D filling under the line 【发布时间】:2018-05-30 15:08:41 【问题描述】:我想用 Plotly 为时间序列绘制一个 3D 线图,并在每条线下填充。我这里有一个示例代码。
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
使用此代码,我可以生成此图
没有填充的3d线图
我已经尝试过surfaceaxis=0
、1 或 2,但它们产生了错误的填充物。
3D-Plotly 填充错误
我想要的是填充 x 轴和线图之间的区域。
有一个带有其他值的示例 3D 图。
以 3D-Plot 为例,在曲线下填充其他值
有人可以建议一种方法吗?提前谢谢你。
编辑:它必须用包“plotly”创建
【问题讨论】:
plotly 包中不是 R 特定的错误。我们应该等待发布:github.com/plotly/plotly.py/issues/1206 github.com/plotly/plotly.js/issues/2352 【参考方案1】:更新:
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)
【讨论】:
【参考方案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)
【讨论】:
以上是关于Plotly 3D 填充线下的主要内容,如果未能解决你的问题,请参考以下文章