如何为雷达图规范化统计数据

3
我在使用raphaelJS绘制“雷达图”以显示统计数据,每个轴应接受0到10之间的值。
例如,一个位于图表中心点正中央的多边形的值为[10,10,10,10,10]。简单吧...
但是,有可能出现这种情况:
[26, 14, 48, 18, 1],
[ 3, 14,  8,  9, 5],
[10,  6,  4, 16, 3]

这导致了以下结果(显示多边形,其中心点位于图表的左下角):

雷达图超出刻度

如果我按照其最大值(在本例中为48)将数据进行归一化,则所有其他中心点都会靠近图表中心,它的信息价值将接近于0。


根据其最大值进行归一化的相同数据:

[5.42, 2.92, 10,   3.75, 0.21],
[0.63, 2.92, 1.67, 1.88, 1.04],
[2.08, 1.25, 0.83, 3.34, 0.63]

雷达图归一化

现在,所有其他中心点都聚集在图表的中心,失去了它们的解释能力...如果有超过3个中心点,它们很可能会互相重叠。

居中显示

我在考虑一种相对的方式来显示每个多边形,而不会失去太多多边形之间的关系,如果可能的话...

有没有什么想法如何做到这一点,或者可能是另一种规范化的方法?

2个回答

13

daroczig所建议的,对数据进行对数转换是可行的方法。此外还可以使用其他类型的转换方式。

以下通过一个例子来说明转换的作用,这里使用平行坐标图可视化展示,但同样适用于雷达图。所有实验都在MATLAB中进行。

考虑Fisher Iris数据集,它包含150个样本,每个样本有4个维度。如果添加一个超出正常值范围的离群点,则得到:

org-vs-outlier

预计地,绘图被缩放以容纳新点,但结果我们失去了之前的详细视图。

解决办法是通过应用某种类型的转换来归一化数据。以下对四种不同的转换进行比较:

  • 最小/最大归一化:

    x_new = (x-min)/(max-min),使得x_new in [0,1]

  • z-标准化:

    x_new = (x-mean)/std,其中x_new ~ N(0,1)

  • 使用逻辑sigmoid函数的softmax归一化:

    x_new = 1/(1+exp(-(x-mean)/std)),并且x_new in [0,1]

  • 能量归一化:

    x_new = x / ||x||,使得x_new[0,1]之间(使每个点成为单位向量)

minmax-standarize-softmax-energy


1
这是一个非常有帮助的转换比较 - 谢谢。 - Matt Parker
1
哇,感谢你的努力。现在请稍等一下,让我想想如何将这个应用到我的图表上... :D - koko

2
将您的数据转换为对数比例尺不是一个选项吗?
这样,一些极端值就不会扭曲/挤压其他值。只需计算数组值的公共/自然对数(例如,请参见w3school页面),并将其提供给图表API即可。

这在技术上是最好的解决方案,但我认为“普通”用户不会理解为什么圆之间的距离变小。此外,多边形的中心点可能会出现视觉失真。 - koko
1
@koko:没错,理解对数刻度可能有些棘手。给出 Tufte 的对数动物图像链接(http://www.christopher-robbins.com/wordpress/2010/04/02/edward-tufte-log-animals/),访问者就能明白了 :) 不管怎样,我认为与对数相比,其他变换更容易理解。 - daroczig
@daroczig:非常感谢,我想你说得对...也许我会得到另一个答案,所以在接受你的答案之前我会再等一会儿。 - koko
@koko:当然,没有什么急事!我也希望能够得到更受欢迎的解决方案。 - daroczig
虽然我同意普通用户可能难以理解对数刻度,但我认为值得指出的是,普通用户将会更难理解雷达图。koko,你能扩展一下图表的上下文吗?这可能有助于我们提出更好的建议。 - Matt Parker
通过使用对数刻度解决了这个问题... 老实说,我真的不知道如何适应Amro的方法 :D - koko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接