从一组3D绘图创建视频

时间:2015-10-27 09:36:40

标签: matlab matlab-figure movie

我使用了一个名为ind2patch的函数来制作一个3D块,其中包含3个维度中的多个较小块。每个小块都有一个由颜色表示的值。典型的情节就像这样:

typical plot

现在我想用视频展示这些小块的值(即颜色)随时间的演变。我有不同时刻的数据,但我只知道如何通过阅读不同的文件在不同时间绘制图表。有没有办法将图表组合成视频或直接以视频形式绘制图形?

这是我的代码:

clear; close all; clc;
fig = figure(1); 
set (fig, 'Units', 'normalized', 'Position', [0,0,1,1]);
fig_color='w'; fig_colordef='white';
cMap=jet(256); 
faceAlpha1=1;
faceAlpha2=0.65;
edgeColor1='none';
edgeColor2='none';
NumBoxX=100;%box number in x direction
NumBoxY=100;%box number in y direction
NumBoxZ=5;%box number in z direction

fid = fopen('rho  20950.dat','r');
datacell = textscan(fid, '%f%f%f%f%f%f%f%f'); 
fclose(fid);

all_data = cell2mat(datacell); 

M=zeros(NumBoxX,NumBoxY,NumBoxZ); 

for i=1:NumBoxX            
    for j=1:NumBoxY        
        for k=1:NumBoxZ     
            num=k+NumBoxZ*(j-1)+NumBoxZ*NumBoxY*(i-1);
            M(i,j,k)=all_data(num,4); 
        end
    end
end

indPatch=1:numel(M);
[F,V,C]=ind2patch(indPatch,M,'v'); 

title('\sigma_{xy} in different cells','fontsize',20);
xlabel('y','fontsize',20);ylabel('x','fontsize',20); zlabel('z','fontsize',20); hold on;
set(get(gca,'xlabel'),'Position',[5 -50 30]); 
set(get(gca,'ylabel'),'Position',[5 50 -15]);
set(get(gca,'zlabel'),'Position',[64 190 -60]);
patch('Faces',F,'Vertices',V,'FaceColor','flat','CData',C,'EdgeColor','k','FaceAlpha',0.5);
axis equal; view(3); axis tight; axis vis3d; grid off;
colormap(cMap); caxis([min(M(:)) max(M(:))]);
cb = colorbar;                                     

set(get(cb,'title'),'string','Stress (MPa)','fontsize',20); 

lbpos = get(cb,'title'); % get the handle of the colorbar title
%set(lbpos,'Units','data');% change Units to data
%pos = get (lbpos,'position'); % get position of the colorbar title
set(lbpos,'units','normalized','position',[0,1.04]);

MyAxes=gca;
set(MyAxes,'Units','Normalized','position',[0.05,0.1,0.8,0.8]);
zoom(1.85); 

1 个答案:

答案 0 :(得分:4)

你可以这样做:

  1. 遍历每个补丁并抓取它的图像。
  2. 将图像插入矩阵
  3. 使用immovie
  4. 将图像矩阵转换为电影

    % // Create a matrix to hold your images A = zeros(row,col,numOfColours, numOfFrames);

    其中row是行数,col是一个图像中的列数。

    循环播放补丁并创建单个图像的视频。

    for n=1:numOfPatches
        imshow(patches(:,:,n)) % // display the image
        frame = getframe(gcf) % // get the current figure window
        im = frame2im(frame); % // convert it to an image
        A(:,:,1:3,n)  = im;      % // Insert the image into the matrix
    end
    

    您可以使用immovie将其转换为电影

    mov = immovie(RGB);
    movie(mov); % // play the movie