参考书:《 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)]);
-
直方图使用示例:
% 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)]);
7.2 箱线图
-
箱线图用于展示数据的分布和离散程度,显示数据的中位数、上下四分位数、异常值、最大值和最小值等信息;
-
箱线图示例:
- 上四分位数:亦称第一个四分位数 ( 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)]);
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)]);
-
密度图示例:绘制德国可再生能源发电量密度图。
% 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)]);
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.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)]);
% 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)]);