2013-06-16 8 views
2

일부 영역에서 겹치는 5 개의 선을 그려야하고 모든 선을 볼 수 있어야합니다.matlab에 두 개의 겹치는 선을 표시하는 방법

줄을 조금씩 바꿔서 표시 할 수 있다고 생각할 수 있지만, 이것은 매우 우아한 해결책이 아닙니다. 그럼에도 불구하고 어떻게 그런 코드를 작성할 수 있습니까?

여러 개의 겹친 선을 모든 점에서 구별 할 수있는 다른 방법이 있습니까? enter image description here

가 사전에 감사합니다

exemple 들어

, 여기에 3 겹치는 선 하나 exemple입니다!

+1

더 많은 컨텍스트와 예제 그림이 도움이 될 것입니다. 아마도 라인은 이것을 시각화하는 올바른 방법조차하지 못합니까? –

+0

데이터 붕괴를 시각화하기 위해 선상에 다른 모양이나 색상의 마커를 사용할 수 있습니다. – bla

+0

이것들은 단지 켜기/끄기 플롯입니까? 신경망에 자주 사용되는 래스터 플롯 (예 : [이와 비슷한 것] (http://en.wikipedia.org/wiki/File:Sample_raster_plot_from_Brian_neural_network_simulator.jpg))을 고려 했습니까? – horchler

답변

0

당신은 플롯의 EraseMode 속성을 재생할 수 있습니다 당신이 기대하는 것처럼하지만, 당신이 Y 및 Z 축 교체하는 경우 (이하 "최대"방향 인 Z)를 더 살펴 보겠습니다 선. 다음 코드 예제와 EraseMode 효과 라인을 이동하는 방법을 보여줍니다 당신이 당신의 줄거리와 유사 개 이상의 라인이있는 경우 내 의견으로는

% First we generate some data 
NLines  = 2; 
NPoints  = 50; 
LineWidth = 3; 
ShiftStep = 1.1; 
XData  = linspace(0,1,NPoints); 
YData  = rand(NPoints,NLines); 
for k=1:NLines 
    YData(:,k) = YData(:,k) > (k/(NLines+1)); 
end 

% Then we create plot 
figure('color','w'); 
subplot(3,1,1); plot(XData,YData, 'LineWidth',LineWidth); 
       ylim([-0.1 1.1]); 
       title('simple') 
subplot(3,1,2); plot(XData,YData+repmat((0:NLines-1)*ShiftStep,NPoints,1), 'LineWidth',LineWidth, 'EraseMode','xor'); 
       ylim([-0.1 1.1+ShiftStep*(NLines-1)]); 
       title('Shifted vertically') 
subplot(3,1,3); plot(XData,YData, 'LineWidth',LineWidth, 'EraseMode','xor'); 
       ylim([-0.1 1.1]); 
       title('EraseMode = xor') 

를, 이동은 시각적으로 더 매력적이다. 또한 (내가했던 것처럼) 여러 축을 만들고 각 축을 자체 축에 그릴 수 있으므로 그에 따라 y- 레이블이 설정되지만 X- 레이블은 본질적으로 동일합니다.

+0

EraseMode 속성은'R2016a'에서 더 이상 지원되지 않으며 이후 릴리스에서 오류가 발생합니다. –

0

plot3을 사용하여 서로 다른 겹치는 선에 다른 Z 값을 지정할 수 있습니다.

예 :

Y1 = randn(1,100); 
Y2 = randn(1,100); 
X = 1:100; 
Z1 = 1*ones(size(X)); 
Z2 = 2*ones(size(X)); 

plot3(X,Z1,Y1); 
hold on; 
plot3(X,Z2,Y2); 
1

또 다른 방법은 투명도를 사용하는 것입니다.
Unfortunatelly, 라인 객체가
투명성을 순종하지 않는 명령 :(

해결 방법이이다 :
1. 다운로드 patchline (< - matlab에 중앙 링크) 투명성과 patchline 음모
2. 사용

% create some lines: 
l1 = [1, 1, 1, 0, 0, 0.25, 1, 1, 0, 0, 0, 0, 1 1]; 
l2 = [0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1]; 
l3 = [1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0]; 

% plot with patchline (notice the use of 'EdgeAlpha'): 
figure; 
patchline(1:length(l1), l1, [], 'EdgeColor', [0.8, 0.2, 0.35],... 
    'LineWidth', 5, 'EdgeAlpha', 0.5); 
hold on; 

patchline(1:length(l1), l2, 'EdgeColor', [0.2, 0.7, 0.55],... 
    'LineWidth', 5, 'EdgeAlpha', 0.5); 

patchline(1:length(l1), l3, 'EdgeColor', [0.1, 0.2, 0.95],... 
    'LineWidth', 5, 'EdgeAlpha', 0.5); 

% change y limits to see line overlap clearly 
set(gca, 'YLim', [-0.5, 1.5]); 

: 당신이 patchline가 있으면

, 당신은 뭔가를 시도 할 수 있습니다
하지 그것을 할 수있는 이상적인 방법 As you can see - this is far from perfect - 거친 '균열'이 상태를 유지합니다,
하지만 당신은 다른 라인 폭을 실험 또는과 이미지에 해당하는 것 값으로 Y 축에서
라인을 이동 할 수 있습니다 각
가장 가까운 이웃을 덮는 라인 ...

관련 문제