Matlab中使用for循环批量绘制scatter3三维散点图问题求助
批量绘制三维散点图异常的解决方法
问题描述
我有一个41行100列的数据集,每行代表一个样本,包含已知的细胞浓度(x)、存活率(y),以及频率扫描(z)下的100组测量数据(c)。最终目标是绘制数据集的曲面图,目前先尝试绘制散点图后续再做插值处理,但用for循环批量绘制所有样本时,图形变成了颜色异常的2D散点图,单一样本的scatter3图可以正常绘制,求正确批量绘制所有样本三维散点图的方法。
模拟数据集代码
%Example x= randi(100,1,41); %concentration x= transpose (x); x= repmat (x,1, 100); y= randi(100,1,41); %viability y= transpose (y); y= repmat (y,1, 100); z= linspace(1,100,100); %frequency z = repmat (z, 41, 1); c= randi(100, 41,100); %measured data %Practice plotting a single row (one sample) figure (1) scatter3(x(1,:),y(1,:),z(1,:),30,c(1,:),'filled'); colormap(turbo) colorbar xlabel('x') ylabel('y') zlabel('z') title('Single Sample from one row') % Plot all samples using a FOR loop for j = 1:length(x) figure(2) hold on scatter3(x(j,:),y(j,:),z(j,:),30,c(j,:),'filled'); colormap(turbo) colorbar xlabel('x') ylabel('y') zlabel('z') j=j+1; end
效果图说明
- 错误效果图(for循环批量绘制):颜色异常的2D散点图
- 正确单样本效果图:正常的三维散点图
错误原因分析
- 循环次数错误:
length(x)针对41×100的矩阵返回的是100(矩阵的最大维度长度),而非样本数41,导致循环遍历了前100列而非41个样本 - 冗余操作:循环内手动执行
j=j+1是多余的,for循环会自动完成迭代递增 - 重复设置绘图属性:循环内重复添加colorbar、设置坐标轴标签和colormap,会导致图形渲染混乱
- hold on位置不合理:虽然每次循环调用
figure(2)不会新建窗口,但重复开启hold on会干扰绘图状态
修正后的代码
% 模拟数据集 x= randi(100,1,41); % 细胞浓度 x= transpose(x); x= repmat(x,1, 100); y= randi(100,1,41); % 存活率 y= transpose(y); y= repmat(y,1, 100); z= linspace(1,100,100); % 频率扫描 z = repmat(z, 41, 1); c= randi(100, 41,100); % 测量数据 % 单一样本绘制(正常) figure(1) scatter3(x(1,:),y(1,:),z(1,:),30,c(1,:),'filled'); colormap(turbo) colorbar xlabel('细胞浓度(x)') ylabel('存活率(y)') zlabel('频率(z)') title('单一样本三维散点图') % 修正后的批量绘制代码 figure(2) hold on % 仅在循环前开启一次hold on num_samples = size(x, 1); % 获取样本总数(41个) for j = 1:num_samples scatter3(x(j,:),y(j,:),z(j,:),30,c(j,:),'filled'); end % 统一设置全局绘图属性 colormap(turbo) colorbar xlabel('细胞浓度(x)') ylabel('存活率(y)') zlabel('频率(z)') title('所有样本三维散点图') hold off % 结束绘图后关闭hold状态
修正点说明
- 用
size(x,1)获取样本的行数(41),确保循环遍历所有样本 - 将
hold on、坐标轴标签、colormap、colorbar等设置移至循环外,避免重复执行导致的图形异常 - 删除循环内冗余的
j=j+1语句,依赖for循环的自动迭代 - 循环结束后添加
hold off,规范绘图环境状态
内容的提问来源于stack exchange,提问作者Alicia
相关产品推荐
相关产品推荐

