我有一个点列表(x,y,z),并希望将它们可视化为平面上的曲线,其中点(x,y)和任何颜色/强度/厚度为z。怎么能在Matlab中完成呢?
plot(x,y)
形状正确,但我需要的颜色取决于z
。
答案 0 :(得分:3)
假设您不关心实际线条的颜色,而是标记。将plot
与scatter
结合使用。
想象一下以下示例数据:
t = 0:pi/20:2*pi;
x = sin(t);
y = cos(t);
z = t;
plot3(x,y,z);
在2D平面上绘制:
plot(x,y); hold on
scatter(x,y,300,z); hold off
结果:
从您的评论中:如果您有足够的数据并且不需要该行,请使用scatter
,这正是您所需要的。
另一种可能性受到solution on MATLAB Central的启发,考虑了线条和标记。
surface([x;x],[y;y],zeros(2,length(t)),[z;z],'EdgeColor','flat',...
'Marker','o','MarkerSize',10,'MarkerFaceColor','flat');
使颜色依赖于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
对于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