Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 抑制d3plus长方体和胡须打印图形中的极端异常值_Javascript_D3.js_Boxplot_Outliers_D3plus - Fatal编程技术网

Javascript 抑制d3plus长方体和胡须打印图形中的极端异常值

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,但

我试图在d3plus上创建带有胡须的方框图,以比较数据库中“this”提供程序和“all”提供程序之间的度量。我已经在预处理阶段从非常大的数组中计算了5-statistics摘要,并将其传递到
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*倍数;
返回[最小值,最大值]
}