最近在作图过程中需要对四维、甚至五维数据作图,二维热力图、三维散点图曲面图等等都已经无法满足这样的要求了。而且网上真正使用三维坐标轴绘制热力图的参考内容较少,大多都是二维或者其他不适用的图像,故自行探究整理了相关内容如下。
内容:使用三维散点/气泡图+属性(颜色、大小)对四维数据作图可视化。
使用三维热力图对四维数据进行可视化
一、利用散点图绘制三维热力图
参考文档:三维散点图 scatter3() - MathWorks
1. 使用散点大小体现第四维度数据
【Preliminary】因为本文使用的是Matlab R2020,所以不能使用矩阵作为散点大小的输入,需要使用scatter3(X(:),Y(:),Z(:),sizeNum(:));
(有关解释详见文末)。先明确是否是对应位置散点大小与给定矩阵的关系。
输出散点大小矩阵的page 1:
上图对应于散点图大小矩阵sizeNum的z=1。可以看到,坐标轴的对应(x=1:5,y=0.1:0.5,z=10:50)是没有问题的,但通过sizeNum(:)为参数绘图与其输出的结果对应方式有所不同。图中用红色方框圈出来的部分为x=5,然而在两幅图中并非完全对应。在矩阵sizeNum(:,:,1)中x=5的元素值随着y的增加依次为[16 105 38 51 8],但在三维散点图中却是y=0.5时,随着x的增加散点大小依次为[16 105 38 51 8](因为x=1,x=5对应为两个较小的点,而且x=5时对应为蓝色方框内最小的点,显然不是sizeNum(:,:,1)输出图中的y=0.5的蓝色方框内数据)。
换句话说,就是在使用sizeNum(:)为参数绘图时发生“混乱”,导致两图中红蓝方框内容不匹配。
所以,使用pagetranspose(sizeNum);% 按页转置
实现三维散点图中的(x,y,z)点大小与sizeNum(x,y,z)相匹配。
从而能够得到【完整代码】如下:
[coorX,coorY,coorZ] = meshgrid(1:5,0.1:0.1:0.5,10:10:50);
figure;
% sizeNum = 100; %所有点使用相同的大小
sizeNum = round(rand(5,5,5)*200); %随机生成散点大小矩阵5*5*5
sizeNum2 = pagetranspose(sizeNum);% 按页