利用三列數據,創建矩陣,以繪制等高線圖。只適用於對齊的數據,否則需要插值。
函數:
function colplot(data,nums,p,leg)
%data:待繪圖的數據,每列一個變量
%nums:繪圖所用數據所在列1×3,依次為顏色、橫坐標、縱坐標
%p:繪制類型
%legfun:圖例
ux=unique(data(:,nums(2)));
uy=unique(data(:,nums(3)));
if size(data,1)~=length(ux)*length(uy)
warning('數據部分缺失,圖像部分空白。');
end
[X, Y] = meshgrid(ux,uy);
%考慮到原數據的順序問題,這里並沒有直接轉換,速度稍慢
Z = nan(size(X));
for i=1:size(X,1)
for j=1:size(X,2)
try
Z(i,j)=data(data(:,nums(2))==X(i,j) & ...
data(:,nums(3))==Y(i,j),nums(1));
catch
continue
end
end
end
if p=='c'
contourf(X, Y, Z);
elseif p=='p'
pcolor(X, Y, Z);
elseif p=='i'
pcolor(X, Y, Z);
shading interp;
end
c = colorbar;
c.Label.String = leg;
end
測試:
n=10;
a=1:n;
x=repmat(a,1,n);
y=repelem(a,1,n);
z=x./(y+1);
data=[x',y',z'];
colplot(data,[3,1,2],'i','z');
xlabel('x');ylabel('y');

colplot(data,[3,1,2],'c','z');
xlabel('x');ylabel('y');

如有部分數據缺失,將在圖像上留白:
colplot(data(1:85,:),[3,1,2],'c','z');
xlabel('x');ylabel('y');

colplot(data(1:85,:),[3,1,2],'i','z');
xlabel('x');ylabel('y');

