我有一系列点的列表 (x,y,z),希望在一个平面上将它们可视化成一条曲线,其中点位于 (x,y) 平面上,颜色/强度/粗细基于 z 值。在 Matlab 中如何实现这个功能?
plot(x,y)
可以得到正确的形状,但我需要颜色取决于 z
的值。plot
与scatter
相结合。t = 0:pi/20:2*pi;
x = sin(t);
y = cos(t);
z = t;
plot3(x,y,z);
在二维平面上绘制:
plot(x,y); hold on
scatter(x,y,300,z); hold off
结果是:
根据你的评论:如果你有足够的数据,而且不需要线条,只需使用scatter
,这正是你所需要的。
受 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
的,增加透明度是有点棘手的。你可以在这里找到一个绕过方法here,使用 patch
函数。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
来实现。