如何通过在R或MATLAB中一次添加每个点来设置三维散点图的动画
我有一组三维坐标。数据有52170行和4列。每行代表一个点。第一列是点索引编号,从1增加到52170。第二列到第四列分别是x、y和z轴的坐标。前10行如下:如何通过在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
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