我正在使用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个中心点,它们很可能会相互重叠。
我正在考虑一种显示每个多边形的相对方式,而不会在每个多边形之间失去太多关系,如果可能的话......
任何想法如何做到这一点,或者可能是另一种方法如何规范化?
答案 0 :(得分:11)
正如@daroczig所建议的那样,数据的对数转换是可行的方法。我只是想补充一点,你可以执行许多类型的转换。
也许一个例子可能对此有所帮助。我将使用Parallel Coordinates可视化来说明示例,但相同的概念应适用于Radar Chart。所有实验均在MATLAB中进行。
考虑Fisher Iris dataset,它包含150个实例,其中每个点有4个维度。如果我们在正常值范围之外添加异常点,我们得到:
正如预期的那样,情节会缩放以适应新点,但结果我们失去了之前的详细视图。
答案是通过应用某种转换来规范化数据。以下显示了四种不同转换的比较:
最小/最大标准化:
x_new = (x-min)/(max-min)
,以便x_new in [0,1]
<强> Z-标准化强>:
x_new = (x-mean)/std
,其中x_new ~ N(0,1)
使用logistic sigmoid进行softmax规范化:
x_new = 1/(1+exp(-(x-mean)/std))
和x_new in [0,1]
能量正常化:
x_new = x / ||x||
,使x_new in [0,1]
(使每个点成为单位矢量)
答案 1 :(得分:2)
将数据转换为logaritmic scale不是一种选择吗?
这样一些极端值不会扭曲/挤压其他值。只需计算数组值的公共/自然对数(例如,请参阅w3school page on it),然后将其提供给图表API。