美文网首页基于R、python的科研绘图
基于Matlab的密度散点图绘制-从数据分析到完整出图

基于Matlab的密度散点图绘制-从数据分析到完整出图

作者: 画长空_yin | 来源:发表于2019-08-19 18:54 被阅读7次

    在计算两幅图像像元水平上的相关性时,由于图像的分辨率高,导致直接画散点图根本就体现不出来大致的趋势,因此需要用密度散点图来进行刻画。散点密度图的核心是在x和y的范围内找到在这个范围内的点的数量,需要合理选择x和y的区间。
    首先本文这里以两幅ET的数据作为样例,分辨率为1000m,值的区间再8到1100,两者的最大差距不超过800,选择以5作为两幅图像的间隔,提取如下代码

    %  author yinlichang3064@163.com
    filemean='I:\蒸散发\各ET的均值和趋势\yr_SSEB_2003-2013年ET的均值.tif';
    sseb=importdata(filemean);
    filemean='I:\蒸散发\各ET的均值和趋势\yr_SSEBopYRB_2003-2013年ET的均值.tif';
    ssebop=importdata(filemean);
    sy1=find(sseb>0 & ssebop>0); %找到两者的有效值
    sseb_1=double(sseb(sy1));
    ssebop_1=double(ssebop(sy1));
    valuesum=zeros(47961,3); %以47961是因为8:5:1100的长度为219,219的平方为47961
    k=1;
    for i=8:5:1100 %sseb
        sy=find(sseb_1>=i & sseb_1<i+5);
        j1=i+800;
        j2=i-800;
        if j1>1100
            j1=1100;
        end
        if j2<8
            j2=8;
        end
        for j=j2:5:j1 %ssebop
           sy2= find(ssebop_1>=j & ssebop_1<j+5);
           sy3=intersect(sy,sy2);
           cd=length(sy3);
           if length(cd)>0
               value=[i,j,cd];
               valuesum(k,:)=value;
           end
           k=k+1;
        end
    end
    

    通过上述代码就可以得到valuesum变量,该变量中第一列存储的是sseb的值,第二列是ssebop的值,第三列是两幅图像处于这个区间的值的数量。通过scatter函数即可以画出散点密度图,但较为粗糙,需要对图像进行修饰,采用如下代码

    author yinlichang3064@163.com
    set(gcf,'Units','centimeters','Position',[6 6 14 13]); %设置图像位置和大小
    valuesum_sseb=valuesum(valuesum(:,3)>0,:);
    scatter(valuesum_sseb(:,1),valuesum_sseb(:,2),[],valuesum_sseb(:,3),'.')
    set(gca,'Xlim',[0,1100],'Ylim',[0,1100],'XTick',[0:300:1100],'YTick',[0:300:1100])
    ylabel('ET_S_S_E_B_o_p_Y_R_B','Fontname', 'Times New Roman','FontSize',12); %下标
    hold on
    h1=refline(1,0) %辅助1:1线
    h2=refline(0.3428,284.4) %拟合线获取
    set(h1,'color','black','linewidth',1.5)
    set(h2,'color','red','linewidth',1.5)
    text(100,1000,'R^2=0.51')
    text(100,900,'N=798125')
    text(800,100,'ET_S_S_E_B_o_p_G_l_o')
    

    运行效果如下图所示


    sseb.jpg

    想输出高分辨图像,采用文件-导出设置,在该对话框中采用渲染工具,并设置分辨率为600,然后导出为jpg格式即可,单个图像的话可以增加colorbar,具体设置如下,直接在最后一行加上这句

    colorbar([0.91 0.11 0.03 0.81]) 
    

    颜色表征了数量的多少,红色表示拟合线,黑色表示1:1的线下图是用另外数据同样流程制作的。


    example.jpg

    相关文章

      网友评论

        本文标题:基于Matlab的密度散点图绘制-从数据分析到完整出图

        本文链接:https://www.haomeiwen.com/subject/embesctx.html