一、什么是柱状图与条图?
柱状图和条图都是用来表示分类数据的常见图表形式,它们的核心目的是通过矩形的长度来比较各类别的数值大小。条图其实就是“横着的柱状图”,它们的本质是一样的:用矩形的长度表示数值大小,不同的只是方向。
柱状图:也叫纵向柱图,是一种竖直排列的图表。每个类别对应一个竖直的矩形柱,柱子的高度表示该类别的数值大小。柱状图常用于比较不同类别的数据,或展示某一指标在不同时间点的变化。
条图:也称为横向条图,是一种横向排列的图表。每个类别对应一个水平的矩形条,条的长度表示该类别的数值大小。条图在类别名称较长或类别较多时更易阅读,适合显示排名或比较数据。
二、柱状图与条图区别
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;
条图实现:
希望这些示例能为你今后的数据分析、教学展示或科研图表制作提供实用参考。如果你有任何问题或想法,欢迎留言交流,一起精进可视化表达的技巧!