5

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

当我尝试像这样绘制它时:

surf(x y z)

曲面图不显示。轴在那里,但没有表面图。 空白曲面图

但是,如果由于某种原因我像这样对矩阵的子集进行曲面图:

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

然后它起作用了,情节就出现了。 工作面图

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

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

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

4

2 回答 2

6

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

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

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

或更新默认图形属性(如果始终需要,您可以将其放在用户特定的 startup.m中):

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

同样,要获取当前的渲染器状态,请使用get代替set

get(gcf(), 'Renderer')

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

渲染器属性文档

用于丝网和印刷的渲染方法。选择用于渲染 MATLAB 图形的方法。选择是:

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

zbuffer— MATLAB 更快、更准确地绘制图形对象,因为它按像素为对象着色,并且 MATLAB 仅渲染场景中可见的那些像素(从而消除了从前到后的排序错误)。请注意,如果 MATLAB 显示复杂场景,此方法会消耗大量系统内存。

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

于 2012-07-23T17:35:37.283 回答
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])

于 2012-07-23T16:49:47.177 回答