0

我有 3 个X, Y, Z看起来像这样的数组:

x = [1, 1, 1, 2, 2, 2, 3, 3, 3]
y = [1, 2, 3, 1, 2, 3, 1, 2, 3]
z = [1, 2, 3, 2, 4, 6, 3, 6, 9]

然后我用 绘制这些点plot3(x,y,z)。然而结果出乎意料..它基本上看起来像一个日志图,它这样做但它也有额外的行。我不知道它是怎么发生的,也许这里有人可以启发我!

这是我的图表的一个例子(显然我已经绘制了我的值,X, Y, Z上面的数组只是它们看起来的一个例子): 图片

如您所见,底部曲线是我很高兴看到的对数图线,但出现在它上方的曲线让我感到困惑。我尝试显示X Y Z与以下模式匹配的值:X is between 110 and 120Y = 0.05. 从理论上讲,这应该给我两个匹配X。IE。之间,我应该得到 20 个匹配,因为该图显示两条线在每个X = [110, 120]点上命中。Y = 0.05X

为了更清楚地绘制出什么值X,它基本上是在 和 之间的增量,0.1它正在绘制。无论如何,只有两点之间的命中。X = 120X = 119119.0, 119.1, ... , 120.0X, ZY = 0.05119-120

正如我所说,我检查了X, Z匹配的值,Y = 0.05它只返回一个结果X。也就是说,对于X = [110, 120],仅返回 10 个匹配项。这些值是底线上的值(即对数图线),而不是顶线。如此有效地,这些线并不意味着存在。他们肯定在击球Y = 0.05并且介于两者之间,X = [110, 120]所以他们应该以比赛的形式出现。

所以你有它。不太清楚发生了什么!如果有人可以提供帮助,那就太好了。

编辑 - 更多信息。即使手动将X, Y值放入返回的函数中,也Z永远不会达到上线的值。

谢谢。

4

2 回答 2

2

的示例x,实际上很好地说明了您的问题y。 您不是在绘制单独的曲线(每个对数图一个),而是绘制一条连续曲线。因此,您的额外线实际上是将对数曲线的一端连接到下一条曲线的开始。 你必须打破你的情节命令。 z

编辑
最后,它需要了解您的数据集,但是对于您上面提供的x, yz这将产生三个独立的曲线而不是一个:

x = [1, 1, 1, 2, 2, 2, 3, 3, 3];
y = [1, 2, 3, 1, 2, 3, 1, 2, 3];
z = [1, 2, 3, 2, 4, 6, 3, 6, 9];

DATASET_SIZE = 3;

hold on;

for i=1:size(x,2)/DATASET_SIZE

    plot3(x((i-1)*DATASET_SIZE+1:i*DATASET_SIZE),y((i-1)*DATASET_SIZE+1:i*DATASET_SIZE),z((i-1)*DATASET_SIZE+1:i*DATASET_SIZE));
    plot3(x(i*DATASET_SIZE+1:2*DATASET_SIZE),y(i*DATASET_SIZE+1:2*DATASET_SIZE),z(i*DATASET_SIZE+1:2*DATASET_SIZE));
    plot3(x(2*DATASET_SIZE+1:3*DATASET_SIZE),y(2*DATASET_SIZE+1:3*DATASET_SIZE),z(2*DATASET_SIZE+1:3*DATASET_SIZE));

    view(3)

end  

编辑 2

找出是否发生此“问题”Data Cursor的一种简单方法是在 MATLAB 绘图窗口中使用。将它放在图表上的任何位置,然后使用updown箭头键四处移动。如果您可以沿绘图的整个长度移动,则它是一条连续的线。此外,您应该看到Cursor从一条曲线的“结束”到下一条曲线的“开始”的跳跃。

于 2013-05-17T16:07:22.267 回答
0

我在使用 surface(x,y,z) 时遇到了同样的问题,并通过更改渲染器解决了这个问题。MATLAB 有 3 种不同的渲染器用于绘制数据,默认情况下,openGL 渲染器绘制如您所示。您可以使用 GET(gcf) 查看您的图形使用的渲染器。您可以像我使用的那样更改渲染器: set(gcf,'Renderer','painters') 我相信第三个渲染器是 zbuffer 并且可能也可以工作。

于 2014-09-29T14:57:12.950 回答