Matlab绘图(三)散点图—四维数据、五维数据、六维数据、七维数据可视化分析

  • 一、前言
  • 二、散点图特征分析
    • (1)原理分析:
    • (2)方案分析:
      • 四维数据进行可视化方案
      • 五维数据进行可视化方案
      • 六维数据进行可视化方案
      • 七维数据进行可视化方案
  • 三、散点图之六维数据可视化示例
    • step1、三维数据进行可视化
    • step2、五维数据进行可视化
    • step3、六维数据进行可视化
    • 完整代码
  • 四、思考
  • 五、参考博客

一、前言

  • 这将是个有趣的帖子,上次我写到了关于变色散点图的二维、三维绘制。在二维散点图绘制中,颜色变化映射的数据是y值;三维绘制中,颜色的变化映射的数据是z值。
  • 正常来说,我们碰到的绘图数据大多数情况是二、三维的。但是四、五、六、七维度的情况还是存在的,我最近做项目的时候遇到了六维度数据可视化的问题,在查找相关资料的时候受到 【Matlab】散点图之五维数据可视化和matlab的四维图像数据可视化 两位博主优秀帖子的启发,顺利完成了六维度数据的可视化。同时,对于四维、五维、六维、七维数据在散点图上的可视化方案自己也做出了一些思考,特此记录。

二、散点图特征分析

(1)原理分析:

  1. 对于二维散点图来说,可以利用的特征有:x值 、y值、散点的大小、散点的填充颜色、散点的线框颜色、散点的形状。六大特征,这就意味着对于二维散点图可以进行二到六维数据的可视化操作。

  2. 对于三维散点图来说,可以利用的特征有:x值 、y值 、z值、散点的大小、散点的填充颜色、散点的线框颜色、散点的形状。七大特征,这就意味着对于三维散点图可以进行三到七维数据的可视化操作。

基于上述分析,利用散点图实现对四维、五维、六维甚至七维数据的可视化是可行的方案,具体需要根据自己的数据情况来进行方案选择。

(2)方案分析:

四维数据进行可视化方案

大体可以有两种方案:

  1. 采用二维散点图。除了x值、y值以外,在散点的大小、散点的填充颜色、散点的线框颜色、散点的形状四个特征中任选其二。选择时应该考虑你的数据量大小。
  2. 采用三维散点图。除了x值 、y值、z值以外,在散点的大小、散点的填充颜色、散点的线框颜色、散点的形状四个特征中任选其一。同样,选择时应该考虑你的数据量大小。

五维数据进行可视化方案

大体也可以有两种方案:

  1. 采用二维散点图。除了x值、y值以外,在散点的大小、散点的填充颜色、散点的线框颜色、散点的形状四个特征中任选其三。选择时应该考虑你的数据量大小。
  2. 采用三维散点图。除了x值 、y值、z值以外,在散点的大小、散点的填充颜色、散点的线框颜色、散点的形状四个特征中任选其二。同样,选择时应该考虑你的数据量大小。

六维数据进行可视化方案

思路同上,在下面我会以六维数据的散点图可视化为例做出示意。

七维数据进行可视化方案

需要注意的是七维数据的表达就只能采用三维散点图加上其余四项特征了。

三、散点图之六维数据可视化示例

本方案采用三维散点图+散点的大小、散点的填充颜色、散点的线框颜色六个特征对数据进行可视化操作,并且方案实施分为三步:

step1、三维数据进行可视化

  1. 在变色散点图的二维、三维绘制中,我写到了利用scatter3函数进行三维散点图的基本绘制,将六维中的三维数据可视化出来。
clc;
clear;
A=magic(6);
x=A(:,1);
y=A(:,2);
z=A(:,3);
scatter3(x,y,z);

step2、五维数据进行可视化

  1. 利用scatter中控制散点大小的sz和颜色分布的c 映射另外两维数据,并添加对应的图例。
 %scatter(x,y,sz,c) c控制颜色,其颜色可直接赋值 r、 g 、k、 b等,也可以用矩阵来设置对应x、y点对应圆圈的颜色分布
clc;
clear;
A=magic(6)
x=A(:,1);
y=A(:,2);
z=A(:,3);
s=A(:,4)*15;%映射大小
c=A(:,5);%映射填充颜色
f=A(:,6);%映射线框颜色figure;
%生成控制散点大小的数值s1=floor(s);sizes = unique(s1);
%生成颜色clos = unique(c);cc = parula(length(clos));    cc = fliplr(cc')';for i=1:length(clos)ind = find(c== clos(i));  scatter3(x(ind),y(ind),z(ind),s(ind),cc(i,:),'fill');legendtext{i} = num2str(clos(i));legendtext1{i+1} = num2str(sizes(i));hold on;end
legend(legendtext);


可以看到,现在图中已经对应了五维数据的可视化,但是散点图大小的图例没有显示出来,这里从【Matlab】散点图之五维数据可视化博主优秀的帖子中,可以获得 legendScatter(TextCell,SizeDim,Factor,LinSpec)函数,用来显示大小图例。

function [hleg,hobj]=legendScatter(TextCell,SizeDim,Factor,LinSpec)
%% LEGENDSCATTER: workaround for R2016a and later for scatter plot legend.
%   This function aims to simplify the creation of a legend for scatter plots.
%   The function will plot a legend on current axis with the right
%   markersize proportion.
%   NB. From version 1.0.5 is added the compatibility with previous MATLAB
%       version.
%
%   Inputs:   - TextCell: a cell array containing the legend-entry text.
%               WARNING: THE FIRST CELL IS THE TITLE !!!
%             - SizeDim: the ''MarkerSize'' dimension for each entry.
%               WARNING: length(SizeDim)==length(TextCell)-1 !!!
%             - Factor: normaling factor for enlarge the marker size in
%                       a linear way. (MarkerSize*sqrt(Factor)
%             - LinSpec: specify the marker-string.
%
%   EXAMPLE: -----------------------------------------------------
%             Factor=1.5;
%             A=[1,1,1;
%                2,2,2;
%                3,3,3;
%                4,4,4;
%                5,5,5;
%                6,6,6;
%                7,7,7;
%                8,8,8;
%                9,9,9;
%                10,10,10];
%
%             sh=scatter(A(:,1),A(:,2),(A(:,3).^2)*Factor,'ok');
%             %scattersize==MarkerSize*sqrt(Factor)pt)
%             leg=LEGENDSCATTER({'SIZE','1','2','3','4','5', ...
%                 '6','7','8','9','10'},[1:1:10],Factor,'ok');
%             leg.Location='NorthWest'; axis([0,11,0,11])
%            -----------------------------------------------------
%
%   VERSION:1.0.5
%   AUTHOR: Matteo Bagagli - ETH-Zurich // Oct. 2016
%   MAIL:   matteo.bagagli@erdw.ethz.ch%% FAKE PLOTS
hold on
hplt=zeros(length(TextCell),1)';
for ii=1:length(TextCell)hplt(ii)=plot(NaN,NaN,LinSpec);
end
hold off%% WORK
[hleg,hobj]=legend(hplt,TextCell,'Units','points');
drawnow % To update the figure and the legend
idx=(length(TextCell)+4):2:length(hobj); % Skip text and TITLE MARKER
%idx=(1:1:length(TextCell));
v=version;
if str2double(v(1)) >= 9                 % MATLAB v9.0 and higher% Titlehobj(1).FontWeight='bold';ActPos=hobj(1).Position;hobj(1).Position=[0.5,ActPos(2),ActPos(3)];hobj(1).HorizontalAlignment='center';hobj(1).FontSize=11;hobj(length(TextCell)+2).Marker='none';% Bodyfor ii=1:length(idx)hobj(idx(ii)).MarkerSize=SizeDim(ii)*sqrt(Factor);end
else                                     % MATLAB v8 and lower% Titleset(hobj(1),'FontWeight','bold');ActPos=get(hobj(1),'Position');set(hobj(1),'Position',[5,ActPos(2),ActPos(3)]);set(hobj(1),'HorizontalAlignment','center');set(hobj(1),'FontSize',11);set(hobj(length(TextCell)+2),'Marker','none');% Bodyfor ii=1:length(idx)set(hobj(idx(ii)),'MarkerSize',SizeDim(ii)*sqrt(Factor));end
end % end switch versionend % EndMain

利用legendScatter(TextCell,SizeDim,Factor,LinSpec) 函数,我们可以得到:

clc;
clear;
A=magic(6)
x=A(:,1);
y=A(:,2);
z=A(:,3);
s=A(:,4)*15;%映射大小
c=A(:,5);%映射填充颜色
f=A(:,6);%映射线框颜色figure;
%生成控制散点大小的数值s1=floor(s);sizes = unique(s1);
%生成颜色clos = unique(c);cc = parula(length(clos));    cc = fliplr(cc')';
legendtext1{1}='大小';for i=1:length(clos)ind = find(c== clos(i));  scatter3(x(ind),y(ind),z(ind),s(ind),cc(i,:),'fill');legendtext{i} = num2str(clos(i));legendtext1{i+1} = num2str(sizes(i)/15);hold on;end
legend(legendtext);
hold on;
Factor=1;
axes('position',get(gca,'position'),'visible','off');
legendScatter(legendtext1,sizes/15,Factor,'ok');


需要注意的是,生成第二的图例之前要加入下面的一行语句,防止上一个图例被覆盖。

axes('position',get(gca,'position'),'visible','off');

step3、六维数据进行可视化

  1. 利用散点图的线框颜色映射第六维度数据,调用颜色栏:
 %绘制线框颜色scatter3(x,y,z,s,c,'linewidth',2)colormap(cool);colorbar;legend(legendtext);

完整代码

clc;
clear;
A=magic(6)
x=A(:,1);
y=A(:,2);
z=A(:,3);
s=A(:,4)*15;%映射大小
c=A(:,5);%映射填充颜色
f=A(:,6);%映射线框颜色figure;
%生成控制散点大小的数值s1=floor(s);sizes = unique(s1);
%生成颜色clos = unique(c);cc = parula(length(clos));    cc = fliplr(cc')';legendtext1{1}='大小';for i=1:length(clos)ind = find(c== clos(i));  scatter3(x(ind),y(ind),z(ind),s(ind),cc(i,:),'fill');legendtext{i} = num2str(clos(i));legendtext1{i+1} = num2str(sizes(i)/15);hold on;end
hold on;%绘制线框颜色
scatter3(x,y,z,s,c,'linewidth',2)
title('六维图');
xlabel('第一维');% x轴名称、字体及大小
ylabel('第二维');% y轴名称、字体及大小
zlabel('第三维');% z轴名称、字体及大小
colormap(cool);
colorbar;
legend(legendtext);
Factor=1;
axes('position',get(gca,'position'),'visible','off');
legendScatter(legendtext1,sizes/15,Factor,'ok');

运行结果如下,为了美观需要对图例进行一些位置的调整。

四、思考

以上就是我自己关于4-7维数据在散点图上的一些可视化原理和分析方案。

  • 但是在这里呢,我还想说的就是绘图之前,我们需要仔细思考思考,有没有必要非要在一张图上绘制4-7维度?因为我觉得绘制出来的图只能作为一种示意功能,有可能会造成花里胡哨的感觉(当然这和审美有关系)
  • 例如,4维数据可以选择确定某一维数的情况下绘制多张三维图来表达数据的趋势关系,当然这个只是个人的一些思考和建议,具体问题还需要具体分析。

五、参考博客

最后,感谢两位博主的分享:

  1. 【Matlab】散点图之五维数据可视化
  2. 【matlab】的四维图像数据可视化

☀ 记录自己学习的同时,也希望能对大家有所帮助,欢迎留言交流!


Matlab绘图(三)散点图—四维数据、五维数据、六维数据、七维数据散点图可视化绘制相关推荐

  1. 《七天数据可视化之旅》第七天:可视化设计实战-数据大屏

    <七天数据可视化之旅>第七天:可视化设计实战-数据大屏 Destiny,某物流公司数据产品经理,目前从事数据平台搭建和可视化相关的工作.持续学习中,期望与大家多多交流数据相关的技术和实际应 ...

  2. 【Matlab绘图进阶第7弹】Matlab绘制二维散点图

    二维散点图主要反映数据的分布与聚合情况,在散点线性拟合图与数据分析中较为常见,不论是工科领域与管理科学领域,均涉及到散点图的绘制,下面一起和南同学来学习绘制二维散点图吧! 成图效果展示 绘图三步走 取 ...

  3. Matlab绘图(二)—变色散点图二维、三维绘制

    Matlab绘图(二)-散点图绘制 前言 二维散点图 scatter函数 gscatterr函数 思考 三维散点图 scatter3函数 前言 总结一下最近针对散点图的绘制学习到的scatter与gs ...

  4. MATLAB三维绘图(三)绘制等值线图

    MATLAB三维绘图(三)绘制等值线图 1.使用contour函数绘制等值图,示例: %% 显示不同颜色的梯度图 clear; clc; close all; x = -3.5:0.2:3.5; y ...

  5. 【Matlab绘图进阶第5弹】Matlab绘制三维散点图

    散点图又称之为气泡图.主要分为二维散点图与三维散点图.常用于反映数值之间的相对位置.在工科方面常见于机器学习和深度学习分类算法中的特征密度展示.本期为三维散点图绘制.后续会出二维散点图教程.下面来和我 ...

  6. MATLAB生成三维体数据

    MATLAB生成三维体数据 一.三维体数据的生成 二.多二维矩阵生成三维体数据 三.多二维图像生成三维体数据 四.DICOM序列生成三维体数据 五.其他 by HPC_ZY 之前写了医学影像三维重建的 ...

  7. Matlab绘图-详细,全面(二维三维等)

    原文 Matlab绘图(图像为本人所绘) 强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称 ...

  8. matlab绘图(其他形式的二维曲线)

    文章目录 目录 前言 一.其他坐标系下的二维曲线图 (1)对数坐标图 (2)极坐标图 极角为正数,顺时针旋转 极角为负数,逆时针旋转 二.统计图 (1)条形类图形 1.条形图: bar 函数  :ba ...

  9. Matlab绘图(1)——二维绘图

    Matlab绘图(1)--二维绘图 Matlab基础系列教程传送门: Matlab基础(0)--命令行常用指令 Matlab基础(1)--基础知识 Matlab基础(2)--向量与多项式 Matlab ...

最新文章

  1. IUSR_ 计算机名和IWAM_ 计算机名帐户的用户名和密码
  2. 回溯法+奇偶剪枝——Hdu 1010 Tempter of the Bone
  3. 【算法与数据结构】中缀表达式转为后缀表达式
  4. Java程序员从笨鸟到菜鸟之(六十八)细谈Spring(二)自己动手模拟spring
  5. python核心编程第六章练习6-12
  6. 触发父组件变量_Vue组件之间的传值
  7. 带你了解数据库的“吸尘器”:VACUUM
  8. Python实现TCP协议套接字多路复用
  9. 计算机专业的学生怎么可以连计算机发展史都不知道
  10. 3.1 RNN 循环神经网络 概述(上篇)
  11. 二维码生成,打包下载zip,BigDecimal的取值和计算,java发送http请求
  12. URLDecoder.decode 过时
  13. 超级详解 银行支付系统大小额(一代支付)、超级网银(二代支付)
  14. html 屏幕录像,绝对是最简单的屏幕录像方法!无需安装软件
  15. 什么是 NAS? 为什么要用 NAS?有什么好玩的功能?
  16. 数据分析可视化系列(四)B站关键词搜索结果
  17. 用C语言画一个Q版奥特曼
  18. Python全栈开发教程笔记
  19. 电视盒子显示ntp服务器异常,ntp服务器连接异常咋办
  20. android上传图片被旋转,解决android有的手机拍照后上传图片被旋转的问题

热门文章

  1. 项目经理必须具备的十大管理技能
  2. 安装冰点还原精灵的注意事项
  3. 单反、微单、卡片相机的区别
  4. 2023全国特种作业操作证高处安装、维护、拆除模拟一[安考星]
  5. windows mysql异地备份_windwos异地备份Mysql数据库
  6. 基于神经网络的车辆牌照字符识别技术
  7. 3 机器学习入门——决策树之天气预报、鸢尾花
  8. 【客户服务】如何进行大客户管理
  9. 服务器 信号超出范围,显示器上显示输入信号超出范围怎么处理
  10. win7重装系统以及office安装