You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab散点图绘制:如何通过等效查找表定义颜色与符号?

解决Matlab gramm库中类别与标记/颜色绑定的问题

核心思路

手动创建固定的映射规则,将物种与标记、聚类组与颜色一一绑定,再传递给gramm绘图逻辑,确保不同图表间的映射关系完全一致,不受单张图表中类别是否齐全的影响。

具体实现步骤

1. 定义固定映射关系

提前写死物种到标记、聚类组到颜色的对应关系,示例:

% 物种-标记映射(可根据你的实际物种扩展)
species_markers = containers.Map(...
    {'牛', '马', '鹿'}, ...
    {'o', 's', 'd'});       % 对应Matlab支持的标记符号

% 聚类组-颜色映射(可替换为你需要的RGB值或配色方案)
cluster_colors = containers.Map(...
    {'移动组', '定居组', '混合组'}, ...
    {[0.1 0.4 0.6], [0.8 0.2 0.2], [0.2 0.7 0.3]});

如果习惯用数组操作,也可以将物种/聚类组转为categorical类型,再按分类顺序绑定标记和颜色。

2. 预处理数据生成对应列

在你的数据表中新增两列,通过映射规则将每个样本的物种、聚类组转换为对应的标记和颜色:

% 假设数据表为table类型,包含species(物种)、cluster(聚类组)列
data.marker = cellfun(@(x) species_markers(x), data.species, 'UniformOutput', false);
data.color = cellfun(@(x) cluster_colors(x), data.cluster, 'UniformOutput', false);

3. 传递映射到gramm绘图

在gramm初始化后,手动指定标记和颜色的来源,覆盖其自动分配逻辑:

% 初始化gramm,关联同位素数据和分类字段
g = gramm('x', data.isotope_x, 'y', data.isotope_y, ...
    'group', data.site); % 按站点分组实现亮度控制

% 绑定预处理好的标记和颜色
g.points().set('Marker', data.marker).set('Color', data.color);

% 按站点设置亮度(根据你的需求调整alpha值规则)
site_alpha_map = containers.Map({'站点A', '站点B'}, {0.7, 0.9});
g.set('MarkerFaceAlpha', cellfun(@(x) site_alpha_map(x), data.site));

g.draw();

4. 统一图例(可选)

如果不同图表的类别不全,手动生成全局统一图例,避免图例条目缺失:

% 生成物种图例条目
species_legend = [];
for key = species_markers.keys
    species_legend = [species_legend, plot(NaN, NaN, 'Marker', species_markers(key), ...
        'Color', 'k', 'DisplayName', key)];
end

% 生成聚类组图例条目
cluster_legend = [];
for key = cluster_colors.keys
    cluster_legend = [cluster_legend, plot(NaN, NaN, 'Marker', 'o', ...
        'Color', cluster_colors(key), 'DisplayName', key)];
end

legend([species_legend, cluster_legend]);

后续扩展优势

后续需要切换颜色对应规则(比如改为按岩性分类),仅需修改cluster_colors映射字典即可,无需改动核心绘图逻辑,完全适配标准化图表的需求。

内容的提问来源于stack exchange,提问作者Derek Hamilton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 17:40:05