2010-03-15 5 views
14

2 색 대시를 사용하여 세로선을 플롯하고 싶습니다. (어떤 방향을 선호 하긴하지만, 지금은 수직으로하는 것이 좋을 것입니다.) 빨강 - 파랑 - 빨강 - 푸른 -...Matlab의 멀티 컬러 라인 플로팅

내가 이런 식으로 그것을 할 수 알고 :

plot([1,1],[0,1],'r'), 
hold on, 
plot([1,1],[0,1],'--b') 

을하지만, 내가 다른 사람의 사이에서, 라인을 이동 할 수 있어야하기 때문에, 그것은 단지 하나의 핸들이 있어야합니다. 내가 어떻게 할 수 있니?

수정 답장을 보내 주셔서 감사합니다. 나는 실제로 더 많은 정보를 제공해야한다고 생각한다.

일부 데이터가 다른 부분으로 분류되어 있습니다. 클래스 사이의 경계를 수동으로 조정할 수 있어야합니다. 이를 위해 분류 경계에서 세로선을 그려야하고 draggable을 사용하여 선을 이동할 수 있습니다.

빨간색과 파란색 클래스 사이의 경계에는 빨간색/파란색 선이 있어야합니다.

plot(ones(10,1),linspace(0,1,10),'-bs','MarkerFaceColor','r','MarkerEdgeColor','none','linewidth',6) 

내가 실제로 사용하고있는 순간입니다. 그러나, 그것은 너무 예쁘지 않다. (나는 똑같은 간격을 원한다면, 그것은 진짜 고통이된다. 그리고 나는 두 가지 색깔을 같은 무게로주고 싶다.) 나는 3 가지 색상을 사용할 수있는 가능성을 가지고 싶다. 얼굴이 다르기 때문에 눈이 피로해진다.)

불행히도 draggable을 사용하면 여러 핸들을 사용할 수없고 hggroup을 사용하여 선을 그룹화해도 드래그 가능한 객체가 생성되지 않습니다.

cline은 유망한 접근 방법처럼 보이지만 무지개 색상은 내 응용 프로그램에서 작동하지 않습니다.

답변

6

코드를 사용하여 각 줄의 핸들을 핸들 벡터로 연결할 수 있습니다. 두 선의 속성을 동시에 변경하려면 SET 함수가 핸들 벡터를 인수로 사용할 수 있습니다. SET에 대한 문서에서 :

set(H,'PropertyName',PropertyValue,...)H에 의해 식별 된 객체 (들) 에 지정된 값으로 명명 된 속성을 설정합니다.H은 핸들의 벡터가 될 수 있습니다.이 경우 set은 모든 개체의 값을 개체로 설정합니다.

다음은 예입니다 :

h1 = plot([1 1],[0 1],'r'); %# Plot line 1 
hold on; 
h2 = plot([1 1],[0 1],'--b'); %# Plot line 2 
hVector = [h1 h2];    %# Vector of handles 
set(hVector,'XData',[2 3]); %# Shifts the x data points for both lines 



UPDATE : 당신이 MathWorks File Exchange에서 draggable를 사용하는 언급 때문에가 여기에 대체 솔루션입니다. draggable의 설명에서 :

이동하는 객체가 선택적 인수로서 제공 될 수있을 때 이동은 추가 액션을 트리거하도록 호출되는 함수. 각각의 핸들 (즉, h1h2)를 절약

  • 플롯 당신의 두 줄 :

당신은 다음 해결책을 시도 할 수 있습니다.

  • 은 다른의 'UserData' 속성에 각각의 핸들을 넣어 : 두 라인 draggable

    function motionFcn(hMoving) %# Currently moving handle is passed in 
        hOther = get(hMoving,'UserData'); %# Get the other plot handle 
        set(hOther,'XData',get(hMoving,'XData'),... %# Update the x data 
          'YData',get(hMoving,'YData')); %# Update the y data 
    end 
    
  • 전원을 켜고, 위의 함수를 사용하여 :

    set(h1,'UserData',h2); 
    set(h2,'UserData',h1); 
    
  • 다음 함수를 만듭니다 두 객체 중 하나를 움직일 때 호출되는 객체 :

    draggable(h1,@motionFcn); 
    draggable(h2,@motionFcn); 
    
  • +0

    예, 할 수 있기를 바랍니다. 불행히도, 내 응용 프로그램에서는 작동하지 않는 것 같습니다 (편집 참조). – Jonas

    +0

    @Jonas : 저는 제 대답에 draggable으로 작동해야하는 추가 솔루션을 추가했습니다. – gnovice

    +1

    감사합니다. 이것은 매우 잘 작동합니다. 비록 UserData를 이미 사용하기 때문에 setappdata/getappdata를 사용해야합니다. – Jonas

    1

    나는 당신이 원하는 것을 정확하게하는 법을 모르지만, 아마도 당신이 이것을하고 싶은 이유는 다른 라인들과이 라인을 구별하는 어떤 방법을 갖는 것일 것입니다. 이 두 줄을 따라 MathWorks의 documentation on 2-D line plots을 살펴보십시오. 구체적으로이 예는 다음과 같습니다.

    plot(x,y,'--rs','LineWidth',2,... 
           'MarkerEdgeColor','k',... 
           'MarkerFaceColor','g',... 
           'MarkerSize',10) 
    

    변형에 대한 아이디어가 충분해야합니다. 2 색 대시가 실제로 필요한 경우 이유를 지정하는 것이 도움이 될 수 있습니다. 그렇게하면 비록 우리가 그 질문에 답을 내지 못한다 할지라도 당신은 정말로 당신이 2 색 대시를 필요로하지 않는다는 것을 확신 할 수 있습니다. 당신은 이미 오버 랩핑 솔루션을 배제했기 때문에 모든 요구 사항에 대한 해답을 찾을 수있는 솔루션이 없다는 것을 확신합니다. 두 가지 색이 가장 필요한 것 같아요.

    +0

    실제로 밝혀진 바와 같이 실제로 설명서를 먼저 읽었지만 (필자도 언급 했음에 틀림 없다.) 나는 두 가지 색을 원한다. – Jonas

    3

    필자는 한번도 사용 해본 적이 없지만 관련이있는 Mathworks File Exchange에 CLINE이라는 Sebastian Hölz가 제출 한 내용이 있습니다.

    +0

    그것이 내가 필요한 거의 것입니다. 어쨌든, cline이 있다는 것을 아는 것은 좋은 일입니다. – Jonas