2014-05-14 1 views
2

특정 errorbars가있는 scatterplot을 프로그래밍하려고합니다. 내가 찾은 함수의 유일한 빌드는matlab에 다른 오차 막대가있는 다차원 (2 차원 더 나은 3d) scatter-plot

errorbar() 

입니다.하지만 y 방향으로 오차 막대가있는 2 차원 플롯을 만들 수 있습니다. 내가 뭘 찾고있는 방법은 x와 y 방향으로 errorbars와 이것을 계획하는 것입니다.

결국 내 목표는 3 오차 막대를 사용하여 3D 분산 형 플롯을 만드는 것입니다.
결과 이미지가 3D 기하학적 모양 (오차 막대에 비례 한 차원에서 확장 된 좌표 x, y, z)을 갖는 3d-plot이 '마커'일 경우 완벽 할 것입니다.

인터넷 검색 중에이 페이지를 발견했습니다 : http://code.izzid.com/2007/08/19/How-to-make-a-3D-plot-with-errorbars-in-matlab.html 그러나 불행히도 오류 막대는 하나만 사용합니다.

내 데이터는 각각 x, y 또는 z 좌표 또는 오류 막대로 표시하려는 특정 표준 유도가 포함 된 6 개의 배열로 설정됩니다.

+0

FEX 제출 [HERRORBAR] (http://www.mathworks.com/matlabcentral/fileexchange/3963-herrorbar)과 'errorbar' 코드를 비교해 보시기 바랍니다.'HERRORBAR '가 'errorbar', 변경 사항을 살펴보면 3 차원에 맞게 변경하는 법을 배울 수 있습니다. – Dan

+0

내 최선의 경우는 szenar io, 3d 객체에 마커를 만드는 방법을 알았습니까? –

+0

plot3d_errorbars를 면밀히 살펴보면 [x, y, z + e]에서 [x, y, z-e]까지 선을 그립니다. 이것을 세 차원 모두로 확장해야합니다. – Daniel

답변

2

code you posted은 세 가지 오류 막대를 모두 그릴 때 매우 쉽게 적응할 수 있습니다. 사용

function [h]=plot3d_errorbars(x, y, z, ex, ey, ez, varargin) 

% create the standard 3d scatterplot 
hold off; 
h=plot3(x, y, z, varargin{:}); 

% looks better with large points 
set(h, 'MarkerSize', 25); 
hold on 

% now draw the vertical errorbar for each point 
for i=1:length(x) 
     xV = [x(i); x(i)]; 
     yV = [y(i); y(i)]; 
     zV = [z(i); z(i)]; 

     xMin = x(i) + ex(i); 
     xMax = x(i) - ex(i); 
     yMin = y(i) + ey(i); 
     yMax = y(i) - ey(i); 
     zMin = z(i) + ez(i); 
     zMax = z(i) - ez(i); 

     xB = [xMin, xMax]; 
     yB = [yMin, yMax]; 
     zB = [zMin, zMax]; 

     % draw error bars 
     h=plot3(xV, yV, zB, '-k'); 
     set(h, 'LineWidth', 2); 
     h=plot3(xB, yV, zV, '-k'); 
     set(h, 'LineWidth', 2); 
     h=plot3(xV, yB, zV, '-k'); 
     set(h, 'LineWidth', 2); 
end 

예 :

을 당신이 그래프의 모양과 색상 등을 변경할 수 있도록 당신이 일반적으로 varargin를 사용하여, 예를 들어, 당신이 plot3d_errorbars(...., '.r')를 호출 할 수 있습니다 것처럼 나 또한 그것을 적응하는이 (주를보십시오
x = [1, 2]; 
y = [1, 2]; 
z = [1, 2]; 
ex = [0.1, 0.1]; 
ey = [0.1, 0.5]; 
ez = [0.1, 0.3]; 

plot3d_errorbars(x, y, z, ex, ey, ez, 'or') 
+0

예. 귀하의 적응은 잘 작동합니다. 고맙습니다. 내 것보다 훨씬 낫습니다. 방금 for 루프를 2 번 복사하고 변수를 회전했습니다. 또한 동일한 결과를 얻지 만 더 많은 선과 루프가 있습니다. 그래서 많이. 권리에 대해서는 잘 모르겠지만 코드를 링크 또는 '프로그래머'로 참조하여 코드를 복사하는 다른 사람들이 문제를 일으키지 않도록해야합니다. –

+0

@TheMinion 링크를 추가했습니다. – Dan

+0

코드에 대한 링크가 아니라 이미 내 질문에서 다루고 있습니다. 저작권에 관한 내용입니다. 모르겠다. mathworks에서 파일 공유에 대한 코드를 찾았으니 모르겠지만 누군가이 포럼이 복사 한 것을보고 '3D'에 맞게 수정 된 '실제'저자를 언급하지 않는다면. 그는 문제를 일으킬 수 있습니다. –

관련 문제