Почему этот объект осей не отображается правильно в MATLAB? - PullRequest
0 голосов
/ 11 ноября 2009

Я пишу два небольших приложения для психоакустического тестирования в MATLAB. Первый работает без проблем, а второй нет, и я просто не могу понять, почему.

Вот проблема: объект оси создан, но он пуст.

failed_axis http://dl.getdropbox.com/u/98854/help.png

Вот код, который создает эту фигуру и оси:

hFig = figure('dockcontrols','off','menubar','none', ...
              'name','choose the better sounding file', ...
      'numbertitle','off','position',[0,0,700,500], ...
      'resize','off','toolbar','none','units','normalized', ...
      'color',[.8,.8,.8]);
progress_idc = axes('position',[.1,.8,.8,.05],'box','on','parent',hFig,...
            'xlim',[-.03,1.03],'xtickmode','manual','xtick',[], ...
            'xticklabelmode','manual','xticklabel',[], ...
            'ylim',[-1,1],'ytickmode','manual','ytick',[], ...
            'yticklabelmode','manual','yticklabel',[], ...
            'nextplot','add');

А вот код, который отображает эти оси (функция регулярно вызывается таймером):

function replot(varargin) % this is a nested function
    cla;

    % plot start_indicator
    plot([x_start,x_start],[-.7,.7],'k','linewidth',2);
    fill([x_start,x_start-.02,x_start-.02],[0,-.7,.7],[0,0,0]);

    % plot stop_indicator
    plot([x_stop,x_stop],[-.7,.7],'k','linewidth',2);
    fill([x_stop,x_stop+.02,x_stop+.02],[0,-.7,.7],[0,0,0]);

    % plot play_position
    plot([x_play,x_play],[-1,1],'r');

    drawnow;
end

Вот как это выглядит, если работает:

Proper_axis http://dl.getdropbox.com/u/98854/help2.png

Ты хоть представляешь, что здесь происходит не так?

Ответы [ 2 ]

2 голосов
/ 11 ноября 2009

Я запустил код, который вы включили выше, и получил правильный вывод.

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

Одно из предложений, которое я хотел бы сделать, - это явно указать, какой объект родительских осей должен быть в ваших вызовах PLOT и FILL . Если вы добавите аргументы ...,'Parent',progress_idc); к своим вызовам печати, это гарантирует, что правильные оси всегда используются. У меня есть привычка всегда указывать объект родительских осей вместо того, чтобы предполагать, что текущие активные оси всегда будут теми, которые мне нужны.

1 голос
/ 12 ноября 2009

Я наконец нашел (тупой) ответ. Заголовок случайно имел ту же позицию, что и ось сюжета. Из-за некоторых деталей рендеринга Matlab он затеняет всю ось, за исключением самой правой и нижней линии пикселей, что делает ось «пустой».

О, какая глупая ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...