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

基于表格列值在MATLAB中绘制分组柱状图的技术咨询

分组柱状图绘制问题

我想要绘制分组柱状图(样式为:每组包含对应站点的多个样本柱状条,不同类别对应不同颜色);所用数据样例结构如下:

SampleNameSampleSiteCategoryData
ASite1Type110
BSite1Type215
CSite2Type18
DSite2Type212
ESite3Type114
FSite3Type29

核心需求:

  • 按SampleSite对柱状图分组
  • 以SampleName为柱状条的标签
  • 按Category为柱状条分配对应颜色

我尝试了以下代码,虽有初步效果,但不知道怎么按列值实现分组与着色:

y1= samples(MockUp_Data.SampleSite== "Site1", :);
y2= samples(MockUp_Data.SampleSite== "Site2", :);
y3= samples(MockUp_Data.SampleSite== "Site3", :);

y= [y1;y2;y3];
bar(y.Data)
set(gca, 'xticklabels', char(y.SampleName), 'fontweight', 'bold', 'fontsize', 12)

解决方案

要实现按站点分组、按类别着色的效果,可以按以下步骤修改代码:

  1. 先把数据整理成适合分组柱状图的矩阵结构,确保每个站点下的类别顺序一致
  2. 用分组模式绘制柱状图,再给不同类别绑定对应颜色
  3. 匹配设置X轴标签和类别图例

示例代码:

% 提取唯一的站点和类别
sites = unique(MockUp_Data.SampleSite);
categories = unique(MockUp_Data.Category);
numSites = length(sites);
numCats = length(categories);

% 整理数据:每个站点的不同类别数据按列排列
dataMatrix = [];
sampleLabels = cell(numSites, numCats);
for i = 1:numSites
    % 筛选当前站点的数据并按类别排序
    siteData = sortrows(MockUp_Data(MockUp_Data.SampleSite == sites(i), :), 'Category');
    dataMatrix = [dataMatrix; siteData.Data];
    sampleLabels(i,:) = siteData.SampleName';
end
% 转换为分组矩阵:每行对应一个站点,每列对应一个类别
dataMatrix = reshape(dataMatrix, numCats, numSites)';

% 自定义类别颜色(可根据需求调整)
colorMap = [0.2 0.6 0.8; 0.8 0.3 0.2]; % Type1蓝色,Type2红色

% 绘制分组柱状图
figure;
b = bar(dataMatrix, 'grouped');
% 为每个类别设置对应颜色
for i = 1:numCats
    b(i).FaceColor = colorMap(i,:);
end

% 设置X轴主标签(站点名)
set(gca, 'XTick', 1:numSites);
set(gca, 'XTickLabels', sites);
set(gca, 'fontweight', 'bold', 'fontsize', 12, 'XTickLabelRotation', 45);

% 给每个柱状条添加SampleName标签
for i = 1:length(b)
    for j = 1:length(b(i).XData)
        text(b(i).XData(j), b(i).YData(j)+0.5, sampleLabels(j,i), ...
             'HorizontalAlignment','center', 'FontSize',10);
    end
end

% 添加图例和标题
legend(categories, 'Location','best');
title('按站点分组、类别着色的柱状图');
xlabel('样本站点');
ylabel('数据值');

代码说明

  • 先按站点和类别整理数据,保证每个站点下的类别顺序统一,避免颜色对应混乱
  • 通过bar('grouped')开启分组模式,遍历每个类别对象设置自定义颜色
  • 支持同时显示站点主标签和单个样本的子标签,也可根据需求调整显示内容
  • 颜色映射可根据实际类别数量扩展,确保每个类别有唯一对应颜色

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 03:23:37