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

StackOverflow https://stackoverflow.com/questions/9329611

Вопрос

У меня есть очень простой вопрос для пользователей 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).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top