Построение нескольких фигур в Matlab

Я работаю с некоторым кодом Matlab, который обрабатывает данные (в фильтре Калмана) и создает серию контурных графиков. Он работал на сервере RHEL 4 в Matlab 2006a в течение нескольких лет, но мой босс недавно попросил, чтобы все серверы были обновлены до RHEL 6 ... и, по крайней мере, до Matlab 2007a. Я отработал все исключения между этими версиями, но у меня все еще есть одна серьезная проблема.

Код, который создает и печатает разные контурные графики, работает для любого из трех графиков, созданных первым. Это выглядит так: введите описание изображения здесь

К сожалению, следующие два графика выглядят так:

введите описание изображения здесь

Три фигуры построены независимо в отдельных функциях, и я использую clf("reset"); до и после создания каждой фигуры. Каждая функция работает сама по себе, но когда все три построены, вторая и третья фигуры перепутаны. У кого-нибудь еще возникла такая проблема? Вот код, который создает одну из фигур.

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

person GPSmaster    schedule 02.02.2012    source источник
comment
Конечно, мы хотели бы увидеть код Oo   -  person tim    schedule 02.02.2012
comment
почему код выглядит так? Я просто добавил раздел кода и вставил код ....   -  person GPSmaster    schedule 02.02.2012


Ответы (2)


Старайтесь не использовать clf, который очистит всю вашу фигуру, а используйте figure между ними, чтобы открыть три независимых фигуры. Посмотри, получится :)

Изменить: это просто предположение, не видя вашего кода

person tim    schedule 02.02.2012
comment
Сейчас пробую. Видя, что это работает только в интерфейсе командной строки без пользовательского интерфейса, будет ли 'figure' пытаться создать новое окно и возвращать ошибку? - person GPSmaster; 02.02.2012
comment
figure просто открывает другое окно рисунка, и все команды построения графика будут нанесены на новый рисунок. Таким образом, после этого у вас будет 3 разных окна, вместо того, чтобы всегда очищать одну и ту же цифру, а не переносить в нее данные. - person tim; 03.02.2012
comment
К сожалению, это не сработало. На первом рисунке показаны только береговые линии, а на двух вторых полностью пусто: / Хмммм. Также как очистить окно фигуры после сохранения изображения? - person GPSmaster; 03.02.2012
comment
Нужно ли мне указывать, в каком окне строить график? - person GPSmaster; 03.02.2012
comment
Можно, но не обязательно. Если не указано, всегда наносится на current figure (т.е. последний открытый) - person tim; 03.02.2012
comment
Хорошо, значит, вторые два графика все еще создаются как пустые. Я использую фигуру в нужном месте? Трюмы в нужном месте? Я действительно в тупике. Большое спасибо за Вашу помощь! - person GPSmaster; 03.02.2012
comment
Я понял, что функция 'earth ()' указывает номер цифры ... это была проблема с самого начала! Большое спасибо за Вашу помощь! У меня сейчас другая проблема с границей рисунка, но я начну новую тему по этой проблеме и опубликую здесь ссылку. Спасибо еще раз! - person GPSmaster; 06.02.2012

Одно предположение может быть связано с кодом, который генерирует ваш окончательный файл PNG. Вторая фигура неправильно обрезана при преобразовании из JPG в PNG.

Сначала команда print фиксируется для использования того, что показано на рисунке 1. Итак, чтобы убедиться, что вы строите график с использованием рисунка 1, используйте команду figure(1), чтобы указать это. Или измените команду печати на чтение print(gcf ..., чтобы напечатать текущий рисунок.

Также обратите внимание, что вы можете сгенерировать файл PNG напрямую с помощью print, как в

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

и пропустите этап преобразования из PS в JPG в PNG.

Жесткое кодирование окна рисунка в print может объяснить, почему все работает независимо, но не вместе, если у вас есть несколько доступных окон рисунков. Просто догадка.

person Azim J    schedule 02.02.2012
comment
Большое спасибо за совет! Я не сделал в точности то, что ты сказал, но ты подтолкнул меня в правильном направлении. Я закончил тем, что определил номер каждой цифры вручную и, сделав это, я обнаружил, что функция 'earth ()' определяет номер фигуры ... изменила это, и теперь все работает намного более плавно. Спасибо! Да, и преобразования из ps- ›jpg-› png раздражают, но необходимы по другим причинам. Я все еще сталкиваюсь с некоторыми другими проблемами с этими сюжетами, но я начну новую тему по этому поводу и опубликую здесь ссылку. Спасибо еще раз. - person GPSmaster; 06.02.2012