Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过在R或MATLAB中一次添加每个点来设置三维散点图的动画_R_Matlab_Animation_Ggplot2_Gganimate - Fatal编程技术网

如何通过在R或MATLAB中一次添加每个点来设置三维散点图的动画

如何通过在R或MATLAB中一次添加每个点来设置三维散点图的动画,r,matlab,animation,ggplot2,gganimate,R,Matlab,Animation,Ggplot2,Gganimate,我有一组三维坐标。数据有52170行和4列。每行代表一个点。第一列是点索引编号,从1增加到52170。第二列到第四列分别是x、y和z轴的坐标。前10行如下: seq x y z 1 7.126616 -102.927567 19.692112 2 -10.546907 -143.824966 50.77417 3 7.189214 -107.792068 18.758278 4 7.148852 -101.784

我有一组三维坐标。数据有52170行和4列。每行代表一个点。第一列是点索引编号,从1增加到52170。第二列到第四列分别是x、y和z轴的坐标。前10行如下:

seq    x               y        z
1   7.126616    -102.927567 19.692112
2   -10.546907  -143.824966 50.77417
3   7.189214    -107.792068 18.758278
4   7.148852    -101.784027 19.905006
5   -14.65788   -146.294952 49.899158
6   -37.315742  -116.941185 12.316169
7   8.023512    -103.477882 19.081482
8   -14.641933  -145.100098 50.182739
9   -14.571636  -141.386322 50.547684
10  -15.691803  -145.66481  49.946281
我想创建一个3D散点图,其中每个点都使用R或MATLAB顺序添加到该图中。首先添加第一条线表示的点,然后添加第二条线表示的点,…,一直添加到最后一个点

此外,我希望控制添加点的速度

对于二维散点图,我可以使用以下代码:

 library(gganimate)
 x <- rnorm(50, 5, 1)
 y <- 7*x +rnorm(50, 4, 4)
 ind <- 1:50
 data <- data.frame(x, y, ind)

ggplot(data, aes(x, y)) + geom_point(aes(group = seq_along(x))) + transition_reveal(ind)
库(gganimate)
x
这是MATLAB的一个答案

在一般情况下,可以按照相同的方法设置绘图(或3d绘图、散点绘图、曲面或其他图形对象)的动画:

  • 执行第一个plot/plot3/scatter/surf,并检索其控制柄。第一个绘图可以包含第一组“初始”点,甚至可以是空的(使用
    NaN
    value创建具有不可见数据点的绘图)
  • 设置轴限制和所有其他将要固定的可视化选项(视点、相机角度、闪电…)。无需设置将在动画期间演化的选项
  • 在循环中,更新打印对象属性的最小集合:
    XData
    YData
    ZData
    如果是三维打印,
    CData
    如果打印对象有一些属性,并且您希望设置颜色动画)

下面的代码是上述方法的实现,适用于您的案例:

%%读取数据并在命名变量中放置坐标
csvfile='3D scatter plot.csv';
数据=csvread(csvfile,2);
%[可选],只是为了进一步简化符号
x=数据(:,2);
y=数据(:,3);
z=数据(:,4);
%%生成空的[plot3]对象
图形
%创建一个“轴”对象,并检索句柄“hax”
hax=轴;
%创建两个空的三维点打印:
%[hp_new]将只包含一个点(添加到图形中的新点)
%[hp_trail]将包含迄今为止显示的所有点
hp_trail=plot3(NaN,NaN,NaN,.b',Parent',hax,'MarkerSize',2);
等等
hp_new=plot3(NaN、NaN、NaN、'or'、'Parent',hax、'MarkerSize',6、'MarkerEdgeColor','r','MarkerFaceColor','g','LineWidth',2);
拖延
%%设置轴限制(以限制动画期间的“摆动”)
xl=[最小(x)最大(x)];
yl=[最小值(y)最大值(y)];
zl=[最小(z)最大(z)];
集合(hax,'XLim',xl,'YLim',yl,'ZLim',zl)
视图(145,72)%设置视图透视图(可选)
%%生动活泼
np=尺寸(数据,1);
对于ip=1:np
%更新“新点”图形对象
设置(hp_新的扩展数据,x(ip),'YData',y(ip),'ZData',z(ip))
%更新“点历史记录”图形对象
%我们将显示从索引1到当前索引ip的点
%(减1),因为当前索引点已在中显示
%另一个绘图对象
指标2显示=1:ip-1;
设置(hp_轨迹,。。。
“扩展数据”,x(表示2显示)。。。
“YData”,y(表示2显示)。。。
“ZData”,z(指示2显示))
%强制图形刷新
刷新屏幕
%设置“速度”
%实际上,最大速度是由您的硬件提供的,所以我们只需设置一个
%短暂的停顿,以防你想放慢速度
暂停(0.01)%
这是MATLAB的一个答案

在一般情况下,可以按照相同的方法设置绘图(或3d绘图、散点绘图、曲面或其他图形对象)的动画:

  • 执行第一个plot/plot3/scatter/surf,并检索其控制柄。第一个绘图可以包含第一组“初始”点,甚至可以是空的(使用
    NaN
    value创建具有不可见数据点的绘图)
  • 设置轴限制和所有其他将要固定的可视化选项(视点、相机角度、闪电…)。无需设置将在动画期间演化的选项
  • 在循环中,更新打印对象属性的最小集合:
    XData
    YData
    ZData
    如果是三维打印,
    CData
    如果打印对象有一些属性,并且您希望设置颜色动画)

下面的代码是上述方法的实现,适用于您的案例:

%%读取数据并在命名变量中放置坐标
csvfile='3D scatter plot.csv';
数据=csvread(csvfile,2);
%[可选],只是为了进一步简化符号
x=数据(:,2);
y=数据(:,3);
z=数据(:,4);
%%生成空的[plot3]对象
图形
%创建一个“轴”对象,并检索句柄“hax”
hax=轴;
%创建两个空的三维点打印:
%[hp_new]将只包含一个点(添加到图形中的新点)
%[hp_trail]将包含迄今为止显示的所有点
hp_trail=plot3(NaN,NaN,NaN,.b',Parent',hax,'MarkerSize',2);
等等
hp_new=plot3(NaN、NaN、NaN、'or'、'Parent',hax、'MarkerSize',6、'MarkerEdgeColor','r','MarkerFaceColor','g','LineWidth',2);
拖延
%%设置轴限制(以限制动画期间的“摆动”)
xl=[最小(x)最大(x)];
yl=[最小值(y)最大值(y)];
zl=[最小(z)最大(z)];
集合(hax,'XLim',xl,'YLim',yl,'ZLim',zl)
视图(145,72)%设置视图透视图(可选)
%%生动活泼
np=尺寸(数据,1);
对于ip=1:np
%更新“新点”图形对象
设置(hp_新的扩展数据,x(ip),'YData',y(ip),'ZData',z(ip))
%更新“点历史记录”图形对象
%我们将显示从索引1到当前索引ip的点
%(减1),因为当前索引点已在中显示
%另一个绘图对象
指标2显示=1:ip-1;
设置(hp_轨迹,。。。
“扩展数据”,x(表示2显示)。。。
“YData”,y(表示2显示)。。。
“ZData”,z(指示2显示))
%强制图形刷新
刷新屏幕
%设置“速度”
%实际上,最大速度是由您的硬件提供的,所以我们只需设置一个
%短暂停顿i