使用textscan读取数据:
fid = fopen('/My Documents/filename.dat');
data = textscan(fid, '%f %f %f');
fclose(fid);
X=data{1};
Y=data{2};
Z=data{3};
绘图方法#1
然后,如果你用
plot(X,Y)
你会得到一个由线条组成的普通情节。然而,这些都具有相同的颜色。除非你把它们分成不同的行,否则改变它们是不可能的。
幸运的是,还有scatter函数可以让你这样做:
scatter(X,Y,[],Z)
这会绘制点,颜色基于 Z。
绘图方法#2
如果您希望这些点与也具有不同颜色的线连接,则必须将它们绘制为单独的线,并分别为每条线提供颜色:
plot([X(1:end-1)' ; X(2:end)'], [Y(1:end-1)' ; Y(2:end)']);
这些线条现在具有默认颜色,但是要获得正确的颜色有点麻烦,接下来是一个示例。不幸的是,我现在没有任何方法可以在这样的单行中输入颜色,所以我们必须循环。
Ncolors=10;
zmin=min(Z);zmax=max(Z);
dz=max((zmax-zmin)/Ncolors,eps);
clr_map=jet(Ncolors);
clr_ids=min(floor((Z(1:end-1)-zmin)/dz)+1,Ncolors);
figure;hold on;
for ii=1:numel(X)-1
plot([X(ii) X(ii+1)], [Y(ii) Y(ii+1)],'color',clr_map(clr_ids(ii),:))
end
所有线条现在都具有基于其端点之一的颜色。
要添加colorbar,请使用colorbar
,很奇怪吧?但当然,该条的标签指的是colororder。幸运的是,我们可以更改它们:
colormap(clr_map);
h_cb=colorbar;
set(h_cb,'yticklabel',arrayfun(@num2str,linspace(zmin,zmax,numel(get(h_cb,'ytick'))),'uni',false));
更改Ncolors
以使用更多/更少的分辨率为线条着色。
可能矫枉过正:您还可以更改颜色栏上的标签数量,以下将其更改为 10:
colormap(clr_map);
h_cb=colorbar;
set(h_cb,'ytick',linspace(1,Ncolors,10));
set(h_cb,'yticklabel',arrayfun(@num2str,linspace(zmin,zmax,10),'uni',false));
或者现在标签只有 2 位小数:
set(h_cb,'yticklabel',arrayfun(@(yi) sprintf('%.2g',yi),linspace(zmin,zmax,10),'uni',false));
绘图方法#3
最后一种方法是使用补丁(速度较慢),此处针对 3d 案例进行了说明,因此您可以根据需要从那里开始。