做觸屏網(wǎng)站重慶seo教程博客
在數(shù)據(jù)可視化中,三維散點(diǎn)圖是一種非常直觀的方式來(lái)展示數(shù)據(jù)的分布。MATLAB 提供了強(qiáng)大的 scatter3
函數(shù),可以用來(lái)繪制三維散點(diǎn)圖,而通過(guò)調(diào)整點(diǎn)的顏色和大小,可以進(jìn)一步增強(qiáng)圖形的表現(xiàn)力。
在本篇博客中,我們將逐步講解如何使用 MATLAB 讀取 Excel 文件中的數(shù)據(jù),并繪制四個(gè)子圖。每個(gè)子圖中的點(diǎn)的顏色和大小將根據(jù) X、Y、Z 坐標(biāo)值及其離原點(diǎn)的距離進(jìn)行映射。讓我們一起動(dòng)手實(shí)現(xiàn)這個(gè)可視化效果吧!
步驟 1:導(dǎo)入數(shù)據(jù)
假設(shè)我們有一個(gè)名為 data.xlsx
的 Excel 文件,其中包含三列數(shù)據(jù):X 坐標(biāo)、Y 坐標(biāo)和 Z 坐標(biāo)。這些數(shù)據(jù)將作為繪圖的基礎(chǔ)。我們首先使用 MATLAB 的 readtable
函數(shù)來(lái)導(dǎo)入 Excel 文件中的數(shù)據(jù)。
步驟 2:計(jì)算點(diǎn)的大小
為了使每個(gè)點(diǎn)的大小與數(shù)據(jù)的某些特征相關(guān)聯(lián),我們可以根據(jù)坐標(biāo)的值或者離原點(diǎn)的距離來(lái)調(diào)整點(diǎn)的大小。例如,可以將 X、Y、Z 的值映射到點(diǎn)的大小,或者根據(jù)每個(gè)點(diǎn)到原點(diǎn)的距離來(lái)調(diào)整大小。
步驟 3:設(shè)置顏色映射
MATLAB 的 scatter3
函數(shù)允許我們根據(jù)數(shù)據(jù)的值映射點(diǎn)的顏色。在本例中,我們將使用 cool
漸變色來(lái)表示不同的數(shù)值。cool
漸變色是一種從藍(lán)色到粉色的漸變色,非常適合這種數(shù)據(jù)映射。
我們可以通過(guò) scatter3
函數(shù)的第二個(gè)參數(shù)來(lái)指定每個(gè)點(diǎn)的顏色,顏色將根據(jù)不同的坐標(biāo)或距離值進(jìn)行映射。
步驟 4:繪制圖形
接下來(lái),我們將繪制四個(gè)子圖,每個(gè)子圖展示不同的映射方式。我們使用 subplot
函數(shù)將一個(gè)圖形窗口分成四個(gè)子圖。
- 子圖 1:點(diǎn)的顏色根據(jù) X 坐標(biāo)值映射,點(diǎn)的大小也根據(jù) X 坐標(biāo)值進(jìn)行調(diào)整。
- 子圖 2:點(diǎn)的顏色根據(jù) Y 坐標(biāo)值映射,點(diǎn)的大小根據(jù) Y 坐標(biāo)值進(jìn)行調(diào)整。
- 子圖 3:點(diǎn)的顏色根據(jù) Z 坐標(biāo)值映射,點(diǎn)的大小根據(jù) Z 坐標(biāo)值進(jìn)行調(diào)整。
- 子圖 4:點(diǎn)的顏色根據(jù)離原點(diǎn)的距離映射,點(diǎn)的大小也根據(jù)距離進(jìn)行調(diào)整。
步驟 5:保存圖像
在圖形完成后,我們可以使用 print
函數(shù)將其保存為一個(gè)高分辨率的 JPEG 文件
代碼:
clc;
clear;
close all; %% 導(dǎo)入數(shù)據(jù)
data = readtable('data.xlsx'); % 讀取 Excel 文件
X = data.X; % X 坐標(biāo)
Y = data.Y; % Y 坐標(biāo)
Z = data.Z; % Z 坐標(biāo)%% 計(jì)算距離原點(diǎn)的距離
distance = sqrt(X.^2 + Y.^2 + Z.^2); % 計(jì)算每個(gè)點(diǎn)與原點(diǎn)的距離%% 計(jì)算點(diǎn)的大小(可以根據(jù)實(shí)際需要進(jìn)行縮放調(diào)整)
k=200;
sizeX = X / max(X) * k; % 根據(jù) X 坐標(biāo)映射大小
sizeY = Y / max(Y) * k; % 根據(jù) Y 坐標(biāo)映射大小
sizeZ = Z / max(Z) * k; % 根據(jù) Z 坐標(biāo)映射大小
sizeDistance = distance / max(distance) * k; % 根據(jù)距離映射大小%% 顏色漸變?cè)O(shè)置
colormap('cool'); % 使用 cool 漸變色%% 繪制圖形% 子圖 1: 根據(jù) X 映射顏色和大小
ax1 = subplot(221);
scatter3(X, Y, Z, sizeX, X, 'filled'); % 點(diǎn)的大小根據(jù) X 坐標(biāo),顏色根據(jù) X 坐標(biāo)變化
colormap(ax1, 'cool'); % 使用 cool 漸變色
colorbar; % 顯示顏色條
xlabel('X', 'Fontname', '微軟雅黑');
ylabel('Y', 'Fontname', '微軟雅黑');
zlabel('Z', 'Fontname', '微軟雅黑');
title('根據(jù) X 坐標(biāo)映射顏色和大小', 'Fontname', '微軟雅黑');% 子圖 2: 根據(jù) Y 映射顏色和大小
ax2 = subplot(222);
scatter3(X, Y, Z, sizeY, Y, 'filled'); % 點(diǎn)的大小根據(jù) Y 坐標(biāo),顏色根據(jù) Y 坐標(biāo)變化
colormap(ax2, 'cool');
colorbar;
xlabel('X', 'Fontname', '微軟雅黑');
ylabel('Y', 'Fontname', '微軟雅黑');
zlabel('Z', 'Fontname', '微軟雅黑');
title('根據(jù) Y 坐標(biāo)映射顏色和大小', 'Fontname', '微軟雅黑');% 子圖 3: 根據(jù) Z 映射顏色和大小
ax3 = subplot(223);
scatter3(X, Y, Z, sizeZ, Z, 'filled'); % 點(diǎn)的大小根據(jù) Z 坐標(biāo),顏色根據(jù) Z 坐標(biāo)變化
colormap(ax3, 'cool');
colorbar;
xlabel('X', 'Fontname', '微軟雅黑');
ylabel('Y', 'Fontname', '微軟雅黑');
zlabel('Z', 'Fontname', '微軟雅黑');
title('根據(jù) Z 坐標(biāo)映射顏色和大小', 'Fontname', '微軟雅黑');% 子圖 4: 根據(jù)離原點(diǎn)的距離映射顏色和大小
ax4 = subplot(224);
scatter3(X, Y, Z, sizeDistance, distance, 'filled'); % 點(diǎn)的大小根據(jù)離原點(diǎn)的距離,顏色也根據(jù)距離變化
colormap(ax4, 'cool');
colorbar;
xlabel('X', 'Fontname', '微軟雅黑');
ylabel('Y', 'Fontname', '微軟雅黑');
zlabel('Z', 'Fontname', '微軟雅黑');
title('根據(jù)離原點(diǎn)的距離映射顏色和大小', 'Fontname', '微軟雅黑');%% 保存圖像
print(gcf, 'scatter_plot_output_with_size.jpg', '-djpeg', '-r900');