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

如何在Matlab中为分类数据分配特定绘图符号并绘制带图例的有效图表

解决MATLAB按品牌分配绘图符号并保留正确X轴标注的问题

我来帮你搞定这个绘图难题!你想要的是在同一张图里按品牌用不同符号展示数据,同时X轴显示每个数据的Name,还要正确显示图例对吧?之前的方法因为数据量不匹配和0值填充踩了坑,下面是完整的解决方案:

完整代码实现

假设你的数据存储在名为dataTable的MATLAB表格里(建议别用table当变量名,避免和MATLAB内置函数冲突),直接运行以下代码就能达到需求:

% 1. 准备数据(这里用你给出的示例数据)
dataTable = table(...
    {'Enes'; 'Avni'; 'Asaf'}, ...
    {'Renault'; 'Tofaş'; 'Tofaş'}, ...
    [2.6; 2.38; 3.06], ...
    'VariableNames', {'Name', 'Brand', 'Mt'});

% 2. 获取唯一品牌列表,定义对应绘图符号
uniqueBrands = unique(dataTable.Brand);
% 可以根据品牌数量增减符号,比如这里用圆圈和方块
brandSymbols = {'o', 's'};

% 3. 初始化绘图
figure;
hold on; % 开启绘图叠加模式
xPositions = 1:height(dataTable); % 每个Name对应一个固定的X坐标(行号)

% 4. 循环绘制每个品牌的数据
for idx = 1:length(uniqueBrands)
    % 筛选当前品牌的行索引
    brandRows = strcmp(dataTable.Brand, uniqueBrands(idx));
    % 在对应X位置绘制该品牌的点,同时设置图例显示名称
    plot(xPositions(brandRows), dataTable.Mt(brandRows), ...
        brandSymbols{idx}, 'MarkerSize', 8, ...
        'DisplayName', uniqueBrands(idx));
end

% 5. 设置X轴标注
xticks(xPositions);
xticklabels(dataTable.Name);
xtickangle(90); % 旋转X轴标签避免重叠

% 6. 完善图表细节
legend('Location', 'best'); % 自动选择最佳图例位置
ylabel('Mt');
title('Mt Values Grouped by Brand');
hold off;

为什么这个方法能解决你的问题?

  • 不再用叠加plot导致X轴混乱:我们用行号作为每个数据点的固定X坐标,每个Name对应唯一的X位置,不管哪个品牌的数据,都能精准落在对应的X轴位置上,完全不会出现X轴错位的问题。
  • 避免0值填充的坑:通过strcmp筛选对应品牌的行索引,只提取该品牌对应的X坐标和Mt值进行绘图,不会引入无效的0值数据。
  • 自动关联图例:绘图时通过DisplayName参数直接把品牌名和符号绑定,最后调用legend()就能自动生成正确的图例,不需要额外手动设置。

如果你的品牌数量更多,只需要在brandSymbols里添加对应的符号(比如'^'、'd'等MATLAB支持的标记)就可以了。

内容的提问来源于stack exchange,提问作者Enes Kasikci

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 13:07:42