首页 > 解决方案 > R:了解两个图之间的差异

问题描述

我正在使用 R 编程语言。我在这里关注本教程:https ://plotly.com/r/3d-line-plots/

我复制并粘贴了以下代码并成功创建了这个图:

library(plotly)

data <- read.csv('https://raw.githubusercontent.com/plotly/datasets/master/_3d-line-plot.csv')

fig <- plot_ly(data, x = ~x1, y = ~y1, z = ~z1, type = 'scatter3d', mode = 'lines',
        line = list(color = '#1f77b4', width = 1))
fig <- fig %>% add_trace(x = ~x2, y = ~y2, z = ~z2,
            line = list(color = 'rgb(44, 160, 44)', width = 1))
fig <- fig %>% add_trace(x = ~x3, y = ~y3, z = ~z3,
            line = list(color = 'bcbd22', width = 1))

fig

在此处输入图像描述

当您预览用于制作此 3D 图形的数据时,它看起来像这样:

> head(data)
           x1         y1        z1         x2         y2          z2
1 -0.01446036 -0.7007406 0.7132696 -0.5876227  0.2779929  -0.7598812
2  0.42072305 -4.2273350 3.1998977 -1.0323807 -0.4265484  -5.4042929
3  0.47195564 -3.3451935 2.0209429 -0.9554478 -3.3332747  -7.1266061
4 -1.59808508 -5.2404711 1.4572559  0.7305834 -2.8338860 -10.2886736
5 -1.16969290 -4.3295068 1.9317851  2.9333971 -1.0720493 -11.5012063
6  0.62887816 -1.7364294 3.2375436  4.2536182 -4.1168275 -13.0858438
          x3          y3         z3
1 -0.3666438  0.67189166 -0.6435324
2  1.4686770 -0.28710213  1.1944073
3  1.4915815  2.09425411  1.7574972
4  2.6986862 -0.04325033 -2.0862012
5  2.6568411  0.01913790 -3.1839338
6 -1.5095767 -2.69654294 -0.2990162
> str(data)
'data.frame':   1001 obs. of  9 variables:
 $ x1: num  -0.0145 0.4207 0.472 -1.5981 -1.1697 ...
 $ y1: num  -0.701 -4.227 -3.345 -5.24 -4.33 ...
 $ z1: num  0.713 3.2 2.021 1.457 1.932 ...
 $ x2: num  -0.588 -1.032 -0.955 0.731 2.933 ...
 $ y2: num  0.278 -0.427 -3.333 -2.834 -1.072 ...
 $ z2: num  -0.76 -5.4 -7.13 -10.29 -11.5 ...
 $ x3: num  -0.367 1.469 1.492 2.699 2.657 ...
 $ y3: num  0.6719 -0.2871 2.0943 -0.0433 0.0191 ...
 $ z3: num  -0.644 1.194 1.757 -2.086 -3.184 ...

作为一个学习练习,我尝试创建一个类似的数据集并运行相同的过程:

x1 = rnorm(1000,10,10)
x2 = rnorm(1000,10,10)
x3 = rnorm(1000,10,10)
y1 = rnorm(1000,10,10)
y2 = rnorm(1000,10,10)
y3 = rnorm(1000,10,10)
z1 = rnorm(1000,10,10)
z2 = rnorm(1000,10,10)
z3 = rnorm(1000,10,10)
data = data.frame(x1,x2,x3,y1,y2,y3,z1,z2,z3)


fig <- plot_ly(data, x = ~x1, y = ~y1, z = ~z1, type = 'scatter3d', mode = 'lines',
        line = list(color = '#1f77b4', width = 1))
fig <- fig %>% add_trace(x = ~x2, y = ~y2, z = ~z2,
            line = list(color = 'rgb(44, 160, 44)', width = 1))
fig <- fig %>% add_trace(x = ~x3, y = ~y3, z = ~z3,
            line = list(color = 'bcbd22', width = 1))

fig

但是来自这段代码的图表看起来完全不同:

在此处输入图像描述

有人可以帮我理解为什么这两个图不同,我该如何修改第二个图,使它看起来更像第一个图?

谢谢

标签: r3dplotlydata-visualizationsimulation

解决方案


问题是,您将随机分布误认为是随机游走。您尝试复制的数据遵循随机游走。

为此,让我们创建一个生成随机游走数据的函数,例如,

random_walk <- function(n,mean,sd) {

        out <- vector()
        initial <- rnorm(1,10,10)
        out[1] <- initial
        for(i in 2:n) {

        out[i] <- out[i-1] + rnorm(1,mean,sd)
                        }
        return(out)

    }

现在我们可以使用我们的函数创建整个数据集,

x1 <- random_walk(1000,0,1)
x2 <- random_walk(1000,0,1)
x3 <- random_walk(1000,0,1)

y1 <- random_walk(1000,0,1)
y2 <- random_walk(1000,0,1)
y3 <- random_walk(1000,0,1)

z1 <- random_walk(1000,0,1)
z2 <- random_walk(1000,0,1)
z3 <- random_walk(1000,0,1)


data_new = data.frame(x1,x2,x3,y1,y2,y3,z1,z2,z3)

最后,我们可以绘制它,

fig_new <- plot_ly(data_new, x = ~x1, y = ~y1, z = ~z1, type = 'scatter3d', mode = 'lines',
            line = list(color = '#1f77b4', width = 1))
fig_new <- fig_new %>% add_trace(x = ~x2, y = ~y2, z = ~z2,
            line = list(color = 'rgb(44, 160, 44)', width = 1))
fig_new <- fig_new %>% add_trace(x = ~x3, y = ~y3, z = ~z3,
            line = list(color = 'bcbd22', width = 1))

fig_new

这使,

在此处输入图像描述


推荐阅读