Matlab:表面图不起作用

Edd*_*ddy 5 matlab plot geometry-surface

我有一个表面情节,我正在尝试做.x是11元素向量,ya 300元素向量和za 300*11元素矩阵.

当我尝试这样绘制时:

surf(x y z)
Run Code Online (Sandbox Code Playgroud)

表面图未显示.轴在那里,但没有表面图. 空白表面图

但是,如果由于某种原因我做了矩阵子集的表面图,如下所示:

surf(x y(1:31) z(1:31,:))
Run Code Online (Sandbox Code Playgroud)

然后它工作,情节显示. 工作面积

一旦我将括号中的数字增加到32,它就会停止工作.如果我从2:32更改范围然后它可以工作,所以它与数据只是矩阵的大小无关.

这里发生了什么?我如何解决它?

PS我会附加代码,但它有点长且复杂,并导入.txt文件加载到x和y向量中.

cat*_*try 6

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

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

set(gcf(), 'Renderer', 'painters')
Run Code Online (Sandbox Code Playgroud)

或者更新默认的图形属性(如果总是需要,可以将它放在用户特定的startup.m中):

set(0, 'Renderer', 'painters')
Run Code Online (Sandbox Code Playgroud)

同样,要获取当前呈现器状态,请使用get而不是set:

get(gcf(), 'Renderer')
Run Code Online (Sandbox Code Playgroud)

不同的渲染器具有不同的性能属性(例如,OpenGL渲染器可以使用硬件加速,如果支持),但也有不同的怪癖(根据我的经验,使用getframe()的帧捕获在使用远程桌面登录时与一些渲染器一起使用,但不是全部).虽然我不知道你的问题的确切原因,但它可能是这些奇怪的怪癖之一,所以尝试更改渲染器.

Renderer属性文档:

用于屏幕和打印的渲染方法.选择用于渲染MATLAB图形的方法.选择是:

painters - 当图形仅包含简单或小图形对象时,MATLAB使用的原始渲染方法更快.

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

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