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

2024-03-05 00:44

本文主要是介绍MATLAB--pie函数绘制复杂分类饼图(2)--附案例代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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标签中endsubplot('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进行数据可视化哦。

这篇关于MATLAB--pie函数绘制复杂分类饼图(2)--附案例代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/774791

相关文章

MySQL 日期时间格式化函数 DATE_FORMAT() 的使用示例详解

《MySQL日期时间格式化函数DATE_FORMAT()的使用示例详解》`DATE_FORMAT()`是MySQL中用于格式化日期时间的函数,本文详细介绍了其语法、格式化字符串的含义以及常见日期... 目录一、DATE_FORMAT()语法二、格式化字符串详解三、常见日期时间格式组合四、业务场景五、总结一、

Java中有什么工具可以进行代码反编译详解

《Java中有什么工具可以进行代码反编译详解》:本文主要介绍Java中有什么工具可以进行代码反编译的相关资,料,包括JD-GUI、CFR、Procyon、Fernflower、Javap、Byte... 目录1.JD-GUI2.CFR3.Procyon Decompiler4.Fernflower5.Jav

golang panic 函数用法示例详解

《golangpanic函数用法示例详解》在Go语言中,panic用于触发不可恢复的错误,终止函数执行并逐层向上触发defer,最终若未被recover捕获,程序会崩溃,recover用于在def... 目录1. panic 的作用2. 基本用法3. recover 的使用规则4. 错误处理建议5. 常见错

javaScript在表单提交时获取表单数据的示例代码

《javaScript在表单提交时获取表单数据的示例代码》本文介绍了五种在JavaScript中获取表单数据的方法:使用FormData对象、手动提取表单数据、使用querySelector获取单个字... 方法 1:使用 FormData 对象FormData 是一个方便的内置对象,用于获取表单中的键值

Vue ElementUI中Upload组件批量上传的实现代码

《VueElementUI中Upload组件批量上传的实现代码》ElementUI中Upload组件批量上传通过获取upload组件的DOM、文件、上传地址和数据,封装uploadFiles方法,使... ElementUI中Upload组件如何批量上传首先就是upload组件 <el-upl

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(