Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.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 dc.js:如何使用不同的输入阈值更改饼图中的数据分布?_Javascript_Pie Chart_Dc.js - Fatal编程技术网

Javascript dc.js:如何使用不同的输入阈值更改饼图中的数据分布?

Javascript dc.js:如何使用不同的输入阈值更改饼图中的数据分布?,javascript,pie-chart,dc.js,Javascript,Pie Chart,Dc.js,我想使用输入字段中的分数来更改饼图中的数据分布 例如,得分阈值为0.5的分布“71%高/28%低”将更改为得分阈值为0.7的“42%高/57%低” 我做了这个示例,但结果并不令人满意:在输入字段中键入0.5并单击“检查!”时,饼图分布没有改变 这决定了分配: //## pie chart var coreCount = ndx.dimension(function (d) { var maxNumber=80; if (typeof scoreThreshold!='numbe

我想使用输入字段中的分数来更改饼图中的数据分布

例如,得分阈值为0.5的分布“71%高/28%低”将更改为得分阈值为0.7的“42%高/57%低”

我做了这个示例,但结果并不令人满意:在输入字段中键入0.5并单击“检查!”时,饼图分布没有改变

这决定了分配:

//##  pie chart
var coreCount = ndx.dimension(function (d) {
    var maxNumber=80;
    if (typeof scoreThreshold!='number') {scoreThreshold=0.5}
    //console.log(scoreThreshold)
    if (d.scores >maxNumber*scoreThreshold)
        {return 'High';}
    else {return 'Low';}
    });
我想更新coreCount函数以使用输入分数阈值重新分配分布。但它不起作用:

$('#scoreThresholdBt').click(function () { 
            scoreThreshold=document.getElementById('scoreThreshold').value
            scoreThreshold=parseFloat(scoreThreshold);
            console.log(scoreThreshold,typeof scoreThreshold);
            function redo_coreCount () {
                var coreCount = ndx.dimension(function (d) {
                    var maxNumber=80;
                    console.log(scoreThreshold);
                    if (d.count >maxNumber*scoreThreshold)
                        {return 'High';}
                    else {return 'Low';}
                    });
            }; redo_coreCount();
            coreCount.group();/**/
            dc.renderAll();
            dc.redrawAll();
        });
如何实现此功能?
非常感谢您的帮助。

您实际上是在将新维度放入一个临时变量中,该变量会立即被丢弃<单击函数中的code>coreCount与全局级别具有相同名称的变量无关

同样,
corecont.group()
也不是一个动作;它正在构造一个组对象,如果不使用它,它也会丢失

您需要将新维度和组分配给图表,因为它不跟踪全局或本地
corecont
的值

因此,让我们更改函数,根据从输入中读取的分数阈值返回一个新维度:

function coreCount_from_threshold() {
  var scoreThreshold=document.getElementById('scoreThreshold').value;
  scoreThreshold=parseFloat(scoreThreshold);
  console.log(scoreThreshold,typeof scoreThreshold);
  if (isNaN(scoreThreshold)) {scoreThreshold=0.5}
  return ndx.dimension(function (d) {
    var maxNumber=80;
    if (d.scores >maxNumber*scoreThreshold)
        {return 'High';}
    else {return 'Low';}
    });
}
请注意,我们需要在这里使用
isNaN
,因为
typeof NaN==='number'

我们可以在初始化时使用这两种方法:

var coreCount = coreCount_from_threshold();
点击:

$('#scoreThresholdBt').click(function () { 
    coreCount.dispose();
    coreCount = coreCount_from_threshold();
    coreCountGroup = coreCount.group();
    coreYesNoPieChart
      .dimension(coreCount)
      .group(coreCountGroup);
    dc.redrawAll();
});
请注意,我们将分配给相同的全局变量
corecont
corecontgroup
(因为这里不使用
var
)。我们首先处理旧维度,否则它将继续过滤并占用资源。然后我们将新的维度和组分配给图表(否则它将不知道它们)

我们只需要在这里重新绘制(而不是渲染),因为dc.js图表可以在获得新数据时进行更新


这是一个作业。

我在你的小提琴上试过,发现了一些其他问题,比如必须处理旧的维度。星期一我再试试。非常感谢你,戈登,我试过你的建议,但还是有问题。我期待着在周一阅读您的反馈。好的,我已经更新了我的答案,并提供了一些必要的细节。你会考虑把这个例子贡献给D.JS吗?如果有一个替换维度和组的示例就好了。当然可以,Gordon。我还有一个使用dc.js的大项目,我可以通过邮件将链接发送给你吗?@Woodran,谢谢你的公关。我很快就会合并它。如果有人想找一个完整的例子,请点击这里: