2012-02-17 6 views
13

MATLAB 사용자에게 매우 간단한 질문이 있습니다.MATLAB :로드 된 그림의 선 속성 변경?

로드 명령으로 그림 파일 (.fig)을로드하는 경우 명령 줄에서 플롯 된 선 속성을 변경할 수있는 방법이 있습니까?

PD : 정보에 따른 처음 두 옵션은 plot 명령을 사용하는 경우에만 Defining the Color of Lines for Plotting On this page…의 정보에 따라 작동합니다. 당신이 그 그림을 적재하면 그들은 쓸모가 없다.

답변

17
을 모든 라인이 FINDOBJ 기능과 현재의 모습이 객체에 대한

당신은 핸들을 얻을 수 있습니다 :

hline = findobj(gcf, 'type', 'line'); 

그런 다음 모든 라인에 대한 몇 가지 속성을 변경할 수있는 객체 :

set(hline,'LineWidth',3) 

하거나 그들 중 일부에 대한:

hline = findobj(gcf, 'type', 'line'); 

N x 3 라인을 반환 당신이 전설뿐만 아니라 그려있는 경우

는 또한
set(hline(1),'LineWidth',3) 
set(hline(2:3),'LineStyle',':') 
idx = [4 5]; 
set(hline(idx),'Marker','*') 
+0

대단히 감사합니다! 그것은 잘 작동했습니다! – aarelovich

2

그림에서 개체를 조작하려면 해당 핸들에 대한 액세스 권한이 있어야합니다. 플로팅 함수를 사용하여 그림을 만들면 핸들이 반환됩니다. 자신의 경우처럼 그림을 여는 경우 조작하려는 특정 요소에 대한 핸들을 찾으려면 그래픽 오브젝트 트리를 따라야합니다.

This page에는 그래픽 개체의 구조에 대한 정보가 있습니다.

당신의 그림은 간단한 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) 
+0

정보 주셔서 감사합니다. 나는 고려할 것이다. 그러나 나는 위의 대안을보다 직관적이라고 생각한다. – aarelovich

2

는 대답을 @yuk하려면 (또는 보다 정확하게는 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 :이 전설이며, 얼마나 많은 린 경우는

가 감지 전설을 재설정하지 않는 경우 ES가 그려 각 라인에 대한

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 : 전설을 재설정 줄 알아서, 그것을 간단한

는 전설 없애하십시오. 전설 일부 speciffic 장소 등

0

에 배치해야하는 경우

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에서 변경됨).

관련 문제