MATLAB绘图基础9:多变量图形绘制

参考书:《 M A T L A B {\rm MATLAB} MATLAB与学术图表绘制》(关东升)。



9.多变量图形绘制
9.1 气泡图
  • 气泡图用于展示三个或更多变量变量之间的关系,气泡图的组成要素:

    • 横轴( X {\rm X} X轴):表示数据集中的一个变量,通常是数值变量;
    • 纵轴( Y {\rm Y} Y轴):表示数据集中的一个变量,通常是数值变量;
    • 气泡的大小:表示数据集中的另一个数值变量,较大的气泡表示较大的数值,较小的气泡表示较小的数值;
    • 气泡的颜色:表示数据集中的第四个变量,通常是一个分类变量,不同颜色表示不同的类别或子组;
    • 数据点标签:可在气泡上添加标签,显示具体数值或其他相关信息;
  • 气泡图的常见应用场景:

    • 经济数据分析:气泡图用于展示不同国家或地区的经济指标,如国内生产总值和人均收入间的关系,横轴表示生产总值,纵轴表示人均收入,气泡大小表示人口数量,不同颜色气泡代表不同地区或国家;
    • 金融市场分析:气泡图用于展示不同资产类别的回报率、波动性和市值间的关系;
    • 科学研究:气泡图用于展示实验结果,横轴和纵轴表示两个相关变量,气泡大小表示第三个变量;
    • 地理信息系统:气泡图常用于地理数据的可视化,横轴和纵轴表示地理坐标,气泡大小表示地区的人口或某种地理现象的强度;
    • 环境科学:气泡图可用于显示不同地区或国家的环境指标,如:二氧化碳排放量和可再生能源使用情况;
    • 医疗和生物学:气泡图用于显示不同治疗方案的效果,横轴和纵轴表示治疗参数,气泡大小表示患者数量,不同颜色气泡表示不同的疾病类型;
    • 社会科学:气泡图用于分析社会变量间的关系,如:教育水平、收入和居住地的关联;
  • 气泡图绘制基本示例:

    matlab 复制代码
    % ch09_01.m
    clear;
    clc;
    
    % 1.假设有一组数据,X代表横坐标,Y代表纵坐标,C代表每个点的颜色
    X = rand(1, 100);               % 生成100个随机数作为横坐标
    Y = rand(1, 100);               % 生成100个随机数作为纵坐标
    C = rand(1, 100);               % 生成100个随机数作为颜色值
     
    % 2.创建气泡图
    scatter(X, Y, 30, C, 'filled');
    colorbar;                       % 显示颜色条
    
    % 3.标签、标题;
    title('气泡图基本绘制示例');     % 图的标题
    xlabel('X轴');                  % X轴标签
    ylabel('Y轴');                  % Y轴标签
    
    % 4.生成高质量图像;
    dpi = 600;
    imagePath = 'D:\自动控制理论\MATLAB绘图\Images\ch09_01.png';
    print(imagePath, '-dpng', ['-r', num2str(dpi)]);
9.2 堆积折线图
  • 堆积折线图可显示多个数据系列叠加在一起的折线图,常用于展现不同类目的数据趋势变化;

  • 堆积折线图常见应用场景:

    • 时间序列数据的趋势比较:堆积折线图常用于比较多个事件序列数据的趋势,如:一个公司可使用堆积折线图比较不同产品线的销售趋势,了解哪个产品线对总销售额的贡献最大;
    • 市场份额分析:堆积折线图用于比较不同公司或产品在市场上的份额变化,每个公司或产品的趋势线叠加在一起,显示它们在市场份额方面的相对贡献;
    • 资源分配和规划:项目管理和资源规划中,堆积折线图用于比较不同项目或任务的进度趋势,及对总体资源利用的影响;
    • 社会经济数据比较:政府和研究机构可使用堆积折线图来比较不同地区或群体的社会经济指标的趋势;
    • 生态学研究:生态学研究中,堆积折线图可用于比较不同物种或生态系统中各个因素的趋势,以研究它们间的相互作用;
    • 投资组合分析:金融领域中,堆积折线图可用于比较不同投资组合中各个资产的表现,并展示它们对总投资组合价值的贡献;
  • 堆积折线图基本绘制示例:

    matlab 复制代码
    % ch09_02.m
    clear;
    clc;
    
    % 1.创建示例数据;
    microseconds = [100, 200, 300, 400, 500, 600, 700, 800];
    method1_results = [10, 15, 13, 17, 20, 25, 28, 30];
    method2_results = [9, 12, 11, 14, 18, 20, 23, 25];
    method3_results = [5, 9, 10, 13, 16, 20, 24, 26];
    
    figure;
    hold on;
    
    % 2.绘制折线图;
    plot(microseconds, method1_results, 'b-o', 'LineWidth', 2, 'MarkerSize', 8, 'MarkerFaceColor', 'b');
    plot(microseconds, method2_results, 'r-s', 'LineWidth', 2, 'MarkerSize', 8, 'MarkerFaceColor', 'r');
    plot(microseconds, method3_results, 'g-^', 'LineWidth', 2, 'MarkerSize', 8, 'MarkerFaceColor', 'g');
    
    % 3.添加区域填充
    fill([microseconds, fliplr(microseconds)], [method1_results, fliplr(method1_results + method2_results)], 'c', 'EdgeColor', 'none', 'FaceAlpha', 0.5);
    fill([microseconds, fliplr(microseconds)], [method1_results + method2_results, fliplr(method1_results + method2_results + method3_results)], 'y', 'EdgeColor', 'none', 'FaceAlpha', 0.5);
    
    % 4.标题、标签、图例;
    xlabel('时间/微秒');
    ylabel('实验结果');
    title('堆积折线图基本示例图');
    legend('Method 1', 'Method 2', 'Method 3');
    grid on;
    hold off;
    
    % 5.生成高质量图像;
    dpi = 600;
    imagePath = 'D:\自动控制理论\MATLAB绘图\Images\ch09_02.png';
    print(imagePath, '-dpng', ['-r', num2str(dpi)]);
9.3 堆积面积图
  • 堆积面积图通常用于展示多个类别或组的数据在一个时间段或连续轴上的积累趋势,每个类别的数据以不同颜色的堆积区域表示,观察整体趋势及每个类别的贡献;

  • 堆积面积图常见的应用场景:

    • 财务数据分析:堆积面积图用来展示公司的财务数据,如:收入、成本、利润等在不同时间段的堆积变化,每个类别代表一个财务指标,时间轴表示不同的财年或季度;
    • 市场份额分析:堆积面积图可用于展示不同竞争对手在市场上的份额随时间的变化,每个竞争对手的市场份额用不同颜色的堆积面积表示;
    • 生态学研究:生态学研究中,堆积面积图用来展示不同物种在生态系统中的相对丰富度随时间的变化,每个物种的丰富度用不同颜色的堆积面积表示;
    • 人口统计学研究:堆积面积图用于展示不同年龄组或人口组在一段时间内的人口分布变化,每个年龄组或人口组用不同颜色的堆积面积表示;
    • 气象数据分析:气象学中,堆积面积图用于展示不同气象因素,如:温度、湿度、降水等,在一年中的季节性变化,每个气象因素用不同颜色的堆积面积表示;
    • 电力消耗分析:用于展示不同能源来源,如:煤炭、天然气、风能、太阳能等,在一个地区的电力消耗情况,每种能源来源用不同颜色的堆积面积表示;
  • 堆积面积图绘制基本示例:

    matlab 复制代码
    % ch09_03.m
    clear;
    clc;
    
    % 1.生成基本数据;
    X = 1:50;
    Y1 = randi([1, 100], 1, 50);
    Y2 = randi([1, 100], 1, 50);
    Y3 = randi([1, 100], 1, 50);
    
    figure;
    
    stackY = [Y1;Y1 + Y2;Y1 + Y2 + Y3];
    
    % 2.绘制堆积面积图;
    area(X, stackY', 'EdgeColor', 'none');
    
    % 3.标签、标题、图例;
    xlabel('X轴');
    ylabel('Y轴');
    title('堆积面积图基本示例图');
    legend('Y1系列', 'Y2系列', 'Y3系列');
    
    % 4.生成高质量图像;
    dpi = 600;
    imagePath = 'D:\自动控制理论\MATLAB绘图\Images\ch09_03.png';
    print(imagePath, '-dpng', ['-r', num2str(dpi)]);
9.4 堆积柱状图
  • 堆积柱状图用于可视化分类数据的图形类型,适用于展示多个类别的一个或多个组中的相对比例和总计;

  • 堆积柱状图将多个柱状图堆积在一起,形成一个整体柱状图,每个柱子代表一个组,堆积在柱子内部的不同颜色的部分代表不同的类别;

  • 堆积柱状图常见的应用场景:

    • 市场份额分析:堆积柱状图用于展示不同品牌或公司的市场份额,每个柱子代表一个市场或行业,柱子内的不同颜色部分表示不同品牌或公司的市场份额;
    • 资源分配:项目管理中,堆积柱状图可用于展示不同资源或任务在项目中的分配情况,每个柱子代表一个项目阶段或时间段,柱子内的不同颜色部分表示不同资源或任务的占用情况;
    • 研究数据分析:科学研究中,堆积柱状图可用于展示实验数据的不同类别的分布情况,每个柱子代表一个实验条件或样本组,柱子内的不同颜色部分表示不同类别的测量值;
    • 金融分析:金融领域中,堆积柱状图用于展示不同资产类别的投资组合,每个柱子代表一个投资组合,柱子内的不同颜色部分表示不同资产类别的占比;
  • 堆积柱状图基本绘制示例:

    matlab 复制代码
    % ch09_04.m
    clear;
    clc;
    
    % 1.创建模拟数据;
    companies = {'公司1', '公司2', '公司3', '公司4', '公司5'};
    product1 = [10, 20, 30, 50, 40];
    product2 = [40, 20, 30, 10, 50];
    product3 = [20, 30, 10, 40, 50];
    product4 = [30, 40, 50, 10, 20];
    product5 = [50, 10, 20, 30, 40];
    
    figure;
    
    % 2.绘制堆叠柱状图;
    bar([product1;product2;product3;product4;product5]', 'stacked');
    
    % 3.标题、标签、图例;
    xlabel('公司名称');
    ylabel('不同产品销售额');
    title('不同公司不同产品销售额(亿元)');
    legend('产品1', '产品2', '产品3', '产品4', '产品5', 'Location', 'northeastoutside');
    
    % 4.设置X轴刻度标签;
    xticks(1:5);
    xticklabels(companies);
    
    % 5.生成高质量图像;
    dpi = 600;
    imagePath = 'D:\自动控制理论\MATLAB绘图\Images\ch09_04.png';
    print(imagePath, '-dpng', ['-r', num2str(dpi)]);
9.5 平行坐标图
  • 平行坐标图用于可视化多维数据的图形类型,适用于探索多个特征或属性之间的关系;

  • 平行坐标图中,每个数据点表示为一条线段,该线段与坐标轴平行,每个坐标轴代表数据的一个特征或属性,通过在不同的坐标轴上绘制线段,观察不同特征之间的关系和模式;

  • 常见的平行坐标图的应用场景:

    • 数据探索和发现模式:平行坐标图用于探索多维数据集中的模式、趋势和异常值,观察线段在不同坐标轴上的分布和交叉;
    • 特征分析:机器学习和数据科学中,平行坐标图用来分析不同特征间的相关性和影响;
    • 分类和聚类:平行坐标图可视化不同类别或簇之间的差异;
    • 时间序列分析:每个坐标轴代表时间的不同点,平行坐标图用于可视化时间序列数据中的趋势和变化;
    • 地理信息系统:地理信息系统中,平行坐标图用于可视化和分析具有多个地理属性的地理数据,如:城市规划、地理特征的空间分布等;
    • 生物信息学:生物学和遗传学中,平行坐标图用于分析基因组数据,比较不同基因的表达水平,或可视化不同样本之间的差异;
    • 金融分析:金融领域中,平行坐标图用于分析不同金融指标间的关系,或用于股票和投资组合的分析;
  • 平行坐标图绘制基本示例:

    matlab 复制代码
    % ch09_05.m
    clear;
    clc;
    
    % 1.创建示例数据,每一行代表一个数据点,每一列代表一个属性;
    data = [
        0.3, 0.4, 0.2, 0.7, 0.5, 0.8, 0.9, 0.1;
        0.5, 0.6, 0.4, 0.8, 0.7, 0.2, 0.3, 0.9;
        0.2, 0.3, 0.1, 0.6, 0.4, 0.9, 0.8, 0.5;
        0.4, 0.5, 0.3, 0.7, 0.6, 0.2, 0.1, 0.9;
    ];
    
    % 2.创建一个新图形窗口;
    figure;
    
    % 3.获取数据点的数量;
    numDataPoints = size(data, 1);
    
    % 4.创建颜色矩阵,每行对应一个数据点的颜色;
    colors = jet(numDataPoints);
    
    % 5.绘制平行坐标图;
    for i = 1:numDataPoints
        parallelcoords(data(i, :), 'Color', colors(i, :));
        hold on; % 保持图形打开以添加更多的数据点
    end
    
    % 6.自定义坐标轴的范围;
    axis([1, 8, 0, 1]);
    
    % 7.标题、标签、图例;
    legend('Location', 'northeast');
    xlabel('属性');
    ylabel('属性值');
    title('平行坐标图');
    set(findobj(get(gca,'Children'),'LineWidth',0.5),'LineWidth',2.0);
    
    % 8.生成高质量图像;
    dpi = 600;
    imagePath = 'D:\自动控制理论\MATLAB绘图\Images\ch09_05.png';
    print(imagePath, '-dpng', ['-r', num2str(dpi)]);
9.6 散点图矩阵
  • 散点图矩阵用于同时展示多个变量之间的关系,通常用于多维数据集的探索性数据分析,分析变量之间的相关性、分布和趋势;

  • 散点图矩阵通过在一个矩阵中绘制多个散点图实现,在矩阵中的每个小格子里,显示两个不同变量之间的散点图;

  • 常见的散点图矩阵应用场景:

    • 探索数据集:帮助研究者快速了解数据集中多个变量之间的关系;
    • 发现相关性:通过散点图可以确定是否存在线性或非线性相关性,或是否存在群集或聚类;
    • 检测异常值:异常值在散点图中是离群点,容易被发现;
    • 了解分布:通过散点图了解每个变量的分布情况;
    • 数据预处理:建模前,散点图矩阵帮助确定哪些变量之间存在共线性,或哪些变量可能需要进行数据转换或归一化;
  • 绘制散点图矩阵基本示例:

    matlab 复制代码
    % ch09_06.m
    clear;
    clc;
    
    % 1.生成随机数据;
    data = randn(300, 5);
    
    % 2.绘制散点图矩阵;
    figure;
    
    for i = 1:5
        for j = 1:5
            subplot(5, 5, (i - 1) * 5 + j);
            if i == j
                histogram(data(:, i));
            else
                scatter(data(:, i), data(:, j), '.');
            end
        end
    end
    
    % 3.生成高质量图像;
    dpi = 600;
    imagePath = 'D:\自动控制理论\MATLAB绘图\Images\ch09_06.png';
    print(imagePath, '-dpng', ['-r', num2str(dpi)]);
相关推荐
I_Am_Me_1 分钟前
【JavaEE进阶】 JavaScript
开发语言·javascript·ecmascript
重生之我是数学王子11 分钟前
QT基础 编码问题 定时器 事件 绘图事件 keyPressEvent QT5.12.3环境 C++实现
开发语言·c++·qt
Ai 编码助手13 分钟前
使用php和Xunsearch提升音乐网站的歌曲搜索效果
开发语言·php
学习前端的小z17 分钟前
【前端】深入理解 JavaScript 逻辑运算符的优先级与短路求值机制
开发语言·前端·javascript
神仙别闹25 分钟前
基于C#和Sql Server 2008实现的(WinForm)订单生成系统
开发语言·c#
XINGTECODE26 分钟前
海盗王集成网关和商城服务端功能golang版
开发语言·后端·golang
zwjapple42 分钟前
typescript里面正则的使用
开发语言·javascript·正则表达式
小五Five43 分钟前
TypeScript项目中Axios的封装
开发语言·前端·javascript
前端每日三省1 小时前
面试题-TS(八):什么是装饰器(decorators)?如何在 TypeScript 中使用它们?
开发语言·前端·javascript
凡人的AI工具箱1 小时前
15分钟学 Go 第 60 天 :综合项目展示 - 构建微服务电商平台(完整示例25000字)
开发语言·后端·微服务·架构·golang