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进行数据可视化哦。

相关推荐
胡西风_foxww12 分钟前
【es6复习笔记】rest参数(7)
前端·笔记·es6·参数·rest
喝醉酒的小白1 小时前
Elasticsearch 配置文件
大数据·elasticsearch·搜索引擎
一只敲代码的猪1 小时前
Llama 3 模型系列解析(一)
大数据·python·llama
智慧化智能化数字化方案1 小时前
深入解读数据资产化实践指南(2024年)
大数据·人工智能·数据资产管理·数据资产入表·数据资产化实践指南
哦哦~9212 小时前
深度学习驱动的油气开发技术与应用
大数据·人工智能·深度学习·学习
Anna_Tong3 小时前
云原生大数据计算服务 MaxCompute 是什么?
大数据·阿里云·云原生·maxcompute·odps
界面开发小八哥3 小时前
「实战应用」如何用图表控件SciChart WPF实现应用程序的DPI感知?
信息可视化·wpf·数据可视化·图表·scichart wpf·scichart
drebander3 小时前
SQL 实战-巧用 CASE WHEN 实现条件分组与统计
大数据·数据库·sql
18号房客3 小时前
高级sql技巧进阶教程
大数据·数据库·数据仓库·sql·mysql·时序数据库·数据库架构
胡西风_foxww3 小时前
【es6复习笔记】函数参数的默认值(6)
javascript·笔记·es6·参数·函数·默认值