• 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种投资类别上的复杂数据,包括投资公司、被投资的企业、各企业行业类别以及各公司对各企业的投资额。
    % 生成复杂分类数据
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    重点 :数据采用结构数组 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;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    % 绘制饼状图  采用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位置
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    易错点: 在使用pie函数时,需要将比例数据格式化为字符串,并确保格式清晰可读。
    重点内容: 使用MATLAB的字符串格式化功能,将比例数据添加到各类别的标签上。

    3. 绘制结果

    各家公司、各个投资类别的信息及占比,一目了然。第六个位置刚好放legend啦!
    在这里插入图片描述

    4. 小结

    通过以上步骤,使用MATLAB的pie函数绘制了复杂分类数据的饼状图,并调整了图形样式以确保数据结果分类的准确度和可视化。希望博主这篇文章能够帮助你更好地利用MATLAB进行数据可视化哦。

  • 相关阅读:
    C# 超链接 LinkLabel 类 控件
    水泥设备如何实现物联网远程监控?
    LeetCode-热题100-笔记-day28
    Spring 源码阅读 04:BeanFactory 初始化
    上下文切换
    枪出惊龙,众“锁”周之
    electron-vue的electron的升级
    软考高级系统架构设计师系列之:深入理解设计模式
    CSS色域、色彩空间、CSS Color 4新标准 | 京东云技术团队
    好用的考勤打卡APP
  • 原文地址:https://blog.csdn.net/weixin_43323302/article/details/136434968