Подтвердить что ты не робот

MATLAB: Изменение свойств линии загруженной фигуры?

У меня очень простой вопрос для пользователей MATLAB:

Если я загружаю файл фигур (.fig) с помощью команды load, есть ли способ изменить свойства построенных линий в командной строке? (ширина, цвет, маркер и т.д.)

PD: первые два варианта в соответствии с информацией в Определение цвета линий для построения На этой странице... работает только если вы используете команду plot. По-видимому, они бесполезны, если вы загружаете фигуру.

4b9b3361

Ответ 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).