了解 Plotly 中的 3D 轨迹
Understanding 3D traces in Plotly
我正在使用 R 编程语言。我在 R 中制作了以下 3D 图:
# set seed for reproducibility
#load libraries
set.seed(123)
library(dplyr)
library(plotly)
#create data
n <- 3
my_grid <- expand.grid(i1 = 1:n, i2 = 1:n)
my_grid$final_value = with(my_grid, sin(i1) + cos(i2) )
#make plot
plot_ly() %>%
add_trace(data = my_grid, x=my_grid$i1, y=my_grid$i2, z=my_grid$final_value, type='mesh3d') %>%
add_surface(
z = my_grid %>% as.matrix(),
surfacecolor = my_grid,
cauto=F,
cmax=max(my_grid$final_value),
cmin=min(my_grid$final_value)
)
这会产生以下情节:
不出所料,这个图似乎非常合乎逻辑:它显示了一个 3D 表面,其中 x = i1,y = i2,z = final_value,图的颜色根据“final_value".
问题:如果我尝试向网格添加更多数据然后创建绘图:
#create more data
n <- 50
my_grid <- expand.grid(i1 = 1:n, i2 = 1:n)
my_grid$final_value = with(my_grid, sin(i1) + cos(i2) )
#make plot
plot_ly() %>%
add_trace(data = my_grid, x=my_grid$i1, y=my_grid$i2, z=my_grid$final_value, type='mesh3d') %>%
add_surface(
z = my_grid %>% as.matrix(),
surfacecolor = my_grid,
cauto=F,
cmax=max(my_grid$final_value),
cmin=min(my_grid$final_value)
)
不仅此图看起来“奇怪”,而且悬停文本中的“y 坐标”(1697) 显示的值在原始数据中不存在:
#display histogram of values
par(mfrow=c(1,3))
hist(my_grid$i1)
hist(my_grid$i2)
hist(my_grid$final_value)
问题: 在上面的直方图中,“1697”的值没有出现在任何变量中。那么怎么可能在plotly diagram中显示这么大的值呢?
谢谢
首先,您混淆了两种不同的跟踪类型:
一方面mesh3d and on the otherhand a surface追踪。两者都可以处理 x、y、z 坐标。
但是,您正在传递一个矩阵作为表面轨迹的 z 参数(没有 x 和 y 值)。因此,plotly 将矩阵的值考虑到 z 轴和矩阵 (2500 x 3) 的 y 和 x 维度。
还请 运行 schema()
并导航至:
对象 ► 轨迹 ► 表面 ► 属性
和
对象 ► 轨迹 ► mesh3d ► 属性
查看差异。
关于你的数据集,我想你想要这样的东西:
# set seed for reproducibility
#load libraries
set.seed(123)
library(dplyr)
library(plotly)
#create more data
n <- 50
my_grid <- expand.grid(i1 = 1:n, i2 = 1:n)
my_grid$final_value = with(my_grid, sin(i1) + cos(i2) )
#make plot
plot_ly(data = my_grid, x=~i1, y=~i2, z=~final_value, type='mesh3d', intensity = ~final_value, colors = colorRamp(c("blue", "grey", "red")))
我正在使用 R 编程语言。我在 R 中制作了以下 3D 图:
# set seed for reproducibility
#load libraries
set.seed(123)
library(dplyr)
library(plotly)
#create data
n <- 3
my_grid <- expand.grid(i1 = 1:n, i2 = 1:n)
my_grid$final_value = with(my_grid, sin(i1) + cos(i2) )
#make plot
plot_ly() %>%
add_trace(data = my_grid, x=my_grid$i1, y=my_grid$i2, z=my_grid$final_value, type='mesh3d') %>%
add_surface(
z = my_grid %>% as.matrix(),
surfacecolor = my_grid,
cauto=F,
cmax=max(my_grid$final_value),
cmin=min(my_grid$final_value)
)
这会产生以下情节:
不出所料,这个图似乎非常合乎逻辑:它显示了一个 3D 表面,其中 x = i1,y = i2,z = final_value,图的颜色根据“final_value".
问题:如果我尝试向网格添加更多数据然后创建绘图:
#create more data
n <- 50
my_grid <- expand.grid(i1 = 1:n, i2 = 1:n)
my_grid$final_value = with(my_grid, sin(i1) + cos(i2) )
#make plot
plot_ly() %>%
add_trace(data = my_grid, x=my_grid$i1, y=my_grid$i2, z=my_grid$final_value, type='mesh3d') %>%
add_surface(
z = my_grid %>% as.matrix(),
surfacecolor = my_grid,
cauto=F,
cmax=max(my_grid$final_value),
cmin=min(my_grid$final_value)
)
不仅此图看起来“奇怪”,而且悬停文本中的“y 坐标”(1697) 显示的值在原始数据中不存在:
#display histogram of values
par(mfrow=c(1,3))
hist(my_grid$i1)
hist(my_grid$i2)
hist(my_grid$final_value)
问题: 在上面的直方图中,“1697”的值没有出现在任何变量中。那么怎么可能在plotly diagram中显示这么大的值呢?
谢谢
首先,您混淆了两种不同的跟踪类型:
一方面mesh3d and on the otherhand a surface追踪。两者都可以处理 x、y、z 坐标。
但是,您正在传递一个矩阵作为表面轨迹的 z 参数(没有 x 和 y 值)。因此,plotly 将矩阵的值考虑到 z 轴和矩阵 (2500 x 3) 的 y 和 x 维度。
还请 运行 schema()
并导航至:
对象 ► 轨迹 ► 表面 ► 属性
和
对象 ► 轨迹 ► mesh3d ► 属性
查看差异。
关于你的数据集,我想你想要这样的东西:
# set seed for reproducibility
#load libraries
set.seed(123)
library(dplyr)
library(plotly)
#create more data
n <- 50
my_grid <- expand.grid(i1 = 1:n, i2 = 1:n)
my_grid$final_value = with(my_grid, sin(i1) + cos(i2) )
#make plot
plot_ly(data = my_grid, x=~i1, y=~i2, z=~final_value, type='mesh3d', intensity = ~final_value, colors = colorRamp(c("blue", "grey", "red")))