任务描述:已有散点图,想画密度图,效果如下
网上很多方法都太麻烦了,废话不多说,直接贴代码:
clc
clear
close all
figure(1)
X = [DI,Er]; %DI Er 是两个列向量
N = hist3(X,'CdataMode','auto','Ctrs',{0:0.005:3 0:0.005:1.4}); % N的值正是密度
% N是一个二维矩阵,Size大小由Ctrs决定,此处是280*600,因为0.005*600=3 , 0.005*280=1.4
N = flipud(N'); %转置是为了将矩阵的横纵轴与我们熟悉的xy方向对应一致
N(N==0)=nan; %零值设为nan是为了之后以isnan判断的方式将个数为零的格子涂为白色
h = imagesc(N); %生成N的二维矩阵,矩阵的值是密度
set(h,'alphadata',~isnan(N)) %将nan值涂为白色,否则就会显示为背景色(蓝色)
%% =================以下就是我自己的一些作图美观设置,可作参考,但没有也没事
hco = colorbar;
set(get(hco,'label'),'string','Counts','FontSize',18,'Fontname', 'Arial');
caxis([0,1000])
ax = gca;
ax.XTickLabel={'0','0.5','1','1.5','2','2.5','3'};
ax.YTick = [0,40,80,120,160,200,240,280];
ax.YTickLabel={'1.4','1.2','1','0.8','0.6','0.4','0.2','0'};
set(gca,'FontSize',15,'Fontname', 'Arial');
ylabel('DI','FontSize',18,'Fontname', 'Arial')
xlabel('Er','FontSize',18,'Fontname', 'Arial')
至于为什么要将零值赋值为nan,请看:Matlab imagesc中将nan、inf或者特定值设为白色
坐标轴调整,请看:matlab手动指定坐标轴位置和标签
hist3的介绍请看:hist3
密度图的坐标轴为什么是反的,请看:matlab 通过hist3画密度图
I hope this would bring some insight to you!