在数据可视化中,三维散点图是一种非常直观的方式来展示数据的分布。MATLAB 提供了强大的 scatter3
函数,可以用来绘制三维散点图,而通过调整点的颜色和大小,可以进一步增强图形的表现力。
在本篇博客中,我们将逐步讲解如何使用 MATLAB 读取 Excel 文件中的数据,并绘制四个子图。每个子图中的点的颜色和大小将根据 X、Y、Z 坐标值及其离原点的距离进行映射。让我们一起动手实现这个可视化效果吧!
步骤 1:导入数据
假设我们有一个名为 data.xlsx
的 Excel 文件,其中包含三列数据:X 坐标、Y 坐标和 Z 坐标。这些数据将作为绘图的基础。我们首先使用 MATLAB 的 readtable
函数来导入 Excel 文件中的数据。
步骤 2:计算点的大小
为了使每个点的大小与数据的某些特征相关联,我们可以根据坐标的值或者离原点的距离来调整点的大小。例如,可以将 X、Y、Z 的值映射到点的大小,或者根据每个点到原点的距离来调整大小。
步骤 3:设置颜色映射
MATLAB 的 scatter3
函数允许我们根据数据的值映射点的颜色。在本例中,我们将使用 cool
渐变色来表示不同的数值。cool
渐变色是一种从蓝色到粉色的渐变色,非常适合这种数据映射。
我们可以通过 scatter3
函数的第二个参数来指定每个点的颜色,颜色将根据不同的坐标或距离值进行映射。
步骤 4:绘制图形
接下来,我们将绘制四个子图,每个子图展示不同的映射方式。我们使用 subplot
函数将一个图形窗口分成四个子图。
- 子图 1:点的颜色根据 X 坐标值映射,点的大小也根据 X 坐标值进行调整。
- 子图 2:点的颜色根据 Y 坐标值映射,点的大小根据 Y 坐标值进行调整。
- 子图 3:点的颜色根据 Z 坐标值映射,点的大小根据 Z 坐标值进行调整。
- 子图 4:点的颜色根据离原点的距离映射,点的大小也根据距离进行调整。
步骤 5:保存图像
在图形完成后,我们可以使用 print
函数将其保存为一个高分辨率的 JPEG 文件
代码:
Matlab
clc;
clear;
close all;
%% 导入数据
data = readtable('data.xlsx'); % 读取 Excel 文件
X = data.X; % X 坐标
Y = data.Y; % Y 坐标
Z = data.Z; % Z 坐标
%% 计算距离原点的距离
distance = sqrt(X.^2 + Y.^2 + Z.^2); % 计算每个点与原点的距离
%% 计算点的大小(可以根据实际需要进行缩放调整)
k=200;
sizeX = X / max(X) * k; % 根据 X 坐标映射大小
sizeY = Y / max(Y) * k; % 根据 Y 坐标映射大小
sizeZ = Z / max(Z) * k; % 根据 Z 坐标映射大小
sizeDistance = distance / max(distance) * k; % 根据距离映射大小
%% 颜色渐变设置
colormap('cool'); % 使用 cool 渐变色
%% 绘制图形
% 子图 1: 根据 X 映射颜色和大小
ax1 = subplot(221);
scatter3(X, Y, Z, sizeX, X, 'filled'); % 点的大小根据 X 坐标,颜色根据 X 坐标变化
colormap(ax1, 'cool'); % 使用 cool 渐变色
colorbar; % 显示颜色条
xlabel('X', 'Fontname', '微软雅黑');
ylabel('Y', 'Fontname', '微软雅黑');
zlabel('Z', 'Fontname', '微软雅黑');
title('根据 X 坐标映射颜色和大小', 'Fontname', '微软雅黑');
% 子图 2: 根据 Y 映射颜色和大小
ax2 = subplot(222);
scatter3(X, Y, Z, sizeY, Y, 'filled'); % 点的大小根据 Y 坐标,颜色根据 Y 坐标变化
colormap(ax2, 'cool');
colorbar;
xlabel('X', 'Fontname', '微软雅黑');
ylabel('Y', 'Fontname', '微软雅黑');
zlabel('Z', 'Fontname', '微软雅黑');
title('根据 Y 坐标映射颜色和大小', 'Fontname', '微软雅黑');
% 子图 3: 根据 Z 映射颜色和大小
ax3 = subplot(223);
scatter3(X, Y, Z, sizeZ, Z, 'filled'); % 点的大小根据 Z 坐标,颜色根据 Z 坐标变化
colormap(ax3, 'cool');
colorbar;
xlabel('X', 'Fontname', '微软雅黑');
ylabel('Y', 'Fontname', '微软雅黑');
zlabel('Z', 'Fontname', '微软雅黑');
title('根据 Z 坐标映射颜色和大小', 'Fontname', '微软雅黑');
% 子图 4: 根据离原点的距离映射颜色和大小
ax4 = subplot(224);
scatter3(X, Y, Z, sizeDistance, distance, 'filled'); % 点的大小根据离原点的距离,颜色也根据距离变化
colormap(ax4, 'cool');
colorbar;
xlabel('X', 'Fontname', '微软雅黑');
ylabel('Y', 'Fontname', '微软雅黑');
zlabel('Z', 'Fontname', '微软雅黑');
title('根据离原点的距离映射颜色和大小', 'Fontname', '微软雅黑');
%% 保存图像
print(gcf, 'scatter_plot_output_with_size.jpg', '-djpeg', '-r900');