In MATLAB, how does one clear the last thing plotted to a figure?
In MATLAB, I plot many different vectors to a figure. Now, what I would like to do is simply undo the last vector that I plotted to that figure, without clearing everything else. How can this be accomplished? Can it be accomplished?
Now here, I would like to remove the plot z, which was the last plot I made.
![]()
3 Answers 3
If you know before plotting that you want to remove it again later, you can save the handle returned by plot and delete it afterwards.
(or maybe delete(items(1)) )
![]()
The answer that @groovingandi gives is the best way to generally do it. You can also use FINDALL to find the handle based on the properties of the object:
This searches the current axes for all line objects (plot produces line objects) that are colored black.
To do this on, say, figure 9, you need to find the axes for figure 9. Figure handles are simply the figure number, so:
-
The Overflow Blog
Linked
Related
Hot Network Questions
Subscribe to RSS
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.3.11.43304
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
Как в MATLAB очистить последнее, что было нанесено на фигуру?
В MATLAB я наношу на фигуру много разных векторов. Теперь то, что я хотел бы сделать, это просто отменить последний вектор, который я нанес на эту фигуру, не очищая все остальное. Как это можно сделать? Может ли это быть выполнено?
Теперь здесь я хотел бы удалить график z, который был последним графиком, который я сделал.
задан 10 июля ’12, 19:07

Используете ли вы «удержание» для построения нескольких векторов? — mola
И, пожалуйста, включите код. — mola
3 ответы
Если перед построением графика вы знаете, что хотите удалить его позже, вы можете сохранить дескриптор, возвращенный plot и delete это потом.
Создан 10 июля ’12, 19:07
А! Это приятно. Кажется, это работает для меня здесь. И последнее, я делаю ручку h1 здесь. Есть ли способ просто «получить» дескриптор от фигуры? номер что я знаю заранее? Например, предположим, что я сделал фигуру «цифра (9)». Теперь я хочу использовать эту технику только на рисунке (9). Как сказать ему использовать только цифру 9? — Ошалевший
@Learnaholic: Просто посмотрите на ответ @Ben, он показывает вам, как получить список ручек для определенных осей. Если вы построили график на рисунке (9), вы можете установить текущий рисунок на рисунок (9), выполнив figure(9) снова, затем используйте gca or gcf чтобы получить список дочерних дескрипторов. — Groovingandi
Как удалить одну точку на фигуре Matlab? желательно по GUI

Мои точки данных слишком плотные, и я хотел бы скрыть или удалить некоторые из них, чтобы сделать диаграмму более четкой. Как я могу сделать это без пересчета данных и повторного построения фигуры (что отнимает много времени)?
3 ответа
Самый простой способ:
- Нажмите кнопку «Кисть / Выбрать данные»
- Выберите очки
- Щелчок правой кнопкой мыши
- Выберите «Удалить»
Таким образом, непрерывность линии сохраняется, и кодирование не требуется.
При построении несвязанных точек вы можете заменить XData или YData (или оба) из точек, которые вам не нужны, на NaN . Для диаграмм с линиями это не работает (это создает разрывы), и соответствующие точки должны быть удалены из векторов данных. Я продемонстрирую, как это делается в следующем примере:
В целях демонстрации я предполагаю, что вы работаете с файлом .fig , и у вас нет дескрипторов для графиков / линий.
Пусть это будет код, используемый для построения фигуры:
Затем, предполагая, что вы загрузили рисунок и это текущий рисунок ( gcf ), вы можете сделать:
Вы можете использовать любую логику, которую хотите вычислить ind2rem , или даже указать ее вручную.
Выше был протестирован на R2017a.
Наиболее удобный способ графического интерфейса — это выбор точки с помощью «Курсора данных» , чтобы увидеть его значения, а затем замените свойства XData и YData этой точки на NaN, на кнопку «Дополнительные свойства».
Кроме того, вы можете измените функцию обратного вызова «Курсора данных», чтобы сделать это за вас (вы можете увидеть здесь другой пример).
Проверьте, являются ли точки данных на вашем графике «Разброс» объект, для этого введите get(gca,’children’) в командном окне, пока выбрана фигура, и посмотрите, будет ли первая строка вывода:
Scatter with properties:
если это так, используйте вариант 1 ниже. Если нет, нанесите точки данных и линии как разные объекты или используйте вариант 2 ниже.
После создания рисунка щелкните правой кнопкой мыши одну из подсказок на рисунке и выберите Изменить функцию обновления текста .
Опция 1
В открывшемся редакторе добавьте следующие строки в конце:
Дайте функции какое-нибудь значимое имя и сохраните ее как новый файл .m.
Вот простой пример того, что вы должны получить:
Теперь снова щелкните правой кнопкой мыши одну из подсказок на рисунке и выберите Выбрать функцию обновления текста . В открывшемся браузере выберите функцию, которую вы только что сохранили (здесь это DeletePoint.m ).
Теперь каждый щелчок по точке с помощью инструмента «Курсор данных» будет удалять ее. Однако имейте в виду, что единственный способ восстановить точки — это заново создать фигуру, так как данные удаляются из фигуры (но не из переменных в рабочем пространстве, которые ее содержат).
Вариант 2
В открывшемся редакторе добавьте следующие строки в конце:
Все остальное как в варианте 1 . Разница здесь в том, что последняя функция снова рисует все линии с теми же свойствами, но без выбранной точки. Обычно, каждый раз, когда вы удаляете точку, курсор данных автоматически перемещается к следующей точке (и именно поэтому мы не можем просто удалить точки, это инициирует цикл, который удаляет всю линию). Здесь мы удаляем всю строку, поэтому Matlab выдает предупреждение при каждом удалении:
Предупреждение: ошибка при выполнении обратного вызова слушателя для события MarkedClean. Источник был удален
Чтобы избежать этого, я добавил warning(‘off’) и конец функции, но вы должны снова включить их, как только закончите с инструментом курсора данных.
Тема 3.2.Построение графиков и визуализация результатов вычислений в MatLab.
СистемаMatLabможет создавать как плоские графики, так и трехмерные сетчатые поверхности, а также движущиеся графики, или анимацию.
В научных и технических задачах основными и наиболее часто употребительными являются графики, которые представляют собой кривые, описывающие те или иные численные данные. MatLabрасполагает набором команд высокого уровня, которые используются для построения таких кривых и управления ими. Это такие команды, как plot, title, axis, text, hist, contourи ряд других. Кроме того, строить графики, управлять ими и редактировать их можно с помощью инструментальных панелей графических окон. Можно также использовать комбинацию обоих подходов. Например, можно использовать команды для создания графиков, а затем модифицировать их.
Для того чтобы построить график функции y=f(x), достаточно тем или иным способом сформировать два вектора одинаковой размерности — вектор значений аргументов x и вектор соответствующих значений функции у, а затем выполнить команду plot. Команда plotоткрывает графическое окно и отображает в нем зависимость y(x) в линейных осях, при условии что xи yявляются векторами одинаковой длины.
Рассмотрим пример построения графика синуса на интервале от -4 до 4.
Пример 3.2-1
В результате выполнения команд открывается графическое окно (рис. 3.2-1).
В вышеописанном примере вектор x является набором равноотстоящих точек с шагом 0.01, а y— вектор со значениями функции синуса в этих точках. Для отображения графика системаMatLab открывает отдельное окно с именем Figure 1. Переход между окнами, то есть возврат в окно MatLabили переход от одного графического окна к другому графическому окну осуществляется в соответствии с правилами среды: с помощью команд основного меню; комбинации <Alt+Tab>или с помощью мыши.

Рис. 3.2-1. Графическое окно с графиком функции y=sin(x)
В вышеописанном примере вектор xявляется набором равноотстоящих точек с шагом 0.01, а y— вектор со значениями функции синуса в этих точках. Для отображения графика системаMatLab открывает отдельное окно с именем Figure 1. Переход между окнами, то есть возврат в окно MatLabили переход от одного графического окна к другому графическому окну осуществляется в соответствии с правилами среды: с помощью команд основного меню; комбинации <Alt+Tab>или с помощью мыши.
Рассмотрим еще один пример построения графика y=e − x2 на интервале [-1.5 ;1.5].
Пример 3.2-2

Рис. 3.2-2. График функции y=e − x2
Необходимо обратить внимание на то, что точка перед знаком возведения в степень (^)обязательна, поскольку мы хотим, чтобы возведение в степень выполнялось поэлементно.
В системеMatLab можно также построить кривые, заданные параметрически.
Пример 3.2—3

Рис. 3.2-3. График функции, заданный параметрически
Аргументами функции plot()могут быть различные комбинации векторов и матриц:
если y— вектор, то будет нарисована кривая yкак функция номера элемента в y;
если y— матрица, то будет сгенерирован набор кривых, каждая из которых представляет собой зависимость столбца матрицы от номера строки.
если x и y — вектора одинаковой длины и размерности (оба строки или оба столбцы), то будет нарисована кривая y от x;
если x — вектор, а y — матрица, строки или столбцы yбудут нарисованы в зависимости от x; если столбец матрицы y имеет ту же длину, что и вектор x, то будет построен набор кривых, представляющий зависимость каждого из столбцов от x; если строка матрицы y имеет ту же длину, что и вектор x, то будет построен набор кривых, представляющий зависимость каждой из строк от x; если число строк и столбцов y одинаково, то строятся столбцы от x;
если x -матрица, а y -вектор, то будет построено несколько кривых, представляющих зависимость y от строк или столбцов матрицы x по правилу, описанному в предыдущем пункте;
если x и y -матрицы одинаковой размерности, то будет построен набор кривых, представляющих столбцы y от столбцов x.
При вышеописанных способах вызова функции plot()различные кривые на одном и том же графике рисуются разным цветом. Перебор цветов выполняется автоматически, а при использовании соответствующих аргументов у команды plot()эти цвета можно выбирать.
В общем случае, число аргументов у команды plot()не ограничивается двумя, то есть plot(x1,y1,x2,y2. ), причем правила, описанные выше, относятся к каждой паре аргументов.
С помощью соответствующих команд любой график в графическом окне MatLab может быть снабжен заголовком, именами осей, и на сам график может быть помещен дополнительный текст с помощью команд вывода текста. На график можно так же поместить сетку. Аргументами всех этих команд является текстовая строка. Например, команда title(‘График наилучшего приближения’) добавит к вашему графику заголовок. Команда gtext(‘Пятно’)позволяет с помощью мыши или клавишного курсора разместить на рисунке индикаторный крест, в месте размещения которого и будет помещен текст после нажатия произвольной клавиши. При необходимости сделать подписи осей используются команды Xlabel(‘ПодписьX’), Ylabel(‘ПодписьY’).
Для изображения нескольких кривых на одном рисунке существуют два способа, которые иллюстрируются следующими примерами.
Пример 3.2-4а
Пример 3.2-4b
Эти два примера полностью эквивалентны, а результат изображен на рис. 3.2-4. Отметим, что во втором примере формируется матрица Y, содержащая значения изображаемых функций в виде столбцов.

Рис 3.2-4. Графикифункцийy1=sin(x); y2=sin(2*x);y3=sin(4*x);
Другим способом такого отображения нескольких функции на одних осях является использование команды holdon, которая замораживает текущий график, так что последующие кривые размещаются на этом же графике. При этом масштаб и разметка осей изменяются, если новая кривая не вписывается в нарисованные оси. Команда holdoffприводит к тому, что любой последующий вызов команды plotсоздает новый рисунок в этом же окне, то есть предыдущий график стирается.
При выводе графика можно сменить принятый по умолчанию тип точек, с помощью которых рисуется данный график.
Пример 3.2-5
Результат работы программы приведет к тому, что первый график будет нарисован пунктиром, второй — точками, а третий — символами + (рис. 3.2-12). В общем случае каждая линия на графике определяется триплетом x,y,s, где xи y— это вектора с координатами функции, а s– строковая переменная, образованная любыми комбинациями из каких-нибудь приведенных ниже столбцов таблицы 3.2-5.

Рис. 3.2-5. Пример графика Sin(x), Sin(2x) и Sin(3x)
. Таблица 3.2-1
По умолчанию масштаб осей выбирается автоматически, таким образом, чтобы график целиком поместился в окне, причем с разумным запасом. Кроме того, оси автоматически размечаются, и по умолчанию выбирается, декартова система координат. Причем началом координат считается точка с координатами xmin, ymin, расположенная в левом нижнем углу. Эта автоматическая установка может быть изменена с помощью команды axis. Примеры использования этой команды применительно к плоским графикам описаны в табл. 2.5-9.
При необходимости вывести в одном графическом окне несколько графиков, то есть разбить графическое окно на несколько областей — подобластей, в каждой из которых отображаются свои оси, используется команда subplot(m,n,p). Значение mуказывает, на сколько областей окно разбивается по вертикали, n– по горизонтали, а p-порядковый номер подокна при счете слева направо и сверху вниз. Команда subplotиспользуется как для создания нового подокна, так и для перехода от одного подокна к другому. После вызова этой команды plotпостроит график или графики в соответствующем подокне. Например, последовательность команд Примера 3.2-6 строит два рисунка в верхней и нижней части экрана. В верхней части строится график sin(x), а в нижней части экрана — зависимость log(abs(sin(x))). Как видно из приведенной выше последовательности команд, при x=0вычисляется log(0). При этом в командном окне появляется предупреждение, а график строится в точках −1 ≤ x ≤ 0.1и 0.1 ≤ x ≤ 1.
Таблица 3.2-2
axis([xminxmaxyminymax])
Устанавливает пределы изменения по xи yкоординатам соответственно. Если максимальный предел по любой координате установить равным Inf, то соответствующий предел будет определяться автоматически. Аналогичное справедливо для нижнего предела, если его установить равным —Inf.
Делает область вывода квадратной.
Делает единицы измерения по оси xи y одинаковыми.
Восстанавливает режим по умолчанию.
Помещает начало координат в левый верхний угол. Направление оси x— слева направо, направление оси y— сверху вниз.
Восстанавливает стандартную декартову систему координат с началом в левом нижнем углу и направлением оси yснизу вверх.
Устанавливает пределы по осям точно равными максимальным и минимальным значениям соответствующих переменных.
Делает невидимыми оси, метки осей и надписи
Включает оси и их разметку.
Пример 3.2-6
>> subplot(2, 1, 1), plot(x, y1);
>> subplot(2, 1, 2), plot(x,y2);

Рис.3.2-6. Две подобласти в одном графическом окне
Полярными координатами(ρ,θ)точки P (рис. 3.2-7) называются длина ρ радиус — вектора, проведенного из начала координат в точку P, и угол θ, образованный между осью х и этим вектором. Угол отсчитывается от положительного направления оси х к радиус-вектору против часовой стрелки.
Довольно многие математические кривые с целью устранения неоднозначности принято задавать в полярной системе координат.
Для построения графиков функций, заданных в полярной системе координат, вместо функции plotиспользуется функция polar:
Пример 3.2-7
Результат построения кардиоиды дляа=5 приведен на рис. 3.2-7.

Рис.3.2-7.График кардиоиды в полярной системе координат
Единицы измерения значений ординат и абсцисс далеко не всегда соответствуют друг другу, и для создания более обозримого графика вдоль одной или обеих координатных осей приходится выбирать логарифмический масштаб. Для построения таких графиков используются функции loglog(логарифмический масштаб по обеим осям), semilogx (логарифмический масштаб по оси x), semilogy (логарифмический масштаб по оси у).
Пример 3.2-7
Результат построения графика в логарифмическом масштабе приведен на рис.3.2-8.

Рис. 3.2-8.График с логарифмическим масштабом по оси у
Довольно интересной модификацией функции plot является функция fplot, которая строит график функции y=f(x)без предварительного вычисления векторов (x1,x2,…) и (y1,y2. ). Базовый формат вызова этой функции включает два аргумента:
fplot (@name_fun, [limits])
fplot (‘ name_fun’, [limits])
В первом случае первым аргументом является указатель на функцию с именем name_fun, во втором случае — строка с именем обрабатываемой функции. Аргумент limitsможет быть представлен либо двухкомпонентным вектором [xminхmах], либо четырехкомпонентным вектором [xminxmaxyminymax]. Укороченный вариант задает пределы изменения аргумента х, расширенный — дополнительно представляет пределы изменения функции. Например:
fplot(@sin, [0 2*pi])
fplot(‘sin’, [0 2*pi])
По сравнению с plot функция fplotберет на себя вычисление таблицы значения функции, проявляя при этом некоторый интеллект — в местах резкого изменения функции значения аргумента х выбираются с более мелким шагом. Функция fplot гарантирует, что относительное уклонение воспроизводимой функции отличается от ее идеального графика не более чем на 0,2%. Если вам нужен более точный или более грубый график, то после двух обязательных аргументов в функции fplot можно задать желаемую относительную погрешность — число, меньшее 1:
fplot(@sin, [0 2*pi], 0.05)
В этом случае гарантировано построение графика, отличающегося от идеальной кривой не более чем на 5%. По умолчанию точность равна2・10 −3 , и она определяет, на сколько точек делить интервал, чтобы погрешность от линейной интерполяции не превосходила этой заданной точности.
Еще один дополнительный параметр — целое натуральное число n требует, чтобы функция fplot использовала при построении не менее чем n+1точку. Относительная погрешность и количество точек могут задаваться в любом порядке:
fplot(@sin, [0 2*pi], 0.05, 20)
fpiot(@sin, [0 2*pi], 20, 0.05)
Наконец, как и в функции plot, среди дополнительных параметров могут находиться строки, управляющие цветом и маркировкой графика. Последовательность задания всех дополнительных параметров – произвольная. Результат выполнения следующего оператора приведен на рис. 3.2-16.
Пример 3.2-9

Рис. 3.2-9. Синусоида, построенная c помощью функции fplot
Функция fplot умеет возвращать значения компонентов векторов х и у, если к ней обратиться следующим образом:
[х у] = fplot(@sin, [0 2*pi]);
В этом случае кривая не рисуется, а соответствующие координаты заносятся в массивы xиyсоответственно.
Функция f, указываемая в качестве первого аргумента fplot, кроме независимой переменной хможет содержать дополнительные параметры, например, y=f(x,a1,a2). Тогда эти параметры указываются среди дополнительных аргументов после задания относительной погрешности и минимального числа точек:
fplot(‘nanie_fun’, [xl х2], 0.05, 20, al, a2)
Рассмотрим Пример 3.2-10, результат которого отображен на рис. 3.2 -10.
Пример 3.2-10

Рис. 3.2-10. Примеры работы функции fplot
Функция fplot()предоставляет альтернативную возможность изображения функций по сравнению с вычислением вектораyпоxи последующим изображением этой кривой с помощью функцииplot().Эта функция бывает особенно полезной, когда кривая имеет несколько разных скоростей изменения и заранее не ясно, в скольких и каких точках необходимо вычислять и выводить кривую. Этой функции необходимо передавать строку, описывающую требуемую функцию в видеf(x).Строка, описывающаяf(x), может содержать любые допустимые вMatLabоперации и/или функции. Функцияf(x)должна возвращать вектор той же размерности, что иx, или матрицу, каждый столбец которой имеет столько же элементов, сколько иx.
Например, для того чтобы нарисовать кривую y = sin(x)•cos(2x)в диапазонеxот0до5π, необходимо вызвать функциюfplot (’sin(x) .*cos(2x)’, [0 5*pi]).
График с двумя осями ординат(одна ось отображается слева, другая ось справа) реализуется функциейplotyy(x1,y1,x2,y2)и той же функцией с добавлением параметров масштабирования‘f1’или‘f1′,’f2’, в роли которых могут выступатьplot, semilogx,semilogx, loglog(рис.3.2-11).
Пример 3.2-11
Рис. 3.2-11. Графическое окно с двумя осями координат
Для размещения различных надписей на полученном рисунке применяют функции xlabel, ylabel, titleиtext.Функцияxlabelпредназначена для размещения горизонтальной оси, функцияylabel– названия вертикальной оси. Для размещения надписи в произвольном месте рисунка используется функцияtext, а общий заголовок для графика выводится функциейtitle.Кроме того, используя командуgridonможно нанести измерительную сетку.
Рассмотрим пример 3.2-12, результат которого приведен на рис.3.2-12.
Пример 3.2-12
>> title (‘График sin(x)’);
>>xlabel(‘осьх’);

В системе MatLabсуществует функция, которая создает ступенчатое изображение ваших данных. Например, вместо соединения каждой пары точек из векторов аргументов прямыми линиями (как это делает функция plot()илиline()) функцияstairs()изображает ваши данные в виде горизонтальных отрезков на уровнеyi,причем каждый отрезок горизонтальной линии длится отiдоi + 1, если обращение имеет видstairs(y),и отxiдоxi+1, если обращение имеет видstairs(x,y).Значенияxiне должны быть равноотстоящими и не должны быть упорядочены по возрастанию. Вывод графика на экран можно предотвратить, используя обращение вида[xs,ys]=stairs(x,y).Потом этот график может быть выведен на экран с помощью командыplot(),line()или другим каким-нибудь способом.