MATLAB: Изменение свойств линии загруженной фигуры?
У меня очень простой вопрос для пользователей MATLAB:
Если я загружаю файл фигур (.fig) с помощью команды load, есть ли способ изменить свойства построенных линий в командной строке? (ширина, цвет, маркер и т.д.)
PD: первые два варианта в соответствии с информацией в Определение цвета линий для построения
На этой странице... работает только если вы используете команду plot. По-видимому, они бесполезны, если вы загружаете фигуру.
Ответы
Ответ 1
Вы можете получить ручки для всех объектов линии на текущей фигуре с помощью функции 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','*')
Ответ 2
Чтобы манипулировать объектами на фигуре, вам нужно иметь доступ к их ручкам. Если вы создадите фигуру с помощью функций построения графиков, они возвратят вам дескрипторы. Когда вы открываете фигуру, как и в вашем случае, вам нужно следовать за деревом графических объектов, чтобы найти дескриптор определенного элемента, которым вы хотите манипулировать.
Эта страница содержит информацию о структуре графических объектов.
Путь к ручкам, которые вы хотите, будет зависеть от вашей фигуры, но, как пример, если ваша фигура была создана с помощью простой команды 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)
Ответ 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:, если вы не хотите reset легенды
Определите, есть ли легенда и сколько строк построено:
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: Держите его простым
Избавьтесь от легенды, позаботьтесь о строках, reset legend.
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
Это может быть неприемлемо для ситуаций, когда легенда должна быть помещена в определенное место и т.д.
Ответ 4
Вы также можете щелкнуть правой кнопкой мыши по строке в средстве просмотра и изменить свойства там. Это также изменяет соответствующую запись "legend" (по крайней мере, в 2014b).