2014-05-14 50 views
2

我正在嘗試使用特定的錯誤條編程scatterplot。在功能上唯一的構建,我發現是多維(2d更好的3d)與matlab中的不同錯誤條的散點圖

errorbar() 

但這隻能讓我做在Y方向errorbars一個2D繪圖。我所要求的是一種用x和y方向上的誤差線繪製的方法。

最後,我的目標是製作一個帶3個錯誤條的3D散點圖。
如果生成的圖像是具有三維幾何形狀(座標x,y,z,尺寸與誤差線成比例的擴展)的3d圖作爲「標記」,那麼結果將是完美的。

我在搜索互聯網時發現此頁面:http://code.izzid.com/2007/08/19/How-to-make-a-3D-plot-with-errorbars-in-matlab.html 但不幸的是,他們只使用一個錯誤欄。

我的數據是由6個數組組成的,每個數組包含x,y或z座標或我想顯示爲錯誤欄的特定標準派生。

+0

我建議你將FEX提交[HERRORBAR](http://www.mathworks.com/matlabcentral/fileexchange/3963-herrorbar)與'errorbar'內的代碼進行比較,看起來像'HERRORBAR'直接改編自'errorbar',如果你看看這些變化,你可能會學習如何適應它的第三維。 – Dan

+0

要做到這一點。對於我最好的情況szenar io,你有任何想法如何使標記爲3d對象? –

+0

如果仔細看看plot3d_errorbars,它會繪製一條從[x,y,z + e]到[x,y,z-e]的直線。你必須將其擴展到所有三個維度。 – Daniel

回答

2

code you posted看起來很容易適應繪製所有三個誤差條。試試這個(請注意,我適應它也讓你可以改變曲線的形狀和顏色等,你通常會使用varargin,例如,你可以調用plot3d_errorbars(...., '.r'):使用

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 

例子:

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次並旋轉了變量。也得到相同的結果,但有更多的線條和循環。所以thx很多。我對權利一無所知,但也許你應該在你的代碼中引用鏈接或「程序員」,以便複製代碼的其他人不會遇到問題。 –

+0

@TheMinion添加鏈接 – Dan

+0

我不是在談論代碼的鏈接,這已經在我的問題中完成了,而是關於版權。不知道,因爲我發現從mathworks共享的文件上的代碼,但如果有人看到這個論壇複製它,並沒有提到剛剛適合你的3D作品。他可能會遇到問題。 –