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 填充线下的主要内容,如果未能解决你的问题,请参考以下文章

R语言使用plotly绘制3D散点图实战

如何使用 plotly.graph_objects 绘制 3D 线?

在 Plotly 中将回归平面添加到 3d 散点图

了解 Plotly 中的 3D 轨迹

Plotly 绘制表面 3D 未显示

Plotly:如何更改 3D 曲面图的配色方案?