利用三列數據,創建矩陣,以繪製等高線圖。只適用於對齊的數據,否則需要插值。
函數:
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');