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

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.xdnf.cn/news/4972.html

相关文章:

  • Android 项目中配置了多个 maven 仓库,但依赖还是下载失败,除了使用代理,还有其他方法吗?
  • LLM 推理加速:深度解析 Prefilling 与 Decoding 阶段的优化秘籍
  • YOLOv1模型架构、损失值、NMS极大值抑制
  • 从设计到开发,原型标注图全流程标准化
  • 学习DLT698进阶二,电表的事件
  • 基于 Ubuntu 24.04 部署 WebDAV
  • window 显示驱动开发-配置内存段类型
  • Jenkins linux安装
  • 【一】浏览器的copy as fetch和copy as bash的区别
  • 解决:EnvironmentNameNotFound: Could not find conda environment?
  • 深入解析Docker底层原理:从Namespace到联合文件系统
  • 使用SVM进行图像分类
  • 每天五分钟深度学习框架pytorch:视觉工具包torchvison
  • 浏览器节能机制导致Websocket断连的坑
  • Python 爬虫基础入门教程(超详细)
  • 代发考试战报:思科华为HCIP HCSE CCNP 考试通过
  • CSS:盒子模型
  • Missashe计网复习笔记(随时更新)
  • C++:求分数序列和
  • 23盘古石决赛
  • docker 镜像的导出和导入(导出完整镜像和导出容器快照)
  • Java 匿名内部类的作用
  • IM系统群消息推送方案
  • 多模型协同预测在风机故障预测的应用(demo)
  • 订阅“科技爱好者周刊”,每周五与你相约科技前沿!
  • Docker下Gogs设置Webhook推送Spug,踩坑记录与解决方案
  • Git clone时出现SSL certificate problem unable to get local issuer certificate
  • 安装docker
  • 【网络编程】四、守护进程实现 前后台作业 会话与进程组
  • ChatTempMail - AI驱动的免费临时邮箱服务