2012-07-23 56 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])