对散点图进行密度统计并画出其相应的热力图,主要使用两个函数,一个是histcounts2和imagesc两个函数,下面我们依次进行说明。其他的相关函数还有hist3,contourf,histgram等。
虽然官网有很多说明,但是不够实用。
要说明的主要是利用histcounts2得到的二维矩阵,其不能直接用imagesc或者surf画图。
给定两个一维矩阵,画出散点图:
下面统计散点图中散点的密度分布图或者热力图:
利用其中的横坐标或者纵坐标的值直接手动统计散点图中的散点密度:
对比上面手动计数的二元直方图和histcounts2得出的频数矩阵N,可以得出结论,前者是后者矩阵旋转90度的结果。
- 下面介绍imagesc函数的用法
直接对前面N进行画图,运行imagesc(N),得到下图:
观察发现其与N矩阵的分布是一致的,但是纵坐标轴是反向的,所以在用imagesc函数画图的时候,需要添加set(gca,'YDir','normal'),作用是翻转纵坐标轴,但是在翻转坐标轴的时候,图中的数据也会跟着翻转,所以在对N画图之前,不光是要逆时针旋转90度,而且还需要再沿纵坐标翻转整个矩阵,最终的形式为imagesc(flipud(rot90(N))),其中rot90可以使矩阵逆时针90度翻转,flipud可以使矩阵上下翻转。
下面有一实例:
[N,Xedges,Yedges] = histcounts2(entropy(:,1),entropy(:,2),[50,50]);
max1=max(entropy(:,1))
max2=max(entropy(:,2))
min1=min(entropy(:,1))
min2=min(entropy(:,2))
%N=fliplr(N);
figure(1);
N1=flipud(rot90(N)); %N逆时针旋转90度为想要的矩阵,上下翻转主要是保证后面纵坐标正向
%N2=N1./max(max(N));
imagesc([min1,max1],[min2,max2],N1);
set(gca,'YDir','normal'); %由于imagesc纵坐标轴默认为反向,所以需要改为正方向
colorbar;
xlabel('△S_{traj}','Fontweight','bold','FontSize',20);
ylabel('△S_{syst}','Fontweight','bold','FontSize',20);
set(gca,'FontSize',20,'Fontweight','bold'); %调节坐标轴字体大小粗细
下面是上面程序运行的结果。