MATLAB技巧:如何绘制散点图‌

摘要

    绘图是一种很好的表达方式,科研学习中尤其重要。分享一段绘图的代码,希望对看到这篇文章的人提供点帮助。尤其是各位男同学,给我的文章投币点赞收藏,说不定就能用来帮到你的学妹们。

1 引言

     在科研写作的时候难免会需要绘制数学模型的散点图,然而对于MATLAB而言,仅仅依靠一句plot绘制出来的图美观上有所欠缺。因此我在自己科研过程中自己编写了一个函数用于绘制散点图,其中包括训练集、验证集的实测值、预测值散点;拟合回归线;1:1线;置信区间。

2 数据与方法

    数据总共两组,第一组为训练集的实测值以及训练模型后内部验证的预测值(YC表示),第二组为验证集的实测值以及运用模型计算得到的预测值(YP表示)。PS:YC、YP均为列数为2的矩阵,第一列为实测值结果,第二列为预测值结果。

    在MATLAB中建立function文件,输入以下代码:

function []=F_plotdraw_V1(YC,YP,Result)

%画散点图函数

    y1_hat=YC(:,2);%预测值

    y1=YC(:,1);%实测值

    %预测样本

    y2_hat=YP(:,2);

    y2=YP(:,1);

    %% 对散点做回归线

    A=ones(length(y1),1);

    b=regress(y1_hat,[A,y1]);

    

    %% 预测区间绘制

    T=[y1 y1_hat;y2 y2_hat;];%取值的最大值和最小值,主要是方便确定绘图范围

    l=max(max(T))-min(min(T));%取值范围

    x=(min(min(T))-0.3*l:0.05*l:max(max(T))+0.3*l);%横轴范围

    y=b(1)+b(2)*x;

    

    n=length(y1);%样本数

    mean_y1=mean(y1);%相当于回归方程中的X

    mean_y1_hat=mean(y1_hat);%相当于回归方程中的Y

    lxx=sum((y1-mean_y1).^2);

%     lxx=sum(y1.^2)-1/n*(sum(y1).^2);

    lxy=sum((y1-mean_y1).*(y1_hat-mean_y1_hat));

%     lxy=sum(y1.*y1_hat)-1/n*(sum(y1))*(sum(y1_hat));

    lyy=sum((y1_hat-mean_y1_hat).^2);

%     lyy=sum(y1_hat.^2)-1/n*(sum(y1_hat).^2)

    sig_=1/(n-2)*(lyy-lxy/lxx*lxy);%sigma2的无偏估计

    detax=tinv(0.025,n-2)*sqrt(1+1/n+(x-mean_y1).^2/lxx)*sqrt(sig_);%公式中的x_为样本变量均值,对应此处的y1_

    y_up=b(1)+b(2)*x+detax;%上置信区间

    y_floor=b(1)+b(2)*x-detax;%下置信区间

    %% 画图部分

    figure;plot(y1,y1_hat,'s','MarkerFacecolor',[0.18 0.54 0.34],'Markersize',8);hold on;

    plot(y2,y2_hat,'s','MarkerFacecolor',[0.54 0.18 0.34],'Markersize',8);hold on;

    plot(x,y,'-','Color',[1 0 0],'LineWidth',2);hold on;%散点图回归线

    plot(x,x,'--','Color',[0.5 0.5 0.5],'LineWidth',1.25);hold on;%1:1线

    patch([x';flipud(x')],[y_up';flipud(y_floor')],'r','FaceA',.1,'EdgeA',0);

    xlabel('Observed values(mg/kg)');ylabel('Predicted values(mg/kg)')

%     legend('Calibration set','Validation set','Regression line','1:1 line','Confidence interval(α=0.05)');

    

    set(gca,'Xlim',[min(x),max(x)]);

    set(gca,'Ylim',[min(x),max(x)]);

    set(gca,'FontSize',17,'Fontname', 'Times New Roman');

if nargin>=3

    hold on;

    h=text(min(x)+0.05*l,max(x)-0.1*l,['RMSEP=',num2str(Result(1))]);

    set(h,'FontSize',14,'Fontname', 'Times New Roman');

    hold on;

    h=text(min(x)+0.05*l,max(x)-0.25*l,['R^2_p=',num2str(Result(2))]);

    set(h,'FontSize',14,'Fontname', 'Times New Roman');

    hold on;

    h=text(min(x)+0.05*l,max(x)-0.40*l,['RPD=',num2str(Result(3))]);

    set(h,'FontSize',14,'Fontname', 'Times New Roman');

end

end

然后即可在命令窗口中调用此函数。当然同学们也可以对代码做点简单的修改。

3 结果

散点图绘制效果

4 结论 

    我把你画成花,未开的一朵花,再把思念一点一滴画成雨落下……

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空