R:了解两个图之间的差异

R:了解两个图之间的差异,r,3d,plotly,data-visualization,simulation,R,3d,Plotly,Data Visualization,Simulation,我正在使用R编程语言。我在这里学习本教程: 我复制并粘贴了以下代码,并成功创建了此绘图: 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',

我正在使用R编程语言。我在这里学习本教程:

我复制并粘贴了以下代码,并成功创建了此绘图:

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
作为一个学习练习,我尝试创建一个类似的数据集并运行相同的过程:

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
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)
数据=数据帧(x1,x2,x3,y1,y2,y3,z1,z2,z3)

图问题是,你把随机分布误认为是随机行走。您试图复制的数据是在随机游走之后生成的

为此,让我们做一个函数,生成一个随机游动数据,比如

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)

    }

random\u walk问题是,你把随机分布误认为是随机行走。您试图复制的数据是在随机游走之后生成的

为此,让我们做一个函数,生成一个随机游动数据,比如

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)

    }

random\u walk你可以用
cumsum(rnorm(1000,0,10))
对每个向量进行随机游走。事实上,现在我想起来了,你可以通过像
library(tidyverse)这样的操作来节省大量的输入;数据=粘贴0(代表(c(“x”、“y”、“z”),每个=3),1:3)%%>%set_names()%%>%map_df(~assign(.x,cumsum(rnorm(1000,0,10)))
感谢您的回答!你能解释一下为什么必须定义一个随机游走函数来绘制这个图吗?假设我有现实生活中的观察结果(例如,一家金融公司的每日收入),我想绘制这种图表。还有可能吗?非常感谢。无需绘制随机游走数据或任何特定类型的数据。只是根据数据的结构,绘图看起来会有所不同。在随机行走中,每个新点的位置都与以前的点相关,因此3D图形形成了“漂亮”的路径,每个路径都要可视化和理解。但是,
rnorm(1000,10,10)
生成的数据可以从一个点跳到下一个点的任何位置,在绘制绘图时,可以绕着点进行Z字形运动,并创建一个实心的点球。这在一维中可能更容易看到。尝试运行这些代码行几次(第一行只是为了将两个图绘制在一起):
par(mfrow=c(1,2));绘图(1:1000,rnorm(1000,0,10),type=“l”);绘图(1:1000,累积(rnorm(1000,0,10)),type=“l”)
。第一个图类似于您创建的随机数据。请注意这些点是如何从一个点跳到下一个点的(大约在0的2个标准偏差范围内),因为每个点完全独立于前一个点。第二个图是一个随机游走图,其中每个连续点都与前一个点接近。您可以使用
cumsum(rnorm(1000,0,10))
对每个向量进行随机游走。实际上,现在我想起来了,您可以通过执行类似
库(tidyverse)的操作来节省大量输入;数据=粘贴0(代表(c(“x”、“y”、“z”),每个=3),1:3)%%>%set_names()%%>%map_df(~assign(.x,cumsum(rnorm(1000,0,10)))
感谢您的回答!你能解释一下为什么必须定义一个随机游走函数来绘制这个图吗?假设我有现实生活中的观察结果(例如,一家金融公司的每日收入),我想绘制这种图表。还有可能吗?非常感谢。无需绘制随机游走数据或任何特定类型的数据。只是根据数据的结构,绘图看起来会有所不同。在随机行走中,每个新点的位置都与以前的点相关,因此3D图形形成了“漂亮”的路径,每个路径都要可视化和理解。但是,
rnorm(1000,10,10)
生成的数据可以从一个点跳到下一个点的任何位置,在绘制绘图时,可以绕着点进行Z字形运动,并创建一个实心的点球。这在一维中可能更容易看到。尝试运行这些代码行几次(第一行只是为了将两个图绘制在一起):
par(mfrow=c(1,2));绘图(1:1000,rnorm(1000,0,10),type=“l”);绘图(1:1000,累积(rnorm(1000,0,10)),type=“l”)
。第一个图类似于您创建的随机数据。请注意这些点是如何从一个点跳到下一个点的(大约在0的2个标准偏差范围内),因为每个点完全独立于前一个点。第二个图是一个随机游走图,其中每个连续点都接近前一个点。
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