如何将一组子图显示为电影?

时间:2019-05-14 12:44:30

标签: matlab animation heatmap subplot movie

我有30个热图子图。如何将这些子图显示为动画或电影(即每0.5秒一张热图)?

使用以下代码获得子图:

var = {'GeneX','GeneY','GeneZ'};
syms x y z S
alpha_x = 3.9e-2;
beta_x = 6.1;
z_x = 1.3e-5;
n_zx = 2.32;
alpha_y= 4.3e-2;
beta_y = 5.7;
x_y = 7.9e-4;
n_xy = n_zx;
delta_y = 1.05;
x_z = 12e-2;
n_xz = n_zx;
y_z = 11e-3;
n_yz = n_zx;
delta_z = 0.2;

ACDC_X = (alpha_x+beta_x*S)/(1+S+(z/z_x)^n_zx)-x;
ACDC_Y = (alpha_y+beta_y*S)/(1+S+(x/x_y)^n_xy)-delta_y*y;
ACDC_Z = 1/(1+(x/x_z)^n_xz+(y/y_z)^n_yz)-delta_z*z;
ACDCsys_div = [ ACDC_X, ACDC_Y, ACDC_Z ];

J = jacobian(ACDCsys_div,[x;y;z]);

Jsolnew(x,y,z,S) = [J];

%%Construction of the coordinates as a matrix

A = load('matlab.mat','unnamed');% import data from directory
a2 = struct2array(A);% coordinates of the equilibrium point.
numofGraphs = 80;
bx = length(a2(1,1:numofGraphs));

%% Construction of the heatmaps
figure;
hmapax = ceil(sqrt(bx));

for kk = 1:bx %bnx %All bin windows = iteration  
  JacACDCnew(:,:,kk) = Jsolnew(a2(1,kk),a2(2,kk),a2(3,kk),a2(4,kk));    
  ACDC_HmapJnew = double(JacACDCnew(:,:,kk));
  subplot(hmapax,hmapax,kk);%
  heatmap(var,var,ACDC_HmapJnew,'ColorScaling','log');
  S = a2(4,kk);
  title(['Jac','s=',num2str(S)]);
end

1 个答案:

答案 0 :(得分:1)

考虑以下示例:

function q56130816
% Load some data:
frames = imread('https://i.stack.imgur.com/03kN8.gif');
frames(frames > 1) = 2;

% Create subplots:
figure('WindowState','maximized'); subplot(2,4,1);
for ind1 = 1:8
  subplot(2,4,ind1);
  imagesc(frames(:,:,1,ind1)); axis image; axis off;
end
colormap([255 255 255; 188 188 188; 244 128 36]./255);

% Capture subplots as frames:
for ind1 = 8:-1:1
  frameHolder(ind1) = getframe( subplot(2, 4 ,ind1) );
end

% Play as movie:
hF = figure(); movie(hF, frameHolder, 20, 2);

哪个会转:

set of subplots

进入:

an animation

如您所见,在上面的示例中,我使用了getframe,但是也可以使用print捕获帧,如getframe docs中所述。帧也可以导出到视频文件,如here所述。

  

动画效果:从Johan Lindell's Codepen example截取了帧。