MATLAB散点图按Location分组着色正确性验证及图例设置求助
问题解答
原代码的正确性
你的scatter(Channel1,Channel2,[], location)代码语法上是合法的,可以实现按Location数值对散点着色:MATLAB的scatter函数第四个参数接受数值向量,会将向量值映射到当前颜色图生成对应颜色。但这个写法存在关键问题:所有散点是一次性绘制的,没有为每个Location分组创建独立的绘图对象,因此无法直接生成对应每个分组的图例。
图例设置的解决方案
要生成对应9个Location的正确图例,需要按分组单独绘制每个Location的数据点,为每个分组创建独立的绘图句柄,具体实现代码如下:
% 1. 读取CSV数据 data = readtable('你的数据文件名.csv'); % 2. 获取所有唯一的Location值 unique_locs = unique(data.Location); % 3. 定义颜色(用颜色图生成9种区分度高的颜色) group_colors = colormap(viridis(9)); % viridis是高区分度颜色图,也可替换为parula/jet等 % 4. 创建画布并分分组绘制散点 figure; hold on; for idx = 1:length(unique_locs) current_loc = unique_locs(idx); % 筛选当前Location对应的数据 loc_mask = data.Location == current_loc; % 绘制当前分组的散点,指定颜色并填充 scatter(data.Channel1(loc_mask), data.Channel2(loc_mask), [], group_colors(idx,:), 'filled'); end % 5. 添加图例、坐标轴标签和标题 legend(string(unique_locs), 'Location', 'best'); xlabel('Channel1'); ylabel('Channel2'); title('按Location分组的散点图'); hold off;
代码说明
- 按
Location分组循环绘制,每个分组对应一个scatter对象,图例可直接关联每个分组的绘图句柄,显示对应的Location值。 'filled'参数让散点更醒目,方便区分不同分组。- 选择
viridis这类颜色图,能保证9个分组的颜色有足够区分度,避免相近颜色难以分辨。
内容的提问来源于stack exchange,提问作者ofithch79
相关产品推荐
相关产品推荐

