MATLAB:Изменение свойств линий загруженной фигуры?
-
27-10-2019 - |
Вопрос
У меня есть очень простой вопрос для пользователей MATLAB:
Если я загружу файл рисунка (.fig) с помощью команды load , есть ли какой-нибудь способ изменить свойства построенных линий из командной строки?(ширина, цвет, маркер и т.д.)
ПД:Первые два варианта в соответствии с информацией в Определение цвета линий для построения графика На этой странице… работает только в том случае, если вы используете команду plot.Очевидно, что они бесполезны, если вы загружаете фигуру.
Решение
Вы можете получить ручки для всех линейных объектов на текущей фигуре с FindObj Функция:
hline = findobj(gcf, 'type', 'line');
Затем вы можете изменить свое свойство для всех объектов линии:
set(hline,'LineWidth',3)
или просто для некоторых из них:
set(hline(1),'LineWidth',3)
set(hline(2:3),'LineStyle',':')
idx = [4 5];
set(hline(idx),'Marker','*')
Другие советы
Чтобы манипулировать объектами на рисунке, вам необходимо иметь доступ к их ручкам. Если вы создаете фигуру, используя функции построения построения, они вернут вам ручки. Когда вы открываете фигуру, как и ваш случай, вам нужно следовать за деревом графических объектов, чтобы найти ручку для конкретного элемента, которым вы хотите манипулировать.
Эта страница Имеет информацию о структуре графических объектов.
Путь к нужным ручкам будет зависеть от вашей фигуры, но, например, если ваша фигура была создана с помощью простой plot
Команда, это будет одним из способов изменить свойства линии:
x = 0:0.1:2;
plot(x,sin(x));
fig = gcf % get a handle to the current figure
% get handles to the children of that figure: the axes in this case
ax = get(fig,'children')
% get handles to the elements in the axes: a single line plot here
h = get(ax,'children')
% manipulate desired properties of the line, e.g. line width
set(h,'LineWidth',3)
В дополнение к ответу @yuk, если у вас есть также нарисована легенда,
hline = findobj(gcf, 'type', 'line');
вернется N x 3
линии (или , точнее, - lines plotted + 2x lines in legend
). Здесь я рассмотрю только тот случай, когда все нанесенные линии также находятся в легенде.
Последовательность какая-то странная:в случае 5 строк (давайте отметим их 1 to 5
) нанесено на график и добавлено обозначение, у вас будет
hline:
1 : 5 th line (mistical)
2 : 5 th line (in legend)
3 : 4 th line (mistical)
4 : 4 th line (in legend)
5 : 3 th line (mistical)
6 : 3 th line (in legend)
7 : 2 th line (mistical)
8 : 2 th line (in legend)
9 : 1 th line (mistical)
10: 1 th line (in legend)
11: 5 th line (in plot)
12: 4 th line (in plot)
13: 3 th line (in plot)
14: 2 th line (in plot)
15: 1 th line (in plot)
В качестве решения (промедление в пятницу вечером) Я сделала этого маленького ребенка:
Решение 1: если вы не хотите сбрасывать легенду
Определите, есть ли легенда и сколько линий нанесено на график:
hline = findobj(gcf, 'type', 'line');
isThereLegend=(~isempty(findobj(gcf,'Type','axes','Tag','legend')))
if(isThereLegend)
nLines=length(hline)/3
else
nLines=length(hline)
end
Для каждой строки найдите нужные дескрипторы и выполните необходимые действия для этой строки (это будет применимо также к соответствующей строке легенды).
for iterLine=1:nLines
mInd=nLines-iterLine+1
if(isThereLegend)
set(hline([(mInd*2-1) (mInd*2) (2*nLines+mInd)]),'LineWidth',iterLine)
else
set(hline(mInd),'LineWidth',iterLine)
end
end
Это делает каждый i-th
в соответствии с width=i
и здесь вы можете добавить автоматическое изменение свойств;
Решение 2: Пусть все будет просто
Избавьтесь от легенды, позаботьтесь о строках, сбросьте легенду.
legend off
hline = findobj(gcf, 'type', 'line');
nLines=length(hline)
for iterLine=1:nLines
mInd=nLines-iterLine+1
set(hline(mInd),'LineWidth',iterLine)
end
legend show
Это может не подходить для ситуаций, когда легенда должна быть размещена в каком-то определенном месте и т.д.
Вы также можете просто щелкнуть правой кнопкой мыши на линии в зрителе и изменить свойства там. Это также меняет соответствующую запись «Легенда» (по крайней мере, в 2014b).