r - 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
但是来自这段代码的图表看起来完全不同:
有人可以帮我理解为什么这两个图不同,我该如何修改第二个图,使它看起来更像第一个图?
谢谢
解决方案
问题是,您将随机分布误认为是随机游走。您尝试复制的数据遵循随机游走。
为此,让我们创建一个生成随机游走数据的函数,例如,
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
这使,
推荐阅读
- python-3.x - 当测试必须应用于 text_content 而不是文本时,lxml.html 元素的 XPATH 表达式
- jquery - 验证字段,使其不接受空格和特殊字符
- php - 使用 PHP 调用 Coinmarketcap API
- latex - 乳胶:带有标题的警告
- linux - Bash 脚本在 SFTP 下载期间终止
- visual-studio-code - i18n ally 导出使用报告 vscode
- haskell - 为什么 Num 在 haskell 中可以被视为浮动?
- .net - StreamWriter 中途停止写入文本文件
- java - 存储过程的 Spring Boot 构造函数结果映射
- amazon-sagemaker - SageMaker Endpoint 的自定义 Locust 用户在达到时间限制后继续运行