用坐标(x,y)绘制(x,y,z)三元组,颜色为z

时间:2014-02-09 10:40:15

标签: matlab plot

我有一个点列表(x,y,z),并希望将它们可视化为平面上的曲线,其中点(x,y)和任何颜色/强度/厚度为z。怎么能在Matlab中完成呢?

plot(x,y)形状正确,但我需要的颜色取决于z

2 个答案:

答案 0 :(得分:3)

假设您不关心实际线条的颜色,而是标记。将plotscatter结合使用。

想象一下以下示例数据:

t = 0:pi/20:2*pi;
x = sin(t);
y = cos(t);
z = t;

plot3(x,y,z);

enter image description here

在2D平面上绘制:

plot(x,y); hold on
scatter(x,y,300,z); hold off

结果:

enter image description here

从您的评论中:如果您有足够的数据并且不需要该行,请使用scatter,这正是您所需要的。


另一种可能性受到solution on MATLAB Central的启发,考虑了线条和标记。

surface([x;x],[y;y],zeros(2,length(t)),[z;z],'EdgeColor','flat',...
        'Marker','o','MarkerSize',10,'MarkerFaceColor','flat');

enter image description here


使颜色依赖于z非常简单,要更改标记尺寸,您肯定需要scatter函数:

surface([x;x],[y;y],zeros(2,length(t)),[z;z],'EdgeColor','flat'); hold on
MarkerSize = round(z*1000)+1;
scatter(x,y,MarkerSize,z,'.','MarkerFaceColor','auto'); hold off

enter image description here

对于z依赖,增加透明度这有点棘手。您可以使用patch功能找到解决方法here

答案 1 :(得分:1)

解决方案就像那样

x = 0:.05:2*pi;
y = cos(x);
planez = zeros(size(x));
z = x;  % This is the color, vary with x in this case, but you can use your vector
surface([x;x],[y;y],[planez;planez],[z;z],...
        'facecol','no',...
        'edgecol','interp',...
        'linew',2);

关键是你要绘制一个表面,颜色很容易修改。我不认为可以使用plot

完成

enter image description here