2014-04-12 5 views
0

벡터 데이터 입력에 일련의 직사각형 펄스를 플로트하고 싶습니다. 플롯 프로파일은 양수에 대한 펄스의 상승 에지를 생성하고 그 수의 음수에 대한 하강 에지를 생성합니다. 플롯은 표시된 각 번호에 대해 색상을 구분해야합니다. 예를 들어상승/하강이 제어 된 직사각형 펄스를 플로팅 요청

벡터 입력 X 인 경우에는 [1 -1 2 -2 3 4 1 -4 -1 -3] 데이터가 '1'인 5 진폭 데이터가 '2'의 진폭 4 이고 데이터 '3'의 진폭은 3이고 데이터의 진폭은 2입니다.

따라서 입력 X는 t (1)에서 t (10)까지 인덱스를가집니다. 플롯 또는 차트의 출력은 삽입 된 이미지와 같아야합니다. enter image description here

이 작업을 위해 어떻게 MATLAB 코드를 작성할 수 있습니까?

감사합니다. B.Bundit

+0

이 문제에 대한 의견이 있으십니까? – user3464608

답변

0

플롯은 매우 작지만 matlab에 bar과 같은 것을 원한다고 생각합니다. 문서는 here입니다. 가지고있는 벡터가 변경된 경우 cumsum을 사용하여 플로팅에 대한 값의 벡터를 만들 수 있습니다. 위주는 음모 바의 다른 폭을 가지고 있기 때문에

X=[1 -1 2 -2 3 4 1 -4 -1 -3]; 
Xplot=cumsum([5,X(2:end)]); % //so 5 will be your initial value 

은 또한 각 데이터 포인트의 중심 벡터와 각 데이터 포인트의 폭을해야합니다.

means= [1 2 3 4 5 6 7 8 9 10]; 
widths=[1 1 1 1 1 1 1 2 1 1]; 

다른 컬러 바 플롯을 위해 당신이 할 수 있습니다 : 당신은 here를 설정하는 다른 속성을 탐색 할 수 있습니다

colors=['r','g','k','b','c','m','y','r','g','k']; 
for i=1:length(X) 
    h=bar(means(i),Xplot(i),widths(i)); 
    if i==1, hold on; end 
    set(h,'FaceColor',colors(i)); 
end 
% //This will label each bar, or you could define your axes before the loop 
set(gca,'XTickLabel',means); 

. 클래스 barseries에는 FaceAlpha 속성이 없으므로 투명하게 만들 수 있는지 확실하지 않습니다. 그러나 FaceColor을 none으로 설정하고 EdgeColor을 원하는 색상으로 설정할 수 있습니다. 가장자리 색은 문자셋이 아닌 RGB 삼중 항으로 지정됩니다.

너비에 따라 데이터를 정렬해야하므로 가장 넓은 막대가 마지막으로 그려지며 상단에 배치됩니다. 그러면 다음과 같이 보입니다.

[widths_sorted,sort_idx]=sort(widths,'ascending'); 
Xplot_sorted=Xplot(sorted_idx); 
means_sorted=means(sorted_idx); 
+0

안녕하세요 Raab70, 귀하의 의견을 보내 주셔서 감사합니다. 하지만 코드는 내가 제공 한 플롯 이미지처럼 줄거리를 제공하지 않습니다. 실제로 코드에는 각 표시 번호의 펄스/막대 진폭이 포함되어야하며 각 숫자에도 별도의 색상을 사용해야합니다 (예에서 4 개의 숫자에 대해 4 가지 색상). 감사. – user3464608

+0

코드로 플로팅 한 후에도 여전히 이미지와 동일하지 않습니다. 각 막대의 수와 너비는 여전히 정확하지 않습니다. 도움을 주셔서 감사합니다. – user3464608

+0

어떻게 잘못 되었습니까? 폭은 어떻게 설정 했습니까? 방금 임의의 숫자를 예제로 선택했습니다. 진폭은 올바른 출발점이있는 한 위에서 설명한대로 정확해야합니다. 내가 언급했듯이 matlab은 막대를 투명하게 만들 수 없기 때문에 당신이 제공 한 이미지와 정확히 똑같이 보일 수 없다. – Raab70