基于表格列值在MATLAB中绘制分组柱状图的技术咨询
分组柱状图绘制问题
我想要绘制分组柱状图(样式为:每组包含对应站点的多个样本柱状条,不同类别对应不同颜色);所用数据样例结构如下:
| SampleName | SampleSite | Category | Data |
|---|---|---|---|
| A | Site1 | Type1 | 10 |
| B | Site1 | Type2 | 15 |
| C | Site2 | Type1 | 8 |
| D | Site2 | Type2 | 12 |
| E | Site3 | Type1 | 14 |
| F | Site3 | Type2 | 9 |
核心需求:
- 按
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)
解决方案
要实现按站点分组、按类别着色的效果,可以按以下步骤修改代码:
- 先把数据整理成适合分组柱状图的矩阵结构,确保每个站点下的类别顺序一致
- 用分组模式绘制柱状图,再给不同类别绑定对应颜色
- 匹配设置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
相关产品推荐
相关产品推荐

