使用颜色z在坐标(x,y)上绘制(x,y,z)三元组的图表

5
我有一系列点的列表 (x,y,z),希望在一个平面上将它们可视化成一条曲线,其中点位于 (x,y) 平面上,颜色/强度/粗细基于 z 值。在 Matlab 中如何实现这个功能? plot(x,y) 可以得到正确的形状,但我需要颜色取决于 z 的值。

你想让线条也改变颜色还是只有点呢? - Robert Seifert
最好是两者都有,但我有足够的数据可以只绘制点而不连接线。 - Tim
为了完整起见,我添加了一些关于依赖强度和厚度的注释。 - Robert Seifert
2个回答

3
假设您不关心实际线条的颜色,而是标记。请使用plotscatter相结合。
想象以下示例数据:
t = 0:pi/20:2*pi;
x = sin(t);
y = cos(t);
z = t;

plot3(x,y,z);

enter image description here

在二维平面上绘制:

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

结果是:

enter image description here

根据你的评论:如果你有足够的数据,而且不需要线条,只需使用scatter,这正是你所需要的。


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 的,增加透明度是有点棘手的。你可以在这里找到一个绕过方法here,使用 patch 函数。

2
解决方案可以是这样的:
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来实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接