Matlab:表面图不起作用

时间:2012-07-23 15:45:55

标签: matlab plot geometry-surface

我有一个我想要做的表面情节。 x是11元素向量,y是300元素向量,z是300 * 11元素矩阵。

当我尝试这样绘制时:

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向量中。

2 个答案:

答案 0 :(得分:6)

有时,它可以帮助改变Matlab的图形渲染器,它基本上是执行绘图的后端。选项包括painterszbufferOpenGL

由于它是一个数字属性,您可以将其应用于特定的数字,例如:

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使用的原始渲染方法更快。

     

zbuffer - MATLAB可以更快,更准确地绘制图形对象,因为它以每个像素为基础对对象进行着色,而MATLAB只渲染场景中可见的像素(从而消除了从前到后的排序错误) 。请注意,如果MATLAB显示复杂场景,此方法会占用大量系统内存。

     

OpenGL - OpenGL是许多计算机系统上都可用的渲染器。此渲染器通常比画家或zbuffer更快,并且在某些情况下使MATLAB能够访问某些系统上可用的图形硬件。

答案 1 :(得分: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])