我有一个我想要做的表面情节。 x是11元素向量,y是300元素向量,z是300 * 11元素矩阵。
当我尝试这样绘制时:
surf(x y z)
表面图未显示。轴在那里,但没有表面图。
但是,如果出于某种原因,我会像这样做一个矩阵子集的表面图:
surf(x y(1:31) z(1:31,:))
然后它工作,情节显示。
一旦我将括号中的数字增加到32,它就会停止工作。如果我从2:32更改范围,那么它就可以工作,所以它与数据的大小无关。
这里发生了什么?我如何解决它?
P.S我会附加代码,但它有点长且复杂,并导入.txt文件以加载到x和y向量中。
答案 0 :(得分:6)
有时,它可以帮助改变Matlab的图形渲染器,它基本上是执行绘图的后端。选项包括painters
,zbuffer
和OpenGL
。
由于它是一个数字属性,您可以将其应用于特定的数字,例如:
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])