当前位置: 首页 > news >正文

MATLAB制作柱状图与条图:数据可视化的基础利器

一、什么是柱状图与条图?

       柱状图和条图都是用来表示分类数据的常见图表形式,它们的核心目的是通过矩形的长度来比较各类别的数值大小。条图其实就是“横着的柱状图”,它们的本质是一样的:用矩形的长度表示数值大小,不同的只是方向。

  • 柱状图:也叫纵向柱图,是一种竖直排列的图表。每个类别对应一个竖直的矩形柱,柱子的高度表示该类别的数值大小。柱状图常用于比较不同类别的数据,或展示某一指标在不同时间点的变化。

  • 条图:也称为横向条图,是一种横向排列的图表。每个类别对应一个水平的矩形条,条的长度表示该类别的数值大小。条图在类别名称较长或类别较多时更易阅读,适合显示排名或比较数据。

二、柱状图与条图区别

1. 柱状图(竖向)

(1)时间序列类数据

  • x轴表示时间(如年、季度、月份)时,用柱状图更符合人们的阅读习惯。

  • 示例:各月销售额、年度产量变化。

(2)类别较少时的对比

  • 类别不多时,竖直排列易于对比各项数值。

(3)用于强调趋势或变化

  • 上升/下降趋势在竖向展示下更加直观。

2. 条图(横向)

(1)类别名称较长时

  • 横向排列避免 x 轴标签重叠,提升可读性。

  • 示例:高校名称、产品型号、书名等。

(2)类别数量较多时

  • 条图在纵向空间上更容易容纳大量项目。

(3)强调排名或排序

  • 条图适合按数值排序展示,清晰呈现高低顺序

  • 示例:公司营收排名、国家人口数量对比。

小结

情况推荐图表
时间为主轴的数据柱状图
类别名称较长或项目较多条图
强调趋势变化柱状图
强调大小排序或排名条图

三、不同类型柱状图和条图的适用场景及特点

不同类型柱状图和条图的适用场景及特点表格

图形类型适用场景特点
只有一列数据的柱状图单一类别的数据展示简单直观,适合展示单项数据对比
多列数据的柱状图不同类别或时间段的数据对比比较多个数据集,适合显示多项对比
三类柱状图对比三类数据(如销量、价格、满意度等)一次性展示三类数据,便于多维度对比
 条形图类别较多或类别名称较长,强调排名或排序横向展示,便于展示较长标签或较多类别

 四、MATLAB绘制相应柱状图和条图

1. 只有一列数据的柱状图绘制

       当我们有一组分类数据(例如“产品A”、“产品B”等)以及对应的数值(如销量、评分等),就可以使用 MATLAB 中最基本的 bar() 函数来绘制柱状图。

下面是相关代码实现:

% 读取 Excel 文件
data = readtable('单列数据柱状图.xlsx', 'Sheet', 'Sheet1', 'VariableNamingRule', 'preserve');
categories = data{:, '分类'};
values = data{:, '数值'};
% 创建图形窗口
figure('Color', [1 1 1], 'Position', [300 300 600 400]); 
% 颜色设置
barColor = [1 0.6 0.2]; 
% 绘制美观柱状图
b = bar(values, 0.5, 'FaceColor', barColor, 'EdgeColor', 'none'); 
b.FaceAlpha = 0.85; % 增加透明度
% 设置坐标轴标签与字体
set(gca, 'XTick', 1:length(categories), 'XTickLabel', categories, ...'FontSize', 13, 'FontName', '宋体', 'LineWidth', 1.2, ...'YGrid', 'on', 'GridLineStyle', '--', 'GridColor', [0.7 0.7 0.7]);
xlabel('分类', 'FontSize', 13, 'FontName', '宋体');
ylabel('数值', 'FontSize', 13, 'FontName', '宋体');
title('只有一列数据的柱状图', 'FontSize', 16, 'FontWeight', 'bold', 'FontName', '宋体');
% 添加顶部数值标签
for i = 1:length(values)text(i, values(i) + 0.3, num2str(values(i)), ...'HorizontalAlignment', 'center', ...'FontSize', 12, 'FontName', '宋体', ...'Color', [0.2 0.2 0.2]);
end
% 设置 y 轴范围
ylim([0, max(values) + 3]);
% 去除图框顶部和右侧边界线
box off;

柱状图实现:

2.  多列数据的柱状图绘制

        当我们有多个分类项(例如季度或地区),并且每个分类下有多个子类别(例如不同产品或指标),可以使用 bar() 函数绘制分组柱状图。这类图形非常适合对比多个系列数据在不同分类下的表现。

下面是相关代码实现:

% 读取数据并保留中文列名
data = readtable('多列数据柱状图.xlsx', 'VariableNamingRule', 'preserve');
% 提取分类(X轴)与多列值(Y数据)
categories = data{:, '季度'};
values = data{:, 2:end};  
% 创建图形窗口
figure('Color', [1 1 1], 'Position', [300 300 700 420]);
% 绘制分组柱状图(更宽、更通透)
b = bar(values, 'grouped');
set(gca, 'XTickLabel', categories, 'FontSize', 13, 'FontName', '宋体', ...'YGrid', 'on', 'GridColor', [0.85 0.85 0.85]);
% 自定义颜色
colors = [0.2 0.6 0.8; 1 0.6 0.2; 0.4 0.8 0.4];  % 蓝、橙、绿
for i = 1:numel(b)b(i).FaceColor = colors(i,:);b(i).EdgeColor = 'none';b(i).FaceAlpha = 0.85;  
end
% 设置标题和标签
xlabel('季度', 'FontSize', 13, 'FontName', '宋体');
ylabel('销量', 'FontSize', 13, 'FontName', '宋体');
title('三种产品季度销量对比柱状图', 'FontSize', 16, 'FontWeight', 'bold', 'FontName', '宋体');
% 图例
legend(data.Properties.VariableNames(2:end), ...'Location', 'northwest', 'FontName', '宋体');
% 添加柱状图上的数值标签
for i = 1:numel(b)xtips = b(i).XEndPoints;ytips = b(i).YEndPoints;labels = string(b(i).YData);text(xtips, ytips + 2, labels, 'HorizontalAlignment', 'center', ...'FontSize', 11, 'FontName', '宋体', 'Color', [0.2 0.2 0.2]);
end
% 调整 Y 轴范围让数值标签更紧凑
ylim([0, max(values(:)) + 20]);
% 去除边框顶部和右侧线条
box off;

柱状图实现:

3. 三类柱状图绘制

       当我们需要对比三个不同维度或属性(如销量、价格、满意度等)的数据表现,适合使用简单的柱状图进行展示。此类图形结构直观,通常仅包含一组分类,每个柱子表示一个独立的类别。使用 MATLAB 中的 bar() 函数即可轻松绘制三类柱状图。通过不同高度的柱体,清晰地反映出各个指标之间的数值差异,常用于展示调查结果、评估指标或单次观测数据。

下面是相关代码实现:

% 读取数据并保留中文列名
data = readtable('三类柱状图.xlsx', 'Sheet', 'Sheet1', 'VariableNamingRule', 'preserve');
categories = data{:, '指标类别'};
values = data{:, '数值'};
% 自定义颜色(采用RGB模式)
colors = [ 102 194 165;252 141 98;141 160 203
] / 255;
% 绘图
figure('Color', [1 1 1], 'Position', [400 300 540 360]);
b = bar(values, 0.5, 'EdgeColor', 'none');
% 每根柱子赋予不同颜色
for i = 1:length(values)b.FaceColor = 'flat';         b.CData(i, :) = colors(i, :);
end
b.FaceAlpha = 0.9;
% 坐标轴设置
set(gca, 'XTick', 1:length(categories), ...'XTickLabel', categories, ...'FontSize', 12, 'FontName', '宋体', ...'YGrid', 'on', 'GridLineStyle', '--', ...'GridColor', [0.85 0.85 0.85], 'LineWidth', 1.1);
xlabel('指标类别', 'FontSize', 12, 'FontName', '宋体');
ylabel('数值', 'FontSize', 12, 'FontName', '宋体');
title('三类指标柱状图', 'FontSize', 15, 'FontWeight', 'bold', 'FontName', '宋体');
% 添加标签
for i = 1:length(values)text(i, values(i) + values(i)*0.03, num2str(values(i)), ...'HorizontalAlignment', 'center', 'FontSize', 11, ...'FontName', '宋体', 'Color', [0.15 0.15 0.15]);
end
ylim([0, max(values)*1.15]);
box off;

柱状图实现:

4.   条形图绘制

       当类别数量较多,或者每个类别名称较长时,使用条形图(横向柱状图)会更合适。条形图采用横向展示方式,不仅便于显示较长的标签,还能更清晰地呈现数据的排序与排名,在数据分析和结果汇报中被广泛使用,尤其适合用于“前十排名”、“满意度排行”、“分类对比”等场景。MATLAB 中使用 barh() 函数可以方便地绘制条形图。

下面是相关代码实现:

% 读取数据并保留中文列名
data = readtable('条形图数据.xlsx','Sheet', 'Sheet1', 'VariableNamingRule', 'preserve');
% 提取产品名称和得分
categories = data{:, '产品'};
values = data{:, '得分'};
% 排序
[values, sortIdx] = sort(values, 'descend');
categories = categories(sortIdx);
% 创建图形窗口
figure('Color', [1 1 1], 'Position', [400 300 700 400]);
% 三色方案(橘红、草绿、芥末黄)
colors = [0.85, 0.33, 0.10;   0.47, 0.67, 0.19;0.93, 0.69, 0.13    
];
% 根据数据数量重复颜色
num_colors = length(values);
repeated_colors = repmat(colors, ceil(num_colors / size(colors, 1)), 1);
% 绘制条形图
b = barh(values, 'FaceColor', 'flat', 'EdgeColor', 'none', 'BarWidth', 0.6);
b.CData = repeated_colors(1:num_colors, :);
% 坐标轴设置
set(gca, 'YTick', 1:length(categories), ...'YTickLabel', categories, ...'FontSize', 14, 'FontName', 'SimSun', ...'XGrid', 'on', 'GridLineStyle', '--', ...'GridColor', [0.85 0.85 0.85], ...'TickDir', 'out', ...'LineWidth', 1);xlabel('得分', 'FontSize', 14, 'FontName', 'SimSun');
title('产品满意度排行榜', 'FontSize', 18, 'FontWeight', 'bold', 'FontName', 'SimSun');
% 添加数据标签
for i = 1:length(values)text(values(i) + max(values) * 0.02, i, num2str(values(i)), ...'FontSize', 12, 'FontName', 'SimSun', ...'VerticalAlignment', 'middle', 'Color', [0 0 0], 'FontWeight', 'bold');
end
% X轴范围
xlim([0, max(values) * 1.2]);
box off;

条图实现:

       希望这些示例能为你今后的数据分析、教学展示或科研图表制作提供实用参考。如果你有任何问题或想法,欢迎留言交流,一起精进可视化表达的技巧!  

相关文章:

  • [6-1] TIM定时中断 江协科技学习笔记(45个知识点)
  • React 第三十七节 Router 中 useOutlet Hook的使用介绍以及注意事项
  • [计算机科学#13]:算法
  • StreamRL:弹性、可扩展、异构的RLHF架构
  • 数据结构 集合类与复杂度
  • 6.01 Python中打开usb相机并进行显示
  • 【Cesium入门教程】第五课:数据源
  • 敦普水性无铬锌铝涂层:汽车紧固件防锈15年,解决螺栓氢脆腐蚀双痛点
  • 在企业级项目中高效使用 Maven-mvnd
  • 量化学习DAY2-开始批量提交alpha!
  • 【Linux】自定义shell的编写
  • 【IDEA_Maven】(进阶版)永久性的更改IDEA中每个项目所依赖的Maven默认配置文件及其仓库路径
  • 【Python 元组】
  • 网上商城系统
  • Kafka集群加入新Broker节点会发生什么
  • SQLite 转换为 MySQL 数据库
  • Go语言中 源文件开头的 // +build 注释的用法
  • LeetCode难题解析:数字字符串的平衡排列数目
  • 力扣:轮转数组
  • Python字典:数据操作的核心容器
  • 巴基斯坦对印度发起网络攻击,致其约70%电网瘫痪
  • 四川资阳市原市长王善平被双开,“笃信风水,大搞迷信活动”
  • “降息潮”延续!存款利率全面迈向“1时代”
  • 欧盟公布关税反制清单,瞄准美国飞机、汽车等产品
  • 眉山“笑气”迷局:草莓熊瓶背后的隐秘与危机
  • 欧盟委员会计划对950亿欧元美国进口产品采取反制措施