MATLAB--pie函数绘制复杂分类饼图(2)--附案例代码

MATLAB--pie函数绘制复杂分类数据的饼状图

目录

摘要

在数据可视化中,饼状图是一种常用的展示分类数据的方式。之前,文章介绍了使用MATLAB绘制饼状图的入门方法,现在博主要填上之前这篇文章里提到的坑啦!!本文将介绍如何使用MATLAB的pie函数绘制复杂分类数据的饼状图。我们首先生成需要使用的复杂数据,然后详细说明了使用pie函数绘制饼状图的具体步骤,包括易错点和重点内容。

1. 问题描述

为了方便给大家演示,我们从0到1,从数据类型和大家开始说明。这里将使用MATLAB生成描述6家上市投资公司在8种投资类别上的复杂数据,然后按照投资类别进行分类,并计算各公司对各类别企业的投资比例,最后绘制饼状图展示结果。

数据类型:5家上市投资公司,投资若干家类别企业(共8种类别),对各企业的投资额也不同,数据内容包括:投资公司、被投资的企业、各企业行业类别、各公司对各企业的投资额。

接下来,需要将该投资额数据按照8种投资类别进行分类,5个公司对8个类别企业的投资比例以投资额作为计算依据,每家公司每种类别占比均不相同。

最后,绘制均匀分布的饼状图,每张饼图中按照 "类别(比例)" 的格式 标注各类别及比例数据,由于legend相同,所以整个figure使用一个legend;同时调整字体和figure图幅大小,使所有字都清楚展示出来。

2. 具体步骤:

  • 投资数据生成: 先生成描述5家上市投资公司在8种投资类别上的复杂数据,包括投资公司、被投资的企业、各企业行业类别以及各公司对各企业的投资额。
matlab 复制代码
% 生成复杂分类数据
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种投资类别对数据进行分类,并计算各公司对各类别企业的投资比例。
matlab 复制代码
% 按照投资类别分类并计算投资比例
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 复制代码
% 绘制饼状图  采用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进行数据可视化哦。

相关推荐
宵时待雨21 分钟前
C++笔记归纳14:AVL树
开发语言·数据结构·c++·笔记·算法
商业数据派37 分钟前
快手估值重构的“隐藏彩蛋”
大数据·人工智能·重构
新缸中之脑41 分钟前
你的智能体技术栈中缺失的层
大数据·人工智能·数据挖掘
左左右右左右摇晃1 小时前
JDK 1.7 ConcurrentHashMap——分段锁
java·开发语言·笔记
云边散步1 小时前
godot2D游戏教程系列二(22)
笔记·学习·游戏
guygg881 小时前
基于数据驱动的模型预测控制电力系统机组组合优化MATLAB实现
开发语言·matlab
墨神谕2 小时前
ES为什么要进行分片
大数据·elasticsearch·搜索引擎
chushiyunen2 小时前
langchain实现agent智能体笔记
笔记·langchain
赵谨言2 小时前
地球磁场干扰噪声减弱声波对抗测量系统研究进展:近十年中英文文献综述
大数据·开发语言·经验分享
jyan_敬言2 小时前
【算法】高精度算法(加减乘除)
c语言·开发语言·c++·笔记·算法