В дополнение к ответу @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
Это может не подойти для ситуаций, когдалегенда должна быть размещена в определенном месте и т. д.