MATLAB绘图基础7:单变量图形绘制

发布于:2024-09-18 ⋅ 阅读:(127) ⋅ 点赞:(0)

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



7.单变量图形绘制
7.1 直方图
  • 直方图 ( H i s t o g r a m ) ({\rm Histogram}) (Histogram):一种常用于可视化数据分布的图形类型,用于显示数据集中各数值范围的频率分布情况;

  • 直方图将数据范围划分为若干个连续的区间,统计每个区间内数据点的数量或频率,用条形图形式展示;

  • 直方图特点和构成要素:

    • X {\rm X} X轴:通常表示数据的数值范围或区间,按照一定的划分方式排列;
    • Y {\rm Y} Y轴:通常表示每个数值范围内数据点的频率或数量,可以表示数据点的个数,可以表示相对频率(频率与总数的比值);
    • 区间:数据范围被划分为多个箱子或区间,每个箱子用来容纳特定范围内的数据点,箱子宽度可根据数据的分布情况调整;
    • 条形:每个箱子对应一个条形,高度表示该箱子内的数据点数量或频率,高度越高,即该范围内数据点越多;
  • 直方图可用于探索数据的分布特征,如:数据的中心位置、离散程度、异常值等;

  • 直方图绘制基本步骤:

    % 直方图绘制基本步骤:
    % 1.准备数据:首先准备好需要绘制直方图的数据;
    
    % 2.选择分箱数量:决定直方图中的分箱数量,会影响可视化效果;
    
    % 3.绘制直方图:使用histogram绘制直方图;
    histogram(data, num_bins);
    
    % 参数说明:
    % data:数据向量;
    % num_bins:分箱数量;
    
    % 4.自定义外观:自定义外观包括颜色、边界线型、透明度等;
    
    % ch07_01.m
    clear;
    clc;
    
    % 直方图绘制基本示例:
    % 1.生成随机数据;
    data = randn(10000, 1);
    
    % 2.绘制直方图,分箱20;
    histogram(data, 20);
    
    % 3.标签、标题等设置;
    xlabel('X');ylabel('Y');
    title('直方图');
    grid on;
    
    % 4.保存高质量图像;
    dpi = 600;
    imagePath = 'D:\自动控制理论\MATLAB绘图\Images\ch07_01.png';
    print(imagePath, '-dpng', ['-r', num2str(dpi)]);
    

    1

  • 直方图使用示例:

    % ch07_02.m
    clear;
    clc;
    
    % 1.生成一个高三年级数学考试成绩的模拟数据;
    min = 0;        % 分数下限:0分;
    max = 150;      % 分数上限:150;
    n = 2000;       % 学生数量:高三年级2000人;
    
    randomIntegers = randi([min, max], 1, n);
    
    % 2.生成模拟数据的直方图;
    histogram(randomIntegers, 10);
    
    % 3.标签、标题等设置;
    xlabel('分数区间');ylabel('各分数段占据人数');
    title('高州市第一中学2015年高三年级数学考试成绩分布图');
    grid on;
    
    % 4.保存高质量图像;
    dpi = 600;
    imagePath = 'D:\自动控制理论\MATLAB绘图\Images\ch07_02.png';
    print(imagePath, '-dpng', ['-r', num2str(dpi)]);
    

    2

7.2 箱线图
  • 箱线图用于展示数据的分布和离散程度,显示数据的中位数、上下四分位数、异常值、最大值和最小值等信息;

  • 箱线图示例:

    3

    • 上四分位数:亦称第一个四分位数 ( Q 1 ) ({\rm Q1}) (Q1),等于该样本中所有数值从小到大排列后,第 25 % 25\% 25%的数字;
    • 中位数:亦称第二个四分位数 ( Q 2 ) ({\rm Q2}) (Q2),等于该样本中所有数值从小到大排列后,第 50 % 50\% 50%的数字;
    • 下四分位数:亦称第三个四分位数 ( Q 3 ) ({\rm Q3}) (Q3),等于该样本中所有数值从小到大排列后,第 75 % 75\% 75%的数字;
  • 箱线图应用:

    • 查看数据集的分布情况:通过箱线图直观地了解数据的集中趋势、对称性及异常值情况;
    • 比较不同数据集的分布差异:通过绘制多个数据集的箱线图并排比较,比较它们的位置、范围和形状差异;
    • 判断数据集是否满足某种分布:通过箱线图的形状大致判断数据是否符合正态分布或其他分布形状;
  • 箱线图绘制基本步骤:

    % 箱线图绘制基本流程:
    % 1.准备数据:准备一个包含要绘制的数据的向量或矩阵;
    % 2.绘制箱线图:使用boxplot函数创建箱线图;
    data = [data1, data2, data3, ...];
    boxplot(data);
    
    % ch07_03.m
    clear;
    clc;
    
    % 创建箱线图基本示例:
    % 1.创建模拟数据向量;
    data1 = randn(1000, 1);
    data2 = randn(1000, 1) + 1;
    data3 = randn(1000, 1) - 1;
    
    % 2.数据矩阵;
    data = [data1, data2, data3];
    
    % 3.绘制箱线图;
    % 'Labels':设置三个数据组的标签;
    % 'Colors':设置箱线图颜色;
    % 'Symbol':设置离散值的样式,红色圆点('ro');
    boxplot(data, 'Labels', {'Data Group 1', 'Data Group 2', 'Data Group3'},...
            'Colors', ['b', 'g', 'r'], 'Symbol', 'ro');
    
    % 4.设置X、Y轴标签、设置标题;
    set(findobj(get(gca,'Children'),'LineWidth',0.5),'LineWidth',1.0);
    title('箱线图基本示例图');
    xlabel('不同数据组');ylabel('数据值');
    
    % 5.保存高质量图像;
    dpi = 600;
    imagePath = 'D:\自动控制理论\MATLAB绘图\Images\ch07_04.png';
    print(imagePath, '-dpng', ['-r', num2str(dpi)]);
    

    4

7.3 密度图
  • 密度图亦称核密度估计图,用于可视化数据分布的图形,显示连续变量的概率密度分布;

  • 密度图主要应用场景:

    • 显示数据分布形态:密度图能直观地展示数据的分布形式,如:正态分布、偏态分布、多峰分布等;
    • 比较不同数据分布:通过多个密度图的重叠来比较不同数据样本的分布形状;
    • 发现数据集中的模态:密度图可以清楚地显示数据集的单模态、双模态或多模态分布;
    • 查找突出点或异常值:在密度图中观察异常突出的峰值点或偏离主曲线的异常值;
    • 评估拟合效果:通过观察数据分布与理论分布拟合曲线的重合状况来评估拟合效果;
    • 显示离散性变量的连续概率:可以为离散型数据生成密度曲线,将其可视化为连续分布;
  • 密度图绘制过程:

    % ch07_04.m
    clear;
    clc;
    
    % 使用ksdensity函数创建单变量密度图;
    % 1.准备数据;
    data = randn(1000, 1);
    
    figure;
    ksdensity(data);
    
    
    % 2.设置X、Y轴标签、设置标题;
    set(findobj(get(gca,'Children'),'LineWidth',0.5),'LineWidth',1.5);
    title('单变量密度图基本示例图');
    xlabel('X轴');ylabel('概率密度');
    
    % 3.保存高质量图像;
    dpi = 600;
    imagePath = 'D:\自动控制理论\MATLAB绘图\Images\ch07_05.png';
    print(imagePath, '-dpng', ['-r', num2str(dpi)]);
    

    5

  • 密度图示例:绘制德国可再生能源发电量密度图。

    % ch07_05.m
    clear;
    clc;
    
    % 1.读取数据内容;
    data = readtable('ch07_05.csv', 'PreserveVariableNames', true);
    
    % 2.选择要创建密度图的数据列;
    windData = data.Wind;
    solarData = data.Solar;
    
    % 3.计算Wind和Solar的核密度估计;
    % f_wind:包含核密度估计的值;
    % xi_wind:包含与这些值对应的数据点的位置;
    [f_wind, xi_wind] = ksdensity(windData);
    [f_solar, xi_solar] = ksdensity(solarData);
    
    % 4.绘制Wind和Solar密度图;
    figure;
    plot(xi_wind, f_wind, 'LineWidth', 2, 'DisplayName', '风力');
    hold on;
    plot(xi_solar, f_solar, 'LineWidth', 2, 'DisplayName', '太阳能');
    
    % 5.标题和标签;
    title('可再生能源发电量密度图');
    xlabel('数据值');
    ylabel('密度');
    legend('Location', 'Best');
    grid on;
    
    % 6.保存高质量图像;
    dpi = 600;
    imagePath = 'D:\自动控制理论\MATLAB绘图\Images\ch07_06.png';
    print(imagePath, '-dpng', ['-r', num2str(dpi)]);
    

    6

7.4 小提琴图
  • 小提琴图结合了箱线图和核密度图,用于可视化数据的分布和密度,帮助分析数据的形状、中位数、四分位数范围及可能的多峰性;

  • 小提琴图和密度图区别:

    • 小提琴图同时展示了数据的密度分布和四分位数信息,密度图只显示分布的形状;
    • 小提琴图通过原始样本直接生成,密度图通过核函数估计得到概率密度曲线;
    • 小提琴图对数据量少的样本也能给出合理估计,密度图需要足够大的样本量;
    • 小提琴图更直观,可以直接看出数据的峰值、偏斜情况,密度图需要一定解析;
    • 密度图可以绘制理论分布与数据的拟合效果,小提琴图侧重展示样本本身分布;
    • 小提琴图更适合互相比较不同数据集,密度图更适合展示单个数据集分布形态;
    • 小提琴图对异常值或离群点更敏感,密度图中异常值或离群点对总体曲线影响较小;
  • 小提琴图绘制基本示例:

    % ch07_06.m
    clear;
    clc;
    
    % 小提琴图基本绘制示例:
    % 1.生成数据;
    data = randn(1000, 10);
     
    % 2.绘制小提琴图;
    violinplot(data);
    
    % 3.标签、标题;
    xlabel('数据组');
    ylabel('数据值');
    title('小提琴图基本示例');
    
    % 4.保存高质量图像;
    dpi = 600;
    imagePath = 'D:\自动控制理论\MATLAB绘图\Images\ch07_07.png';
    print(imagePath, '-dpng', ['-r', num2str(dpi)]);
    

    7

7.5 饼图
  • 饼图用于显示不同类别或部分占整体的比例关系,饼图每个扇形的面积表示相应类别或部分所占比例的大小;

  • 饼图的基本创建过程:

    % ch07_07.m
    clear;
    clc;
    
    % 创建饼图的基本示例:
    % 1.创建数据
    num = [10, 20, 46, 75, 40, 10];
    scoreRange = {'100-120', '90-100', '80-90', '70-80', '60-70', '0-60'};
    
    % 2.绘制饼图
    figure;
    pie(num, scoreRange);
    
    title('机电1154高等数学各分数段人数占比');
    legend(scoreRange, 'Location', 'Best');
    
    % 3.保存高质量图像;
    dpi = 600;
    imagePath = 'D:\自动控制理论\MATLAB绘图\Images\ch07_08.png';
    print(imagePath, '-dpng', ['-r', num2str(dpi)]);
    

    8

    % ch07_08.m
    clear;
    clc;
    
    % 绘制伏羲科技各岗位人数占比;
    % 1.生成数据;
    postNum = [3, 80, 50, 15, 35, 20];
    postName = {'管理岗', '研发岗', '销售岗', '售后岗', '普通岗', '其他岗'};
    
    % 2.绘制饼图;
    figure(1);
    pie(postNum, postName);
    
    % 3.添加标题、图例;
    legend(postName, 'Location', 'Best');
    title('伏羲科技各岗位人数占比');
    
    % 4.保存高质量图像;
    dpi = 600;
    imagePath = 'D:\自动控制理论\MATLAB绘图\Images\ch07_09.png';
    print(imagePath, '-dpng', ['-r', num2str(dpi)]);
    

    9


网站公告

今日签到

点亮在社区的每一天
去签到