I would like to do the same as this person:
Although, I want multiple axes/matrices in the same movie. I wrote the following code to achieve this:
for i = 1:l % Switch to first axes axes(syy_ax) imagesc(syy(:,:,i)) colorbar % Switch to second axes axes(wd_ax) imagesc(wd(:,:,i)) colorbar all_mov(i) = getframe; end
where syy_ax and wd_ax are axis handles, and syy and wd are 3D matrices. I realize how slow this is, but don't know an alternative. I tried specifying the axis in the plot function, but I don't think imagesc supports this. Could anyone suggest another way, please?
No products are associated with this question.
Well how slow is it? I would think it would be too fast, if anything, and you'd want to put in pauses so the person viewing it will see more than a blip as the movie goes whizzing by. Just how many frames per second is it doing? Or is it so slow we're talking seconds per frame?
Also I'm puzzled by you using imagesc() rather than imshow()? So, you're okay with that bizarre, arbitrary, default colormap that imagesc() applies? Just by the luck of the draw, that happens to be the best colormap for your images? I'm surprised - you're lucky. For me, almost always I don't want the default colormap that imagesc chooses.
Also, please see the FAQ: http://matlab.wikia.com/wiki/FAQ#How_can_I_create_a_movie_from_my_MATLAB_figures.3F You can use export_fig() to save your figure, with both axes on it, out to files that can then be made into frames of your movie.
Its slow, just under two frames per second. Here's a copy of the complete code.
fig1 = figure('color','white'); maximize(fig1)
syy_ax = axes; set(syy_ax,'Position',[0.05 0.05 0.4 0.95]) set(syy_ax,'XTick',,'YTick',,'XColor','w') hold(syy_ax) % wd_ax = axes; set(wd_ax,'Position',[0.55 0.05 0.4 0.95]) set(wd_ax,'XTick',,'YTick',,'XColor','w') hold(wd_ax)
max_syy = max_val(syy); max_wd = max_val(wd);
syylims = [0 ceil(max_syy)]; wdlims = [0 ceil(max_wd)];
s = size(syy); l = s(3); for i = 1:l axes(syy_ax) imagesc(syy(:,:,i),syylims) colorbar % axes(wd_ax) imagesc(wd(:,:,i),wdlims) colorbar
all_mov(i) = getframe; end
maximize and max_val are custom functions that only run once outside the loop. My matrices (syy and wd) are both size = [20 10 3200]. I am eventually going to need larger matrices and 3-5 more axes in the figure. I just thought because of how slow it is processing I am doing something terribly wrong.
In regards to the unattractive coloring, I don't mind so much right now. The resulting images are color contours of stress and work values. I plan on using interp2 to smooth it out and can change the colormap then if necessary. Any thoughts? Thanks so much!
I dont use colorbars often, so this was my initial idea without them:
syy = reshape(syy,[size(syy,1) size(syy,2) 1 size(syy,3)]); wd = reshape(wd,[size(wd,1) size(wd,2) 1 size(wd,3)]); DATA = [syy wd]; clear syy wd %data is now formatted (n-m-1-p) and concatenated MOV = immovie(DATA,jet(256)); %or some other map (< 256). close;
Note you may need to convert DATA to indexed format (i.e. integers). A quick fix for this would be real2rgb (from the FEX) then rgb2ind.
fps = 5; %framerate N = 1; %iterations movie(MOV,N,fps) %Plays movie MOV, N times at fps frames per second.