Javascript 抑制d3plus长方体和胡须打印图形中的极端异常值
我试图在d3plus上创建带有胡须的方框图,以比较数据库中“this”提供程序和“all”提供程序之间的度量。我已经在预处理阶段从非常大的数组中计算了5-statistics摘要,并将其传递到Javascript 抑制d3plus长方体和胡须打印图形中的极端异常值,javascript,d3.js,boxplot,outliers,d3plus,Javascript,D3.js,Boxplot,Outliers,D3plus,我试图在d3plus上创建带有胡须的方框图,以比较数据库中“this”提供程序和“all”提供程序之间的度量。我已经在预处理阶段从非常大的数组中计算了5-statistics摘要,并将其传递到data变量中。如果运行附加的代码段(从d3plus修改),您可以看到代码和绘图的样子。然而,实际上,“All”类别中有一些极端的异常值,在我的代码中作为注释行给出:663373.22表示“max”(表示“All”)和-18427.39表示“min”(同样,表示“All”) 我看到有一个静音可以用于.y,但
data
变量中。如果运行附加的代码段(从d3plus修改),您可以看到代码和绘图的样子。然而,实际上,“All”类别中有一些极端的异常值,在我的代码中作为注释行给出:663373.22表示“max”(表示“All”)和-18427.39表示“min”(同样,表示“All”)
我看到有一个静音
可以用于.y
,但我不确定如何使它与函数一起工作
是否有一种相当直接的方法来“抑制”这些极端异常值的绘制(如果允许的话,这会将两个方框图折叠成平线),或者任何高于(或低于)IQR某个倍数的极端异常值
风险值数据=[
{“提供者”:“此”、“名称”:“最小”、“值”:-1055.79},
{“提供者”:“此”、“名称”:“q1”、“值”:-172.819},
{“提供者”:“此”、“名称”:“med”、“值”:-46.795},
{“提供者”:“此”,“名称”:“q3”,“值”:8.378},
{“提供者”:“此”、“名称”:“最大”、“值”:1033.15},
{“提供者”:“全部”,“名称”:“最小”,“值”:-1000},
{“提供者”:“全部”、“名称”:“q1”、“值”:-111.609999999},
{“提供者”:“全部”、“名称”:“中间”、“值”:-13.92},
{“提供者”:“全部”,“名称”:“q3”,“值”:124.22},
{“提供者”:“全部”,“名称”:“最大”,“值”:1000}
]
//663373.22, -18427.39
var可视化=d3plus.viz()
.容器(“即”)
.数据(数据)
.类型(“框”)
.id(“姓名”)
.x(“供应商”)
.y(“价值”)
.ui([{
“标签”:“可视化类型”,
“方法”:“类型”,
“值”:[“散布”、“框”]
}])
.draw()
根据我对文档的理解,静音
用作对象键,其中值可以是字符串、函数或数组。因此,如果您想禁用名称为q1
的所有数据点,您可以执行.y({value:'value',mute:'q1'})
至于解决方案,您需要一个函数来确定异常值。我找到并编辑了一个函数来返回可接受的值范围(IQR*multiple),您可以根据需要修改multiple
变量。然后使用一个简单的函数来检查传入的值是否超出范围
风险值数据=[
{“提供者”:“此”、“名称”:“最小”、“值”:-1055.79},
{“提供者”:“此”、“名称”:“q1”、“值”:-172.819},
{“提供者”:“此”、“名称”:“med”、“值”:-46.795},
{“提供者”:“此”,“名称”:“q3”,“值”:8.378},
{“提供者”:“此”、“名称”:“最大”、“值”:1033.15},
{“提供者”:“全部”,“名称”:“最小”,“值”:-1000},
{“提供者”:“全部”、“名称”:“q1”、“值”:-111.609999999},
{“提供者”:“全部”、“名称”:“中间”、“值”:-13.92},
{“提供者”:“全部”,“名称”:“q3”,“值”:124.22},
{“提供者”:“全部”,“名称”:“最大”,“值”:1000}
]
var outlierRange=outlierRange(data.map(d=>d.value))
var isOutlier=val=>(valoutlierRange[1])
//663373.22, -18427.39
var可视化=d3plus.viz()
.容器(“即”)
.数据(数据)
.类型(“框”)
.id(“姓名”)
.x(“供应商”)
.y({value:'value',mute:isOutlier})
.ui([{
“标签”:“可视化类型”,
“方法”:“类型”,
“值”:[“散布”、“框”]
}])
.draw()
函数异常值范围(someArray){
if(someArray.length<4)
返回数组;
设值q1、q3、iqr、maxValue、minValue、倍数=0.5;
values=someArray.slice().sort((a,b)=>a-b);//快速复制数组并排序
如果((values.length/4)%1==0){//find quartiles
q1=1/2*(值[(values.length/4)]+值[(values.length/4)+1];
q3=1/2*(值[(values.length*(3/4))]+值[(values.length*(3/4))+1]);
}否则{
q1=数值[数学楼层(数值长度/4+1)];
q3=数值[Math.ceil(values.length*(3/4)+1)];
}
iqr=q3-q1;
maxValue=q3+iqr*倍数;
minValue=q1—iqr*倍数;
返回[最小值,最大值]
}