matlab散点图+趋势线+评价指标(科研制图)

该博客展示了如何使用MATLAB创建自定义颜色的散点图,并进行线性拟合及评价指标计算。代码中包括了颜色设置、字体大小设定、散点图、拟合线和1:1线的绘制,以及评价指标如R²、BIAS、RMSE和MAE的文本显示。此外,还提供了图片输出和子图组合的参考。
摘要由CSDN通过智能技术生成

先上效果图

如果觉得这个颜色丑,可以自行调整颜色。colorbar的自定义可以参考之前的文章

代码如下。

function out = scatter_pzp(x,y,z,xlim,ylim,xtitle,ytitle)

%% 圏片尺寸没置(単位:厘米)
figureUnits = 'centimeters';
figureWidth = 9;
figureHeight = 8.5;
figureHandle = figure;
set(gcf, 'Units', figureUnits, 'Position', [0 0 figureWidth figureHeight]);
set(gcf,'ToolBar','none','ReSize','off');   % 移除工具栏
set(gcf,'color','w'); % 背景设为白色
hold on

%% 颜色设置
C1 = [241 64 64] ./ 255; % origin里的红色
C2 = [26 111 223] ./ 255;% origin里的蓝色

%% 字体大小设置
font_size = 8;

%% 评价指标计算
p=polyfit(x,y,1);%一次拟合;
yfit=polyval(p,x);%求拟合后的y值;
mdl = fitlm(x,y);%求一元线性拟合的参数
r2 = num2str(mdl.Rsquared.Ordinary,'%.3f');% 即一元线性拟合的R平方
RMSE = num2str(sqrt(sum((y-x).^2)/length(x)),'%.3f'); 
BIAS = num2str(mean(x - y),'%.3f');
% RMB = num2str((sum(y)/length(y))/(sum(x)/length(x)),'%.3f');
MAE = num2str(sum(abs(y-x))/length(x),'%.3f');
a = num2str(p(1),'%.2f');%即y=ax+b中的a值
b = num2str(abs(p(2)),'%.2f');%即y=ax+b中的b值

%% 散点绘制; 大小颜色样式
Plot1 = scatter(x,y,[],z,'.');
colormap(m_colmap('diverging'));   % m_colmap('BOD')    ncl_colormap_pzp('cmocean_deep')
caxis([0.8,1.2]) % colorbar的范围
% colorbar
hold on;

%% 拟合线绘制
Plot2 = plot(x,yfit,'-','Color','black','LineWidth',1) 
%% 1:1线绘制
Plot3 = plot([min(xlim),max(xlim)],[min(ylim),max(ylim)],'--','Color','black','LineWidth',1);

if p(1,2) > 0
    text('Position',[xlim(1,2) / 20,ylim(1,2) * 0.9],'String',['y = ',a,'x + ',b],'FontName','Times New Roman','fontsize',font_size,'Color','black');
end
if p(1,2) < 0
    text('Position',[xlim(1,2) / 20,ylim(1,2) * 0.9],'String',['y = ',a,'x - ',b],'FontName','Times New Roman','fontsize',font_size,'Color','black');
end

%% 添加评价指标文本
text('Position',[xlim(1,2) / 20,ylim(1,2) * 0.82],'String',['R^2 = ',r2],'FontName','Times New Roman','FontSize',font_size)
text('Position',[xlim(1,2) / 20,ylim(1,2) * 0.74],'String',['BIAS = ',BIAS],'FontName','Times New Roman','FontSize',font_size)
text('Position',[xlim(1,2) / 20,ylim(1,2) * 0.66],'String',['RMSE = ',RMSE],'FontName','Times New Roman','fontsize',font_size);
text('Position',[xlim(1,2) / 20,ylim(1,2) * 0.58],'String',['MAE =  ',MAE],'FontName','Times New Roman','fontsize',font_size);

%% 添加标题
%htitle = title('25℃')%标题

%% 添加x和y轴标签
hXLabel = xlabel(xtitle)%这里是x轴的标签
hYLabel = ylabel(ytitle)%这里是y轴的标签

%% 创建 legend
hLegend = legend([Plot1,Plot2,Plot3], ...
'Enhanced pixels','Liner regression line','1:1 line',...
'Location', 'southeast',...
'Orientation','vertical',...
'TextColor', 'black');

% 如果需要微调位置
% P = hLegend.Position;
% hLegend.Position = P + [ 0.03 0.03 0 0];

%% 设置字体和字号
set(gca,'FontName','Times New Roman','FontSize',font_size);
set([hXLabel,hYLabel],'FontName','Times New Roman','FontSize',font_size)
% set(htitle,'FontName','Times New Roman','FontSize',12,'FontWeight','bold')

%% 设置坐标轴
set(gca, 'Box', 'on', ...                                % 边框
         'XGrid', 'on', 'YGrid', 'on', ...               % 网格
         'TickDir', 'out', 'TickLength', [.01 .01], ...   % 刻度
         'XMinorTick', 'off', 'YMinorTick', 'off', ...    % 小刻度
         'XColor', [.1 .1 .1],  'YColor', [.1 .1 .1],...  % 坐标轴颜色
         'Xlim' ,[min(xlim),max(xlim)],'Ylim' ,[min(ylim),max(ylim)], ...          % 坐标轴范围
         'LooseInset',[0,0,0,0])          
%暂时没用到的     
%          'XTick', 0:0.1:1.2,  'YTick', 0:0.05:0.5,...     % 刻度位置、间隔
%          'Xticklabel',{[0:0.1:1.2]},...                   % X坐标轴刻度标签
%          'Yticklabel',{[0:0.05:0.5]},...                  % Y坐标轴刻度标签
%% 图片输出
fileout = 'test';
print(figureHandle,[fileout, 'png'],'-r300','-dpng');
end

对于多个子图的组合,可以参考这篇。不过使用ppt对多个图进行排版也很方便,如果图不是那么多的话。

知乎参考链接

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值