MATLAB–pie函数绘制复杂分类数据的饼状图
目录
- MATLAB--pie函数绘制复杂分类数据的饼状图
- 摘要
- 1. 问题描述
- 2. 具体步骤:
- 3. 绘制结果
- 4. 小结
摘要
在数据可视化中,饼状图是一种常用的展示分类数据的方式。之前,文章介绍了使用MATLAB绘制饼状图的入门方法,现在博主要填上之前这篇文章里提到的坑啦!!本文将介绍如何使用MATLAB的pie函数绘制复杂分类数据的饼状图。我们首先生成需要使用的复杂数据,然后详细说明了使用pie函数绘制饼状图的具体步骤,包括易错点和重点内容。
1. 问题描述
为了方便给大家演示,我们从0到1,从数据类型和大家开始说明。这里将使用MATLAB生成描述6家上市投资公司在8种投资类别上的复杂数据,然后按照投资类别进行分类,并计算各公司对各类别企业的投资比例,最后绘制饼状图展示结果。
数据类型:5家上市投资公司,投资若干家类别企业(共8种类别),对各企业的投资额也不同,数据内容包括:投资公司、被投资的企业、各企业行业类别、各公司对各企业的投资额。
接下来,需要将该投资额数据按照8种投资类别进行分类,5个公司对8个类别企业的投资比例以投资额作为计算依据,每家公司每种类别占比均不相同。
最后,绘制均匀分布的饼状图,每张饼图中按照 “类别(比例)” 的格式 标注各类别及比例数据,由于legend相同,所以整个figure使用一个legend;同时调整字体和figure图幅大小,使所有字都清楚展示出来。
2. 具体步骤:
- 投资数据生成: 先生成描述5家上市投资公司在8种投资类别上的复杂数据,包括投资公司、被投资的企业、各企业行业类别以及各公司对各企业的投资额。
% 生成复杂分类数据
investment_data = struct();
% 六家上市投资公司名称
company_names = {'A Corp', 'B Corp', 'C Corp', 'D Corp', 'E Corp'};
investment_data.Company = company_names;
% 8种投资类别
category_names = {'Technology', 'Finance', 'Healthcare', 'Real Estate', 'Manufacturing', 'Energy', 'Retail', 'Transportation'};
% 为每家公司随机生成对每种类别企业的投资额
for i = 1:numel(company_names)
for j = 1:numel(category_names)
investment_data.(['Investment_', num2str(j)])(i) = {randi([10000, 500000])}; % 随机生成投资额
end
end
重点 :数据采用
结构数组
investment_data
保存更方便直观哦;分类数据使用元胞cell
数据类型。
- 数据分类处理: 将按照8种投资类别对数据进行分类,并计算各公司对各类别企业的投资比例。
% 按照投资类别分类并计算投资比例
category_investments = zeros(numel(category_names), numel(company_names));
for i = 1:numel(category_names)
for j = 1:numel(company_names)
category_investments(i, j) = cell2mat(investment_data.(['Investment_', num2str(i)])(j));
end
end
% 计算投资比例
total_investments = sum(category_investments, 1);
investment_proportions = category_investments ./ total_investments;
- 绘制饼状图: 最后,使用MATLAB的pie函数绘制饼状图,确保饼图分布均匀,并标注各类别及比例数据。
ref:(代码中部分方法和原理参见博主另一篇文章:如何合理布局子图–确定MATLAB的subplot子图位置参数)
% 绘制饼状图 采用subplot绘制子图,将5家公司的数据绘制在一张figure上
% 给定子图布局参数 (具体方法和原理参见博主另一篇文章:https://blog.csdn.net/weixin_43323302/article/details/136383424)
N = 2; % 子图行数
M = 3; % 子图列数
subplot_length = 3; % 子图高度 (比例2:3,3:4,9:16 等)
subplot_width = 4; % 子图宽度
top_margin = 0.4; % 上边界间距
bottom_margin = 0.6; % 下边界间距
left_margin = 0.6; % 左边界间距
right_margin = 0.4; % 右边界间距
gap = 0.8; % 子图间隙
% 采用 subplot_params 函数确定子图布局参数(要求绘图工整且格式统一的小伙伴可以采用)(具体方法和原理参见博主另一篇文章:https://blog.csdn.net/weixin_43323302/article/details/136383424)
[subplot_position,figure_width,figure_length]=subplot_params(N,M,subplot_length,subplot_width,top_margin,bottom_margin,left_margin,right_margin,gap);
f1=figure('Units', 'inches','Position', [0, 0, figure_width, figure_length]); % 一定要说明单位
set(f1,'name','日均启停次数');
fontsize=9;
labelmultiplier=1.3;
titlemultiplier=1.4;
pos=subplot_position;
legend_labels = {}; % 存储legend标签
for i = 1:numel(company_names)
labels_text = {}; % 存储label标签
% 合并标签和比例数据
for k = 1:numel(category_names)
label_text = [category_names{k}, ' (', num2str(100*investment_proportions(k, i), '%.1f%%'), ')'];
labels_text = [labels_text, label_text]; % 添加到label标签中
end
subplot('Position',pos(i,:));
h = pie(investment_proportions(:, i), labels_text);
title(company_names{i}); % 添加标题
set(gca,'FontSize',fontsize,'LabelFontSizeMultiplier',labelmultiplier,'TitleFontSizeMultiplier',titlemultiplier);
end
legend(category_names, 'Location', 'bestoutside','FontSize',fontsize); % 设置legend位置
易错点: 在使用pie函数时,需要将比例数据格式化为字符串,并确保格式清晰可读。
重点内容: 使用MATLAB的字符串格式化功能,将比例数据添加到各类别的标签上。
3. 绘制结果
各家公司、各个投资类别的信息及占比,一目了然。第六个位置刚好放legend啦!
4. 小结
通过以上步骤,使用MATLAB的pie函数绘制了复杂分类数据的饼状图,并调整了图形样式以确保数据结果分类的准确度和可视化。希望博主这篇文章能够帮助你更好地利用MATLAB进行数据可视化哦。