如何画有五个变量的图形呢?
12 个回答
--------------------------- 2018.12 Update ----------------------------
最近学了可视化的课,感觉还蛮有趣的,更新一些我觉得挺有效的方法:
1)如果高维特征里有时空信息的话:
这张图上可以理解为一个物体的移动轨迹,z-axis是时间,轨迹图上的蓝球流动速度等价于物体的移动速度(对应颜色为越红移动速度越快)。这样作图的缺点是会出现“Occlusion hides information“的现象,即当轨迹间有重合甚至反向的时候,有效信息会被遮挡。
2)Parallel Coordinates
每一个纵轴代表一个维度的特征,不同颜色的线代表不同类别的样本。不得不说这个图展示的变量非常多,但需要分布有一定规律性,否则这几种颜色的线会满天飞。
再附个相关链接: https://www. youtube.com/watch? v=ypc7Ul9LkxA
3)Glyph Design
通过不同结构的图形来呈现变量。这个方法其实我们每天都会接触到。比如玩游戏的时候,不同职业会有不同的图标,有些网页会用不同的头像代表不同的职业,厕所会有颜色(蓝/红)以及形状(正三角/倒三角)来区分性别等等。所以可以通过设计多个不同的元素来进行组合,从而呈现多类信息。
4)Horizon Graph
出自斯坦福的论文,也是我个人比较喜欢的一个作图方法。对于序列型数据的图(比如关于时间的折线图)进行压缩,然后把多个图堆叠在一起相互比较,可以解决不同序列间量级差距过大的问题。
原则上算4维,不算五维,但可以巧妙把一些信息镶嵌到图的属性里,比如用std作为layer的color depth。我的一个作业里有用过这个方法,所以有个demo可以给大家参考:
--------------------------- 原答案 ----------------------------
说个常见的处理方法:
三维图形的基础上,第四维用颜色表示。另外建议用离散变量作为颜色取值
---------------------------------------------2016.07.30晚上更----------------------------------------------
早上只看到“四个输入变量”就匆匆回答了,不好意思。今晚有空来补救一下
先说我的答案吧: 目前还没有一种广受认可的方法可以用三维图像表示五维数据
但方法总是有的:
(1)3维+时间=4维图像
做成动图,实际上是用四维表示五维数据了。这些在科普节目里见得比较多,适用性也比较广
(2)另找一个
图像特征
比如将颜色特征分成两个参数、
以透明度做第五维、
取曲面的光滑程度做第五维(类似于网格线的振幅和频率)、
在网格上标记数字做第五维、
以图形边界颜色或亮度做第五维等(见最后一张图)。
暂时想到这么多。实际上难以操作,效果也不直观,我从来没见过有这么做的分析图
(3)3维+颜色+通过 变量间的逻辑 合理描述
用2维图像表示4维数据不是不可能的,这要取决于对变量的理解。拿FB的数据分析比赛举例:
x,y是地图的横纵坐标;颜色理解为事件种类;点的大小是1/accuracy,意味着事件可能发生的位置,accuracy理解为定位精确性;透明度表示发生频数。这里用2维+颜色的图像表达了4个变量的信息。最后一张图也用了这个思路。题主可以自己思考变量的逻辑进行低维表达
(4)分若干子图
看字面意思大家应该都懂了
这张图每一个二维子图都表示了5个变量的信息
(5)以上,都只是启迪一下,实现起来未必容易。如果题主五个变量都是连续型的,我建议分多次绘图。如果有离散型变量,针对这个离散型变量多下功夫多做尝试
首先说下我觉得最靠谱的画法,就拿今年美赛的浴缸题为例,先上图(手机拍的,渣画质见谅)
我为了表现一段时间中一个三维浴缸中水的温度的分布(温度函数有四个自变量,三个空间一个时间),首先,我选择的是每一小段时间画一个这个时刻的温度分布图,排在一起。然后,对于每一个固定时刻我画了一个分层的colorfunction(一个mathematica的做图函数,用颜色的冷暖表现函数值,这也恰好符合我想表现的温度),这里的分层是为了能够看清空间内部的温度分布。
留坑待补,具体的mathematica实现
最后我建议楼主根据具体问题选择合适的可视化方法,比如函数在这个四维空间中有旋转对称性,那么就可以降维画截面图了。如果有时间维度可以参考我的方法,没有我的方法就不太适合。另外,我这个是为了放在论文中才这么处理时间维度的,如果可以用动图当然是更好的展现时间的方式,其实我上面的方法加上动图就可以表现5个变量的函数了,楼主可以自行去掉一个最不喜欢的维度表现方式。