Matlab рисует подзаголовки на основе "подоси" на указанных "осях"

Я кодирую некоторых сотрудников GUI, используя Matlab. И я хочу построить фигуру с подфигурами в одной указанной "оси", используя метод "подоси" (который можно скачать на Matlab FX subaxis.m).

Поначалу программа ведет себя совершенно правильно. Поскольку подфигуры обновляются одним нажатием кнопки. Тогда ошибка выскакивает. Я упрощаю проблему и пишу несколько кодов тестирования следующим образом:

% Specify an 'axes' in my GUI (here is an example of axes handle called 'ax')
ax = axes;
axes(ax); 
cla(ax, 'reset');

% Plot something using 'subaxis' with multiple subfigures 
x = 0:0.1:10;
spacing = 0.0;
subaxis(3,1,1,'Spacing',spacing);
plot(x,rand(size(x)),'k')
legend('D','Location','NorthWest')
ylim([-0.2 1])
set(gca, 'box','off')
set(gca,'XAxisLocation','top')

subaxis(2,'Spacing',spacing);
plot(x,rand(size(x)),'r')
legend('C','Location','NorthWest')
ylim([-0.2 1])
set(gca,'xtick',[],'box','off','xcolor','w')

subaxis(3,'Spacing',spacing);
plot(x,rand(size(x)),'b')
legend('B','Location','NorthWest')
set(gca, 'box','off')

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

axes(ax); 
cla(ax, 'reset');

x = 0:0.1:10;
spacing = 0.0;
subaxis(3,1,1,'Spacing',spacing);
plot(x,rand(size(x)),'k')
legend('D','Location','NorthWest')
ylim([-0.2 1])
set(gca, 'box','off')
set(gca,'XAxisLocation','top')

subaxis(2,'Spacing',spacing);
plot(x,rand(size(x)),'r')
legend('C','Location','NorthWest')
ylim([-0.2 1])
set(gca,'xtick',[],'box','off','xcolor','w')

subaxis(3,'Spacing',spacing);
plot(x,rand(size(x)),'b')
legend('B','Location','NorthWest')
set(gca, 'box','off')

Ошибка обнаруживается!!!

Error using axes
Invalid object handle

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

Любая помощь будет оценена. Спасибо большое. A.

1 ответ

Удалите эти две строки из верхней части вашего второго кода:

axes(ax); 
cla(ax, 'reset');

Теперь Matlab обновит график в текущем графике. Я проверил это в обычном (не GUI) файле Matlab, и он отлично работает. Если это не работает для вас, опубликуйте детали графического интерфейса, так как внутри могут быть некоторые проблемы.

Другие вопросы по тегам