【问题标题】:Color of 3D trace mesh3d depending on variable value3D 轨迹 mesh3d 的颜色取决于变量值
【发布时间】:2022-10-25 21:41:40
【问题描述】:

我想在 r 上绘制一个 3D 散点图。生成的图像是单色的,而我希望它根据 z 值进行更改,例如 add_surface 的输出。

library(plotly)

library(datarium)

plot_ly() %>% 
  add_trace(x = marketing$youtube, y = marketing$facebook, z = marketing$sales, type = "mesh3d")

我想要的结果看起来像这样:

plot_ly(z = ~volcano) %>% add_surface()

再现性数据集:

marketing <- tribble(~youtube, ~facebook, ~sales,
                   270, 45, 26,
                   53, 47, 12,
                   20, 55, 11)

【问题讨论】:

  • 您需要一个矩阵,其中每个行名对应于1:length(marketing$youtube),每列对应于1:length(marketing$facebook),每个单元格的每个值对应于[youtube, facebook] 的相应销售值。然后你可以用 plotly 绘制你的矩阵,或者,用 youtube 和 facebook 修改 x 和 y 轴标签
  • 谢谢 Yacine,是的,我知道如果我的数据是一个矩阵,我可以使用 add_surface 代替,但我无法构建这个矩阵。你能帮我吗?
  • 是的,我可以帮忙,您能否启动dput(marketing) 的输出?或者至少是它的head()(在你的第一个问题消息中)
  • 数据集 <- tribble(~youtube, ~facebook, ~sales, 270, 45, 26, 53, 47, 12, 20, 55, 11)

标签: r plotly


【解决方案1】:

我创建了另一个可重现的示例,因为您的数据集有很多 x*y 关联的 NA 值。

### Import libraries
library(datarium)
library(plotly)
library(reshape2)
library(tibble)

### Data for reproducibility
# markerting dataset (youtube & facebook)
temp <- data.frame(youtube=1:10, 
                   facebook=1:10)
marketing <- expand.grid(temp)

# Adding sales (z) values
set.seed(1)
marketing$sales <- rnorm(100)

data.frame 的经典 plot_ly

### Classic plot_ly with data.frame arguments
plot_ly() %>% 
  add_trace(x = marketing$youtube, y = marketing$facebook, z = marketing$sales, type = "mesh3d")

矩阵的经典火山图

### Transforming data.frame into a matrix
marketingForPlotly <- t(acast(marketing, youtube~facebook, value.var="sales"))

### Volcano plot_ly with matrix arguments
plot_ly(z = ~marketingForPlotly) %>% add_surface()

希望能帮助到你

【讨论】:

  • 感谢您的示例,但是正如您所说,这种方法(使用 add_surface)不适用于矩阵转换导致大量 NA 的许多数据集。我想知道mesh3d是否可以根据变量z着色
猜你喜欢
  • 2012-04-15
  • 1970-01-01
  • 2018-09-12
  • 2015-09-28
  • 1970-01-01
  • 1970-01-01
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多