当前位置:   article > 正文

科研绘图(六)散点图矩阵

散点图矩阵

散点图矩阵是一种显示多个变量之间关系的数据可视化工具,特别是当数据集包含三个或多个变量时,这种图表非常有用。这种图通常在探索性数据分析中使用,以便快速理解数据集中变量之间的关系。在散点图矩阵中,每行和每列都代表数据集中的一个变量,而矩阵中的每个小图(除了对角线)都是两个变量之间的散点图。

对角线图形:通常是每个变量的单变量分布。在您上传的图像中,这些是密度图,也可以是直方图或箱线图。它们提供了变量自身分布的视觉概览。

非对角线图形:这些是散点图,显示了数据集中每对变量间的关系。每个点代表数据集中的一个观测值。在您的图中,不同颜色的点代表

关键特征

1、多变量关系展示:

对角线上方和下方的图是散点图,显示两个变量之间的关系。散点的分布可以揭示变量之间是否存在相关性,比如线性关系、非线性关系或没有明显关系。

2、分布可视化:

对角线上的图通常是直方图或密度图,显示单个变量的分布。这有助于了解数据的分布形状、集中趋势和离散程度。

3、数据分组:

不同的颜色或形状可以代表数据中的分类变量。

用途:

关系识别:快速识别多个变量间的潜在关系,比如线性、非线性或没有关系。

异常值检测:观察数据点集群之外的点来识别异常值。

分布检查:在对角线的图表帮助理解各个变量的分布特征。

群组比较:使用颜色或形状区分不同的群组,可以帮助比较不同群组的特征。

下面我们分别使用matlab以及python实现该种绘图。为了结果的准确性,我们使用国赛2017年C题的数据集进行绘制。

 

首先,利用python绘制这种散点图矩阵。如下所示 

 

  1. import seaborn as sns
  2. import matplotlib.pyplot as plt
  3. # 创建数据框
  4. data = {
  5. '浓度(ppm)': [0, 100, 50, 25, 12.5, 0, 100, 50, 25, 12.5],
  6. 'B': [68, 37, 46, 62, 66, 65, 35, 46, 60, 64],
  7. 'G': [110, 66, 87, 99, 102, 110, 64, 87, 99, 101],
  8. 'R': [121, 110, 117, 120, 118, 120, 109, 118, 120, 118],
  9. 'H': [23, 12, 16, 19, 20, 24, 11, 16, 19, 20],
  10. 'S': [111, 169, 155, 122, 112, 115, 172, 153, 126, 115]
  11. }
  12. df = pd.DataFrame(data)
  13. # 使用Seaborn绘制散点矩阵图
  14. sns.set(style="ticks")
  15. sns.pairplot(df, diag_kind="kde", markers="o")
  16. # 显示图形
  17. plt.show()

  1. import pandas as pd
  2. import seaborn as sns
  3. import matplotlib.pyplot as plt
  4. # 创建数据框
  5. data = {
  6. '浓度(ppm)': [0, 100, 50, 25, 12.5, 0, 100, 50, 25, 12.5],
  7. 'B': [68, 37, 46, 62, 66, 65, 35, 46, 60, 64],
  8. 'G': [110, 66, 87, 99, 102, 110, 64, 87, 99, 101],
  9. 'R': [121, 110, 117, 120, 118, 120, 109, 118, 120, 118],
  10. 'H': [23, 12, 16, 19, 20, 24, 11, 16, 19, 20],
  11. 'S': [111, 169, 155, 122, 112, 115, 172, 153, 126, 115]
  12. }
  13. df = pd.DataFrame(data)
  14. # 定义数据列数量
  15. cols = df.columns
  16. n = len(cols)
  17. # 扩展颜色列表以匹配数据列的数量
  18. extended_colors = sns.color_palette("husl", n)
  19. # 设置更大的图表尺寸和字体大小
  20. plt.figure(figsize=(20, 20))
  21. plt.rcParams.update({'font.size': 10})
  22. for i in range(n):
  23. for j in range(n):
  24. ax = plt.subplot(n, n, i * n + j + 1)
  25. if i == j:
  26. sns.kdeplot(df[cols[i]], color=extended_colors[i], ax=ax)
  27. else:
  28. sns.scatterplot(x=cols[j], y=cols[i], data=df, color=extended_colors[j], ax=ax)
  29. # 设置坐标轴标签
  30. plt.xlabel(cols[j])
  31. plt.ylabel(cols[i])
  32. # 增加网格线
  33. plt.grid(True)
  34. # 增加整体标题和调整布局
  35. plt.suptitle("散点图矩阵 - 进一步美化版", fontsize=24)
  36. plt.subplots_adjust(top=0.95, hspace=0.4, wspace=0.4)
  37. # 显示图形
  38. plt.show()

为了进一步美化可视化,我们在每一张图中,都绘制了线性回归的拟合图如下所示。

 

下面是matlab绘图代码 

  1. % 创建数据矩阵
  2. data = [
  3. 0 68 110 121 23 111
  4. 100 37 66 110 12 169
  5. 50 46 87 117 16 155
  6. 25 62 99 120 19 122
  7. 12.5 66 102 118 20 112
  8. 0 65 110 120 24 115
  9. 100 35 64 109 11 172
  10. 50 46 87 118 16 153
  11. 25 60 99 120 19 126
  12. 12.5 64 101 118 20 115
  13. ];
  14. % 创建变量名
  15. varNames = {'浓度 (ppm)', 'B', 'G', 'R', 'H', 'S'};
  16. % 创建数据表格
  17. dataTable = array2table(data, 'VariableNames', varNames);
  18. % 绘制散点矩阵图
  19. figure;
  20. gplotmatrix(dataTable{:,:}, [], [], [], [], [], false);
  21. % 添加标签和标题
  22. xlabel('X轴标签');
  23. ylabel('Y轴标签');
  24. title('散点矩阵图');
  25. % 调整坐标轴范围
  26. xlim([min(data(:)) max(data(:))]);
  27. ylim([min(data(:)) max(data(:))]);
  28. % 自定义图例
  29. legend({'类别1', '类别2', '类别3'});
  30. % 调整图的尺寸
  31. set(gcf, 'Position', [100, 100, 800, 600]); % 设置图的位置和大小

 

  1. % 创建数据矩阵
  2. data = [
  3. 0 68 110 121 23 111
  4. 100 37 66 110 12 169
  5. 50 46 87 117 16 155
  6. 25 62 99 120 19 122
  7. 12.5 66 102 118 20 112
  8. 0 65 110 120 24 115
  9. 100 35 64 109 11 172
  10. 50 46 87 118 16 153
  11. 25 60 99 120 19 126
  12. 12.5 64 101 118 20 115
  13. ];
  14. % 创建变量名
  15. varNames = {'浓度 (ppm)', 'B', 'G', 'R', 'H', 'S'};
  16. % 创建数据矩阵和变量名
  17. % ... [数据和变量名的代码] ...
  18. % 创建数据表格
  19. dataTable = array2table(data, 'VariableNames', varNames);
  20. % 绘制散点矩阵图
  21. figure;
  22. colors = lines(size(data, 2)); % 使用 lines 颜色图
  23. markerShapes = {'+', 'o', '*', '.', 'x', 's', 'd', '^', 'v', '>'}; % 标记形状
  24. [h, ax] = gplotmatrix(dataTable{:,:}, [], [], colors, markerShapes, 12, 'on', 'hist', varNames, varNames);
  25. % 美化轴标签和标题
  26. set(ax, 'FontSize', 12, 'FontWeight', 'Bold');
  27. title('散点矩阵图', 'FontSize', 16, 'FontWeight', 'Bold');
  28. xlabel('X轴标签', 'FontSize', 14);
  29. ylabel('Y轴标签', 'FontSize', 14);
  30. % 添加网格线
  31. set(ax, 'XGrid', 'on', 'YGrid', 'on');
  32. % 调整子图间的间距
  33. set(ax, 'XTickLabelRotation', 45, 'YTickLabelRotation', 45);
  34. % 改进颜色映射
  35. colormap('jet');
  36. % 添加颜色说明标签
  37. for i = 1:length(varNames)
  38. annotation('textbox', [.85, 1 - 0.05*i, .1, .05], 'String', varNames{i}, 'Color', colors(i,:), 'EdgeColor', 'none');
  39. end
  40. % 保存图像
  41. saveas(gcf, '散点矩阵图_改进版.png');

 最后,我们尝试在每一个图中加入线性回归的拟合图,如下所示

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/706097
推荐阅读
相关标签
  

闽ICP备14008679号