2012-07-23 55 views
5

我有一個表面情節,我正在嘗試做。 x是11元素矢量,y是300元素矢量,z是300 * 11元素矩陣。Matlab:表面陰謀不工作

當我嘗試繪製它是這樣的:

surf(x y z) 

的表面曲線圖顯示不出來。軸在那裏,但沒有表面圖。 blank surface plot

但是,如果由於某種原因,我做矩陣的這樣一個子集的表面圖:

surf(x y(1:31) z(1:31,:)) 

然後,它的工作原理和劇情出現。 working surface plot

只要我將括號中的數字增加到32就停止工作。如果我改變了從2:32開始的範圍,那麼它就可以工作,所以它與數據只是矩陣的大小無關。

這是怎麼回事嗎?我如何解決它?

P.S我會附上代碼,但它有點長和複雜,並導入.txt文件加載到x和y向量。

+0

當您嘗試使用第一個命令進行繪圖時,命令窗口中是否有紅色文本? – Jonas 2012-07-23 15:49:41

+0

不,根本沒有紅色文字 – Eddy 2012-07-23 15:53:03

+1

也許你可以嘗試改變圖形的'Renderer'屬性('painters','zbuffer','OpenGL'):http://www.mathworks.nl/help/techdoc/ ref/figure_props.html – catchmeifyoutry 2012-07-23 16:00:22

回答

6

有時,它可以幫助改變Matlab的圖形渲染器,它基本上是執行繪製的後端。選項是painters,zbufferOpenGL

既然是人物屬性,你可以將它應用到一個具體的數字,如:

set(gcf(), 'Renderer', 'painters') 

或更新default figure properties(如果總是需要的,你可以把它放在你的user-specific startup.m):

set(0, 'Renderer', 'painters') 

同樣,得到當前渲染狀態,使用的get代替set

get(gcf(), 'Renderer') 

不同的渲染器具有不同的性能屬性(例如, OpenGL渲染器可以使用硬件加速,如果支持),但也有不同的怪癖(根據我的經驗,使用getframe()的幀捕獲與使用遠程桌面登錄時的某些渲染器協同工作,但不是全部)。雖然我不知道問題的確切原因,但它可能是這些奇怪的怪癖之一,所以請嘗試更改渲染器。

Renderer property documentation

用於絲網印刷和渲染方法。 選擇用於渲染MATLAB圖形的方法。選項有:

painters - 當圖只包含簡單或小圖形對象時,MATLAB使用的原始渲染方法更快。由於MATLAB以每個像素爲基礎着色對象,並且MATLAB僅渲染場景中可見的像素(因此消除了從前到後的排序錯誤),因此MATLAB可以更快,更準確地繪製圖形對象。請注意,如果MATLAB顯示覆雜的場景,此方法可能會消耗大量系統內存。

OpenGL - OpenGL是一種可在許多計算機系統上使用的渲染器。這個渲染器通常比畫家或者zbuffer更快,並且在某些情況下使MATLAB能夠訪問某些系統上可用的圖形硬件。

1

查看沿着左側(y軸)和頂部(z軸)的軸的最小值/最大值的變化。我認爲它仍然存在,但它非常小。

嘗試之後設置軸這樣的: axis([6E-6 8E-6 9.2E14 10E14 0.96 1.06 -1 1])

注:E-6可能是E-8,我真的不能從圖像告訴...

這是基於關閉代碼:axis([xmin xmax ymin ymax zmin zmax cmin cmax])