• MATLAB绘制堆叠填充图--巧用句柄


    MATLAB绘制堆叠填充图–巧用句柄

    堆叠填充图是一种常见的数据可视化方式,用于展示多组数据在不同类别上的累积贡献。这次将介绍如何使用MATLAB绘制堆叠填充图,特别是使用句柄来实现更灵活的绘图操作。文中包含详细的案例、代码说明以及注意事项哦。

    1. 主要原理讲解

    1.1 主要函数

    主要使用 MATLAB 中的 area 函数来绘制堆叠填充图,并通过句柄控制图形的样式和属性

    • area 函数: 该函数用于绘制堆叠填充图。它的基本语法是 area(x, y),其中 x 是 x 轴的值,y 是一个矩阵,每一行代表一个类别的 y 轴的值。在堆叠填充图中,可以传递多个 y 值,它们会自动堆叠在一起。

    • 句柄属性设置: 使用句柄对象来控制图形的样式和属性。例如,可以使用句柄对象 h 来设置填充颜色和透明度,通过 h.FaceColorh.FaceAlpha 属性来分别设置填充颜色和透明度。

    1.2 句柄原理

    在MATLAB中,句柄(handle)是指对图形对象或其他MATLAB对象的引用。使用句柄可以在代码中对这些对象进行操作和控制。在绘图中,可通过对图形对象的句柄进行操作,来改变图形的样式、属性和行为。句柄的主要作用包括:

    1. 对象控制:通过句柄可以对图形对象进行控制,例如改变其颜色、线型、标签等。

    2. 动态修改:使用句柄可以动态修改图形对象的属性,而不需要重新绘制图形,这对于交互式数据可视化和动态图形更新非常有用。

    3. 对象传递:句柄可以作为参数传递给函数,从而实现函数间的数据共享和信息传递。

    2. 绘图示例

    2.1 准备数据

    首先,准备需要绘制的堆叠填充图所需的数据。每组数据代表一个类别,每行数据表示该类别在不同时间点或其他维度上的取值。(其他的数据大家可以根据自己的绘图需求进行调整,基本逻辑是一样的)

    易错点:确保数据维度一致,每组数据的数量相同。
    重点内容:合理组织数据,以便在堆叠填充图中清晰展示各个类别的累积贡献。

    % 准备数据
    x = 1:10; % 时间或其他维度
    data1 = rand(1, 10); % 数据1
    data2 = rand(1, 10); % 数据2
    data3 = rand(1, 10); % 数据3
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.2 绘制堆叠填充图-使用句柄控制图形属性

    使用MATLAB的area函数绘制堆叠填充图,使用句柄,方便控制图形的样式和属性。

    注意:代码中刚开始的图形参数设置是为了方便控制图形的常用基本参数,代码是通用的,具体可参考博主其他博文或资源
    博文:如何合理布局子图–确定MATLAB的subplot子图位置参数
    资源:数据可视化-绘图技巧-MATLAB-subplot位置分布确定函数

    易错点:在叠加多组数据时,需要注意数据的顺序,以确保堆叠填充图的正确显示。
    重点内容:选择合适的填充颜色和透明度,使得图形看起来清晰美观。

    % 给定图形参数   
    % 注:图形参数设置是为了方便控制图形的常用基本参数,代码是通用的,具体可参考博主其他博文或资源
    % 博文:https://blog.csdn.net/weixin_43323302/article/details/136383424?spm=1001.2014.3001.5501
    % 资源:https://download.csdn.net/download/weixin_43323302/88909564?spm=1001.2014.3001.5501
    N = 1; % 子图行数
    M = 1; % 子图列数
    subplot_length = 4; % 子图高度 (比例2:3,3:4,9:16 等)
    subplot_width = 6; % 子图宽度
    top_margin = 0.4; % 上边界间距
    bottom_margin = 0.6; % 下边界间距
    left_margin = 0.6; % 左边界间距
    right_margin = 0.4; % 右边界间距
    gap = 0.8; % 子图间隙
    [subplot_position,figure_width,figure_length]=subplot_params(N,M,subplot_length,subplot_width,top_margin,bottom_margin,left_margin,right_margin,gap);
    fontname='songti';
    fontsize=12;
    labelmultiplier=1.3;
    titlemultiplier=1.4;
    pos=subplot_position;
    
    % 绘制堆叠填充图
    f1=figure('Units', 'inches','Position', [0, 0, figure_width, figure_length]);  % 一定要说明单位
    set(f1,'name','堆叠填充图');
    h = area(x, [data1; data2; data3]');
    hold on;
    
    • 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

    2.3 设置填充颜色和样式

    使用句柄函数,根据需要为每组数据设置不同的线型、填充颜色,并调整填充区域的透明度,以实现堆叠填充图的美观效果。

    易错点:颜色搭配需要考虑到对比度和可读性,透明度的设置要适中,既能显示出堆叠效果,又不会影响数据的辨识度。
    重点内容:可以使用MATLAB内置的颜色映射或自定义填充颜色,同时通过调整颜色的透明度来控制图形的层次感和美观度。

    % 设置填充颜色和透明度
    h(1).LineStyle = '-';  % 数据1的线型
    h(2).LineStyle = '-.'; % 数据2的线型
    h(3).LineStyle = ':';  % 数据3的线型
    h(1).FaceColor = [0.2, 0.6, 0.9]; % 数据1的填充颜色
    h(2).FaceColor = [0.9, 0.5, 0.2]; % 数据2的填充颜色
    h(3).FaceColor = [0.5, 0.8, 0.2]; % 数据3的填充颜色
    h(1).FaceAlpha = 0.3; % 数据1的填充透明度
    h(2).FaceAlpha = 0.5; % 数据2的填充透明度
    h(3).FaceAlpha = 0.7; % 数据3的填充透明度
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2.4 添加标题和标签

    最后,添加图的标题、坐标轴标签和图例。

    易错点:标题和标签的文字要简明扼要,图例的位置要避免遮挡数据。
    重点内容:通过设置字体大小、加粗、颜色等属性,增强图形的可读性和美观度。

    % 添加标题和标签
    title('堆叠填充图');
    xlim([1,10]);
    xlabel('时间');
    ylabel('数值');
    legend({'A','B','C'}, 'Location', 'best','FontSize',fontsize); % 设置legend
    set(gca,'FontName',fontname,'FontSize',fontsize,'LabelFontSizeMultiplier',labelmultiplier,'TitleFontSizeMultiplier',titlemultiplier);
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.5 绘图效果

    在这里插入图片描述

    3. 结语

    通过以上步骤,能够高效地使用MATLAB绘制带有堆叠填充效果的图形,并通过句柄方便清晰地控制图形的样式和属性。这个方法可以有效展示多组数据在不同类别上的累积贡献。当然本文仅仅选取了一个经典示例,大家可以根据自己的需求合理调整。

  • 相关阅读:
    MySQL高级SQL语句(1)
    js逆向算法
    【不积跬步无以至千里】Linux批量新建分区
    .NET高性能开发-位图索引(一)
    Java并发编程学习12-任务取消(上)
    第10讲:Vue组件的定义与注册
    进阶JAVA篇-深入了解枚举与抽象枚举
    shell中 << EOF 和 EOF 使用
    [架构之路-19]:目标系统 - 硬件平台 - 案例1 - 用单片机STM8/STM32搭建目标系统(以无线传感器LoRa终端为例)
    超过50%的测试员不懂“测试”,凭什么月薪20k?
  • 原文地址:https://blog.csdn.net/weixin_43323302/article/details/137247406