我的代码用于绘制3D散点图中的对象。有些物体在移动,所以我有一个颜色标尺来显示哪些物体比其他物体移动得更远。有没有办法我只能显示移动了一定距离的物体,而忽略那些没有移动的物体(即它们不会出现在地块上)?
这是我写的代码:
filename= 'testing.gif'
FigHandle = figure('Position', [50, -30, 1000, 800]);
for i=1:1001
s=1;
scatter3(am.data(:,3,i),am.data(:,4,i),am.data(:,5,i),s,am.data(:,6,i))
colorbar
caxis([0,2.863])
% axis([0 50 0 50 0 40]);
T(i)=getframe
end
答案 0 :(得分:1)
根据您的评论,您希望比较位移与初始位置。这些已经封装在数据的第6列中。如果没有超过阈值,您可以将这些坐标标记为NaN
,这样它们就不会显示在图上。换句话说,给定阈值thresh
(在您的评论中,这是2.863
),请执行以下操作:
filename= 'testing.gif'
FigHandle = figure('Position', [50, -30, 1000, 800]);
s = 1;
thresh = 2.863; %// Adjust if necessary
for i = 1:1001
currentCoords = am.data(:,3:6,i); %// Get current co-ordinates
%// Find distance between these co-ordinates and the initial ones
%// that don't pass the threshold and set to NaN
loc = currentCoords(:,4) <= thresh;
currentCoords(loc,:) = NaN;
%// Now plot the data
scatter3(currentCoords(:,1), currentCoords(:,2) currentCoords(:,3), ...
s, currentCoords(:,4));
colorbar;
caxis([0,2.863]);
axis([0 50 0 50 0 50]); %// Restrict axes to ensure they don't change
%// when plotting each frame
T(i)=getframe;
end
现在您已经抓取了每个散点图的帧,您希望将这些帧写入文件。使用VideoWriter
类可以很容易地完成。您只需设置视频编写器,它就会采用frame
结构。您已使用T
变量收集了这些内容。因此,您需要做的下一件事是设置视频的特征,例如您要使用的编解码器,帧速率等等。您可以创建一个像这样的视频编写器:
filename_video = 'out.mp4'; %// or 'out.avi';
codec_name = 'MPEG-4';
videoWriter = VideoWriter(filename_video, codec_name);
videoWriter.FrameRate = 20; %// Set frame rate here
videoWriter.Quality = 100; %// Set quality of each frame here
您需要阅读有关可以编写文件的MATLAB支持哪些编解码器的文档,但MPEG-4
非常受欢迎,它适用于Windows 7系统以及Mac OS X 10.7或更高版本。如果要保存在AVI
容器中,当然可以这样做,但请确保为此目的指定了正确的编解码器。上面代码的前两行指定了要保存的视频的输出文件名,以及要使用的编解码器。设置视频编写器后的下三行,如果使用有损编解码器,则设置帧速率和每帧的质量。对于无损,质量设置将不会做任何事情。您可以设置一大堆其他参数来自定义视频的外观,但我会留给您阅读有关此问题的文档。要使基本视频正常工作,以上就足够了。
接下来需要做的是打开文件进行写入,然后遍历T
中的每个帧并将帧写入此视频。完成后,关闭视频。换句话说,你接下来要这样做:
open(videoWriter); %// Open the video writer
for idx = 1 : numel(T) %// Write the frames to file
writeVideo(videoWriter, T(idx));
end
close(videoWriter); %// Close the video writer
如果一切顺利,您会看到保存.mp4
(或.avi
)文件的位置,您可以使用任何传统的视频查看软件查看该文件(例如{ {3}})。
我不能强调你需要打开文件进行写作,当你完成后,你关闭文件。在您关闭文件之前,不会保存任何视频。