dingdangsunny

利用三列数据,创建矩阵,以绘制等高线图。只适用于对齐的数据,否则需要插值。

函数:

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\');

分类:

技术点:

相关文章:

  • 2021-12-09
  • 2022-01-03
  • 2021-11-30
  • 2021-11-30
  • 2021-05-05
  • 2021-04-22
  • 2021-05-11
猜你喜欢
  • 2021-09-22
  • 2021-07-07
  • 2021-11-30
  • 2021-09-13
  • 2021-07-02
  • 2022-01-20
相关资源
相似解决方案