GPSmaster
GPSmaster

Reputation: 914

Plotting multiple figures in Matlab

I am working with some matlab code that processes data (in a Kalman Filter) and creates a series of contour plots. It has been running on a RHEL 4 server in matlab 2006a for a few years, but my boss recently requested that all servers be updated to RHEL 6...and at least matlab 2007a. I have worked out all the depreciations between these versions, but I am still having one major problem.

The code that creates and prints different contour plots is working for whichever of the three plots is created first. It looks like this: enter image description here

Unfortunately the next two plots look like this:

enter image description here

The three figures are plotted independently in separate functions and I use clf("reset"); before and after creating each figure. Each function works in and of itself, but when all three are plotted the second and third figures are all messed up. Has anyone else had this problem? Here is the code that creates one of the figures.

function Crd = TEC_plot(ITEC,RT,Param,Input,t,OutPath,RxExtAll,Time)
% Generate TEC plot 
    Function_for_Spline_Smoothing = [.05 .1 .05; .1 .4 .1; .05 .1 .05];
    ITEC = conv2(ITEC,Function_for_Spline_Smoothing,'same'); % add more of these lines to make contours smoother
    ITEC = conv2(ITEC,Function_for_Spline_Smoothing,'same'); % add more of these lines to make contours smoother
%   ITEC = conv2(ITEC,Function_for_Spline_Smoothing,'same'); % add more of these lines to make contours smoother
%   ITEC = conv2(ITEC,Function_for_Spline_Smoothing,'same'); % add more of these lines to make contours smoother

    earth('CAMERA',RT.Camera,'FIG',1);
    figure;
    warning off; hold on;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Changed 13 February 2007 to make plots prettier
    thinning_scale=2; % (1 to 10) increase this value to thin the density of the contour number labels
    [cscale,hgt]=m_contour(Param.Grid.LonAxis,Param.Grid.LatAxis,ITEC, ...
       round(RT.Levels(1:thinning_scale:end)/5)*5);
    hold on
    m_contourf(Param.Grid.LonAxis,Param.Grid.LatAxis,ITEC,RT.Levels);
    shading flat

    m_coast('line','color','y','LineWidth',1); 

    clabel(cscale,hgt,'labelspacing',72,'rotation',0,'fontsize',10 ...
                      ,'FontAngle','italic','color','w');
    axis([-.65 .6 .25 1.32])    % hardwiring axis length since the coastline runs off of the plot
% Changed 13 February 2007
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


% %-------------------- to include different station markers for different sources -------------------
    if ~isempty(Input.Data) % Plot receivers used in this inversion

        Crd=uniquerows(double(cat(1,RxExtAll)));
        RxType=round(Crd(:,4));
        Crd=cartsph(Crd)*180/pi;

        i1 = find( (Crd(:,3) > RT.Camera(3)).*(Crd(:,3) < RT.Camera(4)).*...
                  (Crd(:,2) > RT.Camera(1)).*(Crd(:,2) < RT.Camera(2)).*...
                  (RxType==1) );

        i2 = find( (Crd(:,3) > RT.Camera(3)).*(Crd(:,3) < RT.Camera(4)).*...
                  (Crd(:,2) > RT.Camera(1)).*(Crd(:,2) < RT.Camera(2)).*...
                  (RxType==2) );

        i3 = find( (Crd(:,3) > RT.Camera(3)).*(Crd(:,3) < RT.Camera(4)).*...
                  (Crd(:,2) > RT.Camera(1)).*(Crd(:,2) < RT.Camera(2)).*...
                  (RxType==3) );

        m_plot(Crd(i1,3),Crd(i1,2),'ro','markersize',5,'LineWidth',2);
%       m_plot(Crd(i1,3),Crd(i1,2),'r.','markersize',6,'LineWidth',2);
        m_plot(Crd(i2,3),Crd(i2,2),'r^','markersize',5,'LineWidth',2);
%       m_plot(Crd(i2,3),Crd(i2,2),'r.','markersize',6,'LineWidth',2);
        m_plot(Crd(i3,3),Crd(i3,2),'rp','markersize',5,'LineWidth',2);

        plot(-.6,.45,'ro','markersize',5,'LineWidth',2);text(-.55,.45,'CORS','Color','k')
        plot(-.6,.39,'r^','markersize',5,'LineWidth',2);text(-.55,.39,'GPS/Met','Color','k')
        plot(-.6,.33,'rp','markersize',5,'LineWidth',2);text(-.55,.33,'RTIGS','Color','k')

    end
% % ------------------------------------------------------------------------------- 

    hold off; warning on;axis off;

%   caxis([RT.Levels(1),(RT.Levels(length(RT.Levels)))/2]); colorbar('vert');  %Color bar from 0 to 50 --- for Low Solar Activity
    caxis([RT.Levels(1),(RT.Levels(length(RT.Levels)))]); colorbar('vert');  %Color bar from 0 to 100 --- for High Solar Activity

    title(sprintf('Total Electron Content Units x 10^1^6 m^-^2'),'Fontsize',11)
    if size(Crd,1)==0,
        title(sprintf('Total Electron Content Units x 10^1^6 m^-^2 Caution: No Data Available, IRI95 Only'),'Fontsize',10)
    end
    whitebg('w')
    text(-0.6,0.22,sprintf('%s from %s to %s UT           NOAA/SWPC Boulder, CO USA (op.ver. 1.0)',datestr(Time(t)+1E-8,1),datestr(Time(t)+1E-8,15),datestr(Time(t)+1E-7+15/1440,15)),'Fontsize',11)
    whitebg('w')

% This option print to a file
%        set(gcf, 'Position', [0,0,1950,1467]);
%        print('-f1','-dpng','-painters',filename([OutPath,'{YYYY}{MM}{DD}{HRMN}_TEC'],Time(t)));
%        system(['convert ', filename([OutPath,'{YYYY}{MM}{DD}{HRMN}_TEC.png'],Time(t)),' -scale 650x489 ',' -colors 256 ', filename([OutPath,'{YYYY}{MM}{DD}{HRMN}_TEC.png'],Time(t))]);


% Printing a postscript file because requirements for the automatic reboot
    print('-f1','-dpsc','-r1000','-painters', filename([OutPath,'{YYYY}{MM}{DD}{HRMN}_TEC'],Time(t)));

% Convert the postscript file to jpg using ghostscripts
    system(['gs -q -dBATCH -dNOPAUSE -r300 -sDEVICE=jpeg -sOutputFile=',filename([OutPath,'{YYYY}{MM}{DD}{HRMN}_TEC.jpg'],Time(t)),' ', filename([OutPath,'{YYYY}{MM}{DD}{HRMN}_TEC.ps'],Time(t))]);
% Converting from jpg to png and reducing the size of the figure.
    system(['convert ',filename([OutPath,'{YYYY}{MM}{DD}{HRMN}_TEC.jpg'],Time(t)),' -crop 2050x1675+325+775 ',' -scale 650x489 ',' -colors 256 ', filename([OutPath,'{YYYY}{MM}{DD}{HRMN}_TEC.png'],Time(t))]);
% Removing the jpg and ps files (ask Cliff how can we put both files in just one command)
    %system(['rm ',filename([OutPath,'*.jpg'],Time(t))]);
    %system(['rm ',filename([OutPath,'*.ps'],Time(t))]); 
end

Upvotes: 2

Views: 3042

Answers (2)

Azim J
Azim J

Reputation: 8290

One guess might be with the code that generates your final PNG file. Your second figure appears to be incorrectly cropped when converting from JPG to PNG.

First the print command is fixed to use whatever is in figure 1. So, to ensure that you are plotting using figure 1 use the command figure(1) to specify this. Alternatively, change the print command to to read print(gcf ... to print the current figure.

Also, note you could generate the PNG file directly with print as in

print(gcf,'-dpng','-r1000',filename(...))

and skip the conversion from PS to JPG to PNG step.

The hard-coding the figure window in the print might explain why things work independently but not together if the you have multiple figure windows available. Just a guess.

Upvotes: 1

tim
tim

Reputation: 10186

Try to not use clf which will clear your whole figure but use the figure in between to open three independant figures. See it it'll work :)

Edit: That's just guessing without actually seeing your code

Upvotes: 2

Related Questions