求MATLAB实现指定四维度λ参数-NMI散点图的代码
修正后的MATLAB四维度分层散点图代码
以下是可以正确重现目标分层散点图的代码,针对原代码的问题做了关键修正:
lambda1 = [0, 1e-6, 1e-5, 1e-4, 1e-3]; % Z轴:λ₁ lambda2 = [0, 0.01, 0.1, 1, 10, 100, 1000]; % X轴:λ₂ lambda3 = [0, 0.5, 0.75, 1, 1.25, 1.5, 2]; % Y轴:λ₃ % 生成模拟NMI数据(维度对应:lambda3 × lambda2 × lambda1) NMI = rand(length(lambda3), length(lambda2), length(lambda1)); figure; hold on; colormap('turbo'); scatterSize = 50; % 散点大小 for i = 1:length(lambda1) % 生成网格数据 [L2, L3] = meshgrid(lambda2, lambda3); % 提取当前λ₁对应的NMI数据 layerNMI = NMI(:,:,i); % 处理X轴(λ₂)的log刻度,避免0的log10错误 x = log10(max(L2(:), eps)); % 处理Y轴(λ₃)的log刻度,λ₃中的0同样处理 y = log10(max(L3(:), eps)); % Z轴固定为当前λ₁值 z = lambda1(i) * ones(size(x)); % 颜色对应NMI数值 c = layerNMI(:); scatter3(x, y, z, scatterSize, c, 'filled'); end % 修正轴标签对应关系 xlabel('\lambda_2 (log_{10})'); ylabel('\lambda_3 (log_{10})'); zlabel('\lambda_1'); % 设置Z轴为对数刻度,适配λ₁的数值跨度 set(gca, 'ZScale', 'log'); % 避免Z轴log刻度显示异常(处理0值) set(gca, 'ZLim', [min(lambda1(lambda1>0))/10, max(lambda1)*10]); colorbar; caxis([0, 1]); % 统一颜色范围 title('3D Parameter Grid with NMI'); grid on; view(3); hold off;
关键修正说明
- 轴标签匹配:修正原代码X/Y轴标签颠倒的问题,确保λ₂对应X轴、λ₃对应Y轴。
- log刻度异常处理:对λ₂和λ₃中的0值,用
eps(MATLAB最小浮点数)替换后再取log10,避免出现-inf导致的散点丢失。 - NMI维度索引修正:调整NMI数据的提取维度,确保当前λ₁分层对应正确的NMI数值集合。
- Z轴显示优化:将Z轴设置为对数刻度,解决λ₁数值跨度大导致的分层重叠问题,同时调整Z轴范围避免0值在log刻度下的显示异常。
- 颜色一致性:保持所有层的
caxis范围统一,确保相同NMI数值对应相同颜色。
内容的提问来源于stack exchange,提问作者icfs22 2024
相关产品推荐
相关产品推荐

