Форум MATLAB и Simulink
При написании программы возникли проблемы, я задал несколько параметров и он построил мне нужный график, но теперь не ясно как зачистить этот график в GUE, чтобы он построил новый, с учетом изменения моих параметров. Пробовал вводить Clear в начале программы, перед циклом, но это не помогло. Помогите разобраться, жду ваших ответов!
Построение и удаление графиков через GUI
Добрый день, посетители форума!
Прошу Вашего совета и помощи.
Разрабатываю программу, в которой строю и сравниваю графики между собой (визуально).
Есть несколько функций, каждая по нажатию своей кнопки строит свой график в трёх axes.
http://pixs.ru/showimage/water. 468467.png
С построением графиков проблем не возникло, также как и с очисткой трёх axes.
Кнопка «Очистить всё» имеет код:
1 2 3 4 5 6 7
function btn_clear_Callback(hObject, eventdata, handles) axes(handles.axes1); cla('reset'); axes(handles.axes2); cla('reset'); axes(handles.axes3); cla('reset');
Сложность состоит в реализации удаления графиков какой-либо одной функции из всех трех axes.
Читал про присвоение указателя на figure, и потом использование его с delete, но так и не смог добиться рабочего результата. Говоря простыми словами — хочется под кнопкой построения графика функции сделать кнопку удаления графика функции. Чтобы можно было построить графики четырех функций, а потом так раз, удалить график четвертой функции, чтобы графики первой, второй и третьей остались.
Извиняюсь, если описал сумбурно, знакомство с матлабом начал совсем недавно.
Построение делается в полулогарифмическом масштабе semilogx.
Второй день уже бьюсь.
Исходные коды на всякий случай здесь
https://dl.dropboxusercontent. terOptic.m
https://dl.dropboxusercontent. rOptic.fig
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Построение графиков в Matlab в GUI, используя загруженный массив
Здравствуйте! Помогите, пожалуйста, написать программу, которая бы выводила на один график 64.
Построение сотни графиков через формулу
Всем доброго времени суток! Помогите, пожалуйста, с таким вопростом: представьте, что нужно.
Построение графиков функций через graphics.h
Доброго времени суток. Необходимо построить графики функции y=2/x. line(300,0,300,480);.
Построение нескольких графиков через Plot из функции с условием if
Мы должны построить функцию F на участке -4:0.5:10, которая должна описывать 3 разных функции на 3х.
Документация
Удалите графические объекты с delete функция. Передайте указатель на объект в качестве аргумента к delete . Например, удалите текущую систему координат и все объекты, содержавшиеся в осях, с оператором.
delete(gca)
Если вы хотите удалить несколько объектов, передайте массив указателей на delete . Например, если h1 , h2 , и h3 указатели на графические объекты, что вы хотите удалить, конкатенировать указатели в единый массив.
h = [h1,h2,h3]; delete(h)
Закрытие фигуры удаляет все объекты, содержавшиеся в фигуре. Например, создайте столбчатый график.
f = figure; y = rand(1,5); bar(y)
Фигура теперь содержит объекты панели и оси.
ax = f.Children; b = ax.Children;
close(f)
MATLAB ® удаляет каждый объект.
f = handle to deleted Figure
ax = handle to deleted Axes
b = handle to deleted Bar
Указатели на удаленные объекты
Когда вы удаляете графический объект, MATLAB не удаляет переменную, которая содержит указатель на объект. Однако переменная становится недопустимым указателем, потому что объект, который она не упоминала больше, существует.
Можно удалить графические объекты явным образом с помощью delete функционируйте или путем закрытия фигуры, которая содержит графические объекты. Например, создайте столбчатый график.
f = figure; y = rand(1,5); b = bar(y);
Закройте фигуру, содержащую столбчатый график.
close(f)
Переменные указателя все еще существуют после закрытия фигуры, но графические объекты больше не существуют.
whos
Name Size Bytes Class f 1x1 104 matlab.ui.Figure b 1x1 104 matlab.graphics.chart.primitive.Bar y 1x5 40 double
Использование isgraphics определить валидность указателя графического объекта.
isgraphics(b)
ans = 0
Вы не можете получить доступ к свойствам с недопустимой переменной указателя.
h.FaceColor
Invalid or deleted object.
Чтобы удалить переменную, используйте clear функция.
clear h
Смотрите также
Похожие темы
Документация MATLAB
Поддержка
- MATLAB Answers
- Помощь в установке
- Отчеты об ошибках
- Требования к продукту
- Загрузка программного обеспечения
© 1994-2021 The MathWorks, Inc.
- Условия использования
- Патенты
- Торговые марки
- Список благодарностей
Для просмотра документации необходимо авторизоваться на сайте
Войти
Памятка переводчика
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста — например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.
Работа с окном команд и редактором в MATLAB
MATLAB – популярный пакет программ для решения технических, математических, статистических задач, вычислений и моделирования. Так же называется и одноимённый язык программирования, который используется в этом пакете. Давайте рассмотрим порядок работы с окном команд и редактором среды MATLAB.
1 Работа с окном команд в среде MATLAB
В среде MATLAB есть несколько режимов работы. Самый простой – это ввод команд непосредственно в окно команд (Command Window).
Если оно не видно в интерфейсе программы, откроем его. Найти окно команд можно через меню Desktop Command Window.
Давайте для примера введём в это окно последовательно друг за другом команды
x = [1:100]; y = sqrt(x); plot(y);
и нажмём клавишу «Ввод» (Enter). Программа моментально создаст переменную X, создаст переменную Y и посчитает её значения по заданной функции, а затем построит её график.
Стрелками клавиатуры вверх и вниз в окне команд мы можем переключаться между введёнными командами, тут же изменять их, а по нажатию Enter отправлять среде MATLAB на исполнение. Стрелками влево и вправо можно перемещаться по введённой команде и редактировать её. Если в конце команды стоит точка с запятой, то результат будет посчитан, но не будет выведен в окно команд; в противном случае результат выполнения команды будет отображён тут же. По любой функции в среде MATLAB есть подробная встроенная справка. Например, чтобы получить справку по команде plot, выделите эту команду, нажмите на неё правой кнопкой мыши, и в открывшемся контекстном меню выберите пункт Help on Selection или нажмите клавишу F1.
Удобно? Безусловно. И главное – очень быстро. Все эти действия занимают несколько секунд.
Но что если нужна более сложная организация команд? Если нужно циклическое исполнение каких-то команд? Вводить команды вручную по одной, а потом долго искать их в истории может быть довольно утомительным делом.
2 Работа с редактором в среде MATLAB
Чтобы упростить жизнь учёному, инженеру или студенту, служит окно редактора (Editor). Давайте откроем окно редактора через меню Desktop Editor.
В окне редактора можно создавать новые переменные, строить графики, писать программы (скрипты), создавать компоненты для обмена с другими средами, создавать приложения с пользовательским интерфейсом (GUI), а также редактировать имеющиеся.
Нас в данный момент интересует написание программы, содержащей функции для повторного использования в будущем. Поэтому идём в меню File редактора и выбираем New M-File.
М-файлами в среде МАТЛАБ называются файлы, содержащие текст программ (скрипты) или определённые пользователем функции.
Давайте напишем в редакторе простую функцию draw_plot:
function draw_plot(x) % Задаём первую функцию: y = log(x); % Строим первый график: subplot(1, 2, 1), plot(x, y); % Задаём вторую функцию: y = sqrt(x); % Строим второй график: subplot(1, 2, 2), plot(x, y);
Мы добавили вторую функцию и будем выводить сразу два графика рядом друг с другом. Знаком процента обозначаются в среде MATLAB комментарии.
Не забудем сохранить программу. Стандартное расширение файла с программой МАТЛАБ – *.m. Теперь закройте редактор и окно с графиком, который мы построили ранее.
Переходим обратно в окно команд.
Можно очистить историю команд, чтобы лишняя информация нас не отвлекала. Для этого кликните правой кнопкой мыши на поле ввода команд и в открывшемся контекстном меню выберите пункт Clear Command Window.
Переменная X у нас осталась после предыдущего эксперимента, мы её не изменяли и не удаляли. Поэтому в окно команд можно сразу ввести:
draw_plot(x);
Вы увидите, что MATLAB прочитает нашу функцию из файла и выполнит её, нарисовав график.
Если MATLAB при выполнении программы выдаст сообщение, Undefined function or method ‘draw_plot’ for input arguments of type ‘double’. (т.е. вызывается неизвестная функция), нажмите в окне редактора зелёную кнопку со стрелкой (Run) или через меню редактора: Debug Run draw_plot.m. MATLAB сообщит, что директория, в которой находится файл с нашей программой (draw_plot.m), не является рабочей директорией. Нажмите в диалоговом окне кнопку Add to Path, чтобы пакет MATLAB добавил директорию к рабочему пути и мог использовать наш M-файл. После этого программа должна запуститься нормально.
Последнее изменениеПонедельник, 19 Декабрь 2016 12:34 Прочитано 30882 раз
- математика
- MATLAB
- программирование
Поблагодарить автора:
Поделиться
Похожие материалы (по тегу)
Последнее от aave
- Потокобезопасная наблюдаемая коллекция
- Преобразование массива в строку с помощью LINQ и лямбда-выражений
- Распаковка файла из ресурсов в директорию приложения
- Аналог оператора sizeOf() C# в VB.NET
- Сортировка ObservableCollection в WPF
Другие материалы в этой категории:
Оставить комментарий
Полезные советы
Как сделать привязку (binding) визуального элемента в WPF к нескольким свойствам? Для этого существует так назваемая множественная привязка. Вот пример разметки, который использует свойства FirstName и LastName некоторого объекта для вывода их посредством одного элемента TextBlock:
Формат вывода текста определяется атрибутом StringFormat. Обратите внимание на пустые фигурные скобки в начале определения формата строки. Они подсказывают парсеру XAML, что здесь используется привязка. Добиться подобного же результата можно также с помощью конвертера MultiValueConverter, который принимает несколько значений. Вот тот же пример, но с использованием конвертера. Сначала необходимо написать класс самого конвертера:
Public Class PersonNameMultiConverter Implements IMultiValueConverter Public Function Convert(values() As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IMultiValueConverter.Convert If (values.Length > 0) Then Dim firstName As String = values(0).ToString() Dim lastName As String = values(1).ToString() Return firstName & " " & lastName End If Return String.Empty End Function Public Function ConvertBack(value As Object, targetTypes() As Type, parameter As Object, culture As CultureInfo) As Object() Implements IMultiValueConverter.ConvertBack Throw New NotImplementedException() End Function End Class
Далее в начале XAML файла, в котором планируется использовать данный конвертер, в разделе ресурсов необходимо объявить соответствующий ресурс:
И далее создадим текстовое поле и добавим ему привязку:
Гораздо больше кода потребовалось, чем в первом варианте, верно? Однако преимуществом последнего метода является то, что конвертеру можно передавать сложные объекты и производить с ними какую-либо серьёзную обработку, что попросту невозможно при использовании первого варианта.