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;

条图实现:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/904798.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[计算机科学#13]:算法

【核知坊】:释放青春想象,码动全新视野。 我们希望使用精简的信息传达知识的骨架,启发创造者开启创造之路!!! 内容摘要: 算法是解决问题的系统化步骤,不同的问题…

HTTP传输大文件的方法、连接管理以及重定向

目录 1. HTTP传输大文件的方法 1.1. 数据压缩 1.2. 分块传输 1.3. 范围请求 1.4. 多段数据 2. HTTP的连接管理 2.1. 短连接 2.2. 长连接 2.3. 队头阻塞 3. HTTP的重定向和跳转 3.1. 重定向的过程 3.2. 重定向状态码 3.3. 重定向的应用场景 3.4. 重定向的相关问题…

PostgreSQL 18 Beta 1发布,有哪些功能亮点?

PostgreSQL 全球开发组于 2025 年 5 月 8 日发布了第一个 PostgreSQL 18 Beta 版本,现已开放下载。虽然细节可能会有所改变,但是该版本包含了 PostgreSQL 18 最终正式版中所有新功能的预览。 以下是 PostgreSQL 18 引入的部分关键功能亮点。 性能优化 …

vue dev-tools插件

背景 在项目上用到vue技术,在bilibili上学习vue,期间老师推荐使用vue dev-tools调试神器,所以过来安转和使用了,用了感觉不错,希望给大家带来效率的提升。 定义 Vue DevTools 是一款旨在增强 Vue 开发者体验的工具&am…

单片机-FLASH软件模拟EEPROM,提升flash保存重要参数的使用寿命

目录 1. FLASH和EEPROM读写数据的对比   2. FLASH模拟EEPROM的原理   3. FLASH模拟EEPROM的优点   4. 实战项目工程代码 1. FLASH和EEPROM读写数据的对比 1.1 擦除操作 EEPROM通常支持按单字节擦除和写入,这一特性使其非常适合需要频繁更新小量数据的应…

探索Stream流:高效数据处理的秘密武器

不可变集合 stream流 Stream流的使用步骤: 先得到一条Stream流(流水线),并把数据放上去 使用中间方法对流水线上的数据进行操作 使用终结方法对流水线上的数据进行操作 Stream流的中间方法 注意1:中间方法&#xff0…

vue3笔记(自存)

1. Vue3简介 2020年9月18日,Vue.js发布版3.0版本,代号:One Piece(n 经历了:4800次提交、40个RFC、600次PR、300贡献者 官方发版地址:Release v3.0.0 One Piece vuejs/core 截止2023年10月,最…

实验4 mySQL查询和视图

一、实验目的 掌握SELECT语句的基本语法多表连接查询GROUP BY的使用方法。ORDER BY的使用方法。 二、实验步骤、内容、结果 实验内容: 实验4.1数据库的查询 目的与要求 (1)掌握SELECT语句的基本语法。 (2)掌握子查询的表示。 (3)掌握连接查询的表示。 (4)掌…

【bug】fused_bias_act_kernel.cu卡住没反应

简述 在推理人脸修复face restoration算法 GPEN的时候,发现有时候fused_bias_act_kernel.cu卡住没反应。 解决 清理下缓存,让程序自己再编译下

.net/C#进程间通信技术方案总结

C# 应用进程间通信(IPC)技术方案 进程间通信(Inter-Process Communication, IPC)是不同进程之间交换数据和消息的机制。以下是C#中常用的IPC技术方案: 1. 命名管道(Named Pipes) 适用于本地机器上的进程通信,支持双向通信。 ​​服务端示例​​&…

阿里云服务器数据库故障排查指南?

阿里云服务器数据库故障排查指南? 以下是针对阿里云服务器(如ECS自建数据库或阿里云RDS等托管数据库)的故障排查指南,涵盖常见问题的定位与解决方案: 一、数据库连接失败 检查网络连通性 ECS自建数据库 确认安全组规则放行数据库…

深度学习 ———— 迁移学习

迁移学习原理 什么是迁移学习? 迁移学习利用在大规模数据集(如ImageNet)上预训练的模型,改装小数据集(如CIFAR-10)。优势: 减少训练时间:预训练模型已学习通用特征(如边…

单调栈模版型题目(3)

单调栈型题目贡献法 基本模版 这是数组a中的 首先我们要明白什么叫做贡献,在一个数组b{1,3,5}中,连续包含1的连续子数组为{1},{1,3},{1,3,5},一共有三个,这三个数一共能组成6个连续子数组,而其…

日常知识点之随手问题整理(思考单播,组播,广播哪个更省带宽)

新入职的公司在某些场景下无脑使用组播技术,自己突然就意识到一个问题:单播,组播,广播,哪个更省带宽? 有所收获,做点笔记,仅仅是个人理解~ 1:简单理解 单播&#xff1…

R1-Omni

一、Omni概述 Omni 文本视频音频,全模态。 R1Omni 强化学习全模态。 二、Omni举例-humanOmni humanOmni:以人体姿态和人物交互为中心的全模态模型。 visual projector有3个,分别负责人脸标签、姿态检测、人和物交互。有点像moe。text enc…

linux中的日志分割

1.问题背景,nginx日志过大不好删除 [rootlocalhost cron.daily]# cd /lk/nginx/log/ [rootlocalhost log]# ll 总用量 2386188 -rw-r--r--. 1 root root 2078699697 5月 9 13:02 access.log -rw-r--r--. 1 root root 11138 5月 6 10:28 error.log [rootloc…

华为云Flexus+DeepSeek征文|从开通到应用:华为云DeepSeek-V3/R1商用服务深度体验

前言 本文章主要讲述在华为云ModelArts Studio上 开通DeepSeek-V3/R1商用服务的流程,以及开通过程中的经验分享和使用感受帮我更多开发者,在华为云平台快速完成 DeepSeek-V3/R1商用服务的开通以及使用入门注意:避免测试过程中出现部署失败等问…

【机器学习-线性回归-5】多元线性回归:概念、原理与实现详解

线性回归是机器学习中最基础且广泛应用的算法之一,而多元线性回归则是其重要扩展。本文将全面介绍多元线性回归的核心概念、数学原理及多种实现方式,帮助读者深入理解这一强大的预测工具。 1. 多元线性回归概述 1.1 什么是多元线性回归 多元线性回归(…

GOC指令

网络版GoC常见绘图命令说明 (V3.8) 目录 l 基本画图命令 fd, bk, lt, rt l 设置笔状态命令 c, rgb, size, up, down l 状态命令 show, hide, speed, showXY, wait, pause, cls, clsRec l 增强画图命令 o, oo, e, ee, r, rr l 坐标命令 moveTo, lineTo, g…

Qt获取CPU使用率及内存占用大小

Qt 获取 CPU 使用率及内存占用大小 文章目录 Qt 获取 CPU 使用率及内存占用大小一、简介二、关键函数2.1 获取当前运行程序pid2.2 通过pid获取运行时间2.3 通过pid获取内存大小 三、具体实现五、写在最后 ​ 一、简介 近期在使用软件的过程中发现一个有意思的东西。如下所示&a…