Сохраните график Matlab внутри переменной и используйте его повторно - PullRequest
5 голосов
/ 22 декабря 2011

Я написал приложение с графическим интерфейсом, которое после выполнения некоторых анализов большого набора данных предлагает возможность нескольких вариантов построения графика над данными (через всплывающее меню).

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

По сути, я хочу, чтобы график типа h = plot ([1 2 3]) хранился в переменной (без визуализации) и имел возможность визуализировать его по требованию в более позднее время.Я попытался присвоить дескриптор осей дескриптору графика, например,

h=plot([1 2 3]);
handles.plottingscreen_axe=h; 

... но он ничего не визуализирует.Чтобы упростить проблему, я пытался с тестовыми данными на терминале просто назначить один дескриптор рисунка другому, чтобы каким-то образом вывести визуализацию на другой рисунок, но ничего не работает, например,

h=plot([1 2 3]);
f=figure;
f=h;

.... но я не могу визуализировать график h для фигуры f.

Очевидно, что у меня нет опыта работы с графическими дескрипторами, поэтому я представляю, что для кого-то это просто.Я не смог найти никакой соответствующей документации по этому поводу, все предлагают просто создать функцию, которая воспроизводит все, но это именно то, чего я пытаюсь избежать.

Любая помощь приветствуется, и я прошу прощения вдело в том, что мой вопрос о чём-то слишком простом.

Ответы [ 3 ]

4 голосов
/ 22 декабря 2011
figure;
ah = axes;
hold(ah,'on');  
%Axes must have hold on or lh(1) will become invalid after lh(2) is created
lh(1) = plot(ah,[1 2 3],[1 2 3],'r','visible','off');
lh(2) = plot(ah,[1 2 3],[3 2 1],'b','visible','off');

Это включит линию 1 (красная)

set(lh(1),'visible','on');set(lh(2),'visible','off')

При этом включится строка 2 (синяя)

set(lh(1),'visible','off');set(lh(2),'visible','on')

В вашем графическом интерфейсе вам понадобится какой-то обратный вызов, чтобы отключить видимое состояние включения / выключения всех дескрипторов линии. Примечание. Если это очень большие наборы данных и у вас много строк, это может поглотить кучу памяти.

1 голос
/ 22 декабря 2011

Я думаю, что есть другое решение.

Вы можете предварительно рассчитать все графики, а затем просто установить для свойства 'Видимый' значение 'true' или 'false'

1 голос
/ 22 декабря 2011

Единственное решение, которое я мог бы придумать, - это сохранить цифры на жестком диске с помощью функции saveas, а затем вызвать их с загрузкой.

пример:

>> plot(1:4,5:8)
>> saveas(gcf,'test.fig')
>> close all
>> open('test.fig')
...