Javascript 使用chart.js可视化气泡排序

Javascript 使用chart.js可视化气泡排序,javascript,visualization,Javascript,Visualization,我试着想象泡沫排序。首先我创建了简单的条形图,然后创建了函数sortbuble。 但我不知道如何在每一步上改变视觉列,使其在算法运行时生效。也许对于动态可视化,我应该使用例如d3.js。谢谢您的建议 function sortBubble() { for (var i = 0; i chart.data.datasets[0].data[j]) { var temp = chart.data.datasets[0].data[j

我试着想象泡沫排序。首先我创建了简单的条形图,然后创建了函数sortbuble。 但我不知道如何在每一步上改变视觉列,使其在算法运行时生效。也许对于动态可视化,我应该使用例如d3.js。谢谢您的建议

 

    function sortBubble() {
          for (var i = 0; i  chart.data.datasets[0].data[j]) {
                var temp = chart.data.datasets[0].data[j];
                chart.data.datasets[0].data[j] = chart.data.datasets[0].data[j-1];
                chart.data.datasets[0].data[j-1] = temp;
            }
          }
      }     
    
      chart.update();
                }
    
    var ctx = document.getElementById('myChart').getContext('2d');
    var chart = new Chart(ctx, {
        type: 'bar',
        data: {
            labels: ['Number_1', 'Number_2', 'Number_3', 'Number_4', 'Number_5', 'Number_6'],
            datasets: [{
                label: '# of Votes',
                data: [12, 19, 3, 5, 2, 3],
                backgroundColor: [
                    'rgba(255, 99, 132, 0.2)',
                    'rgba(54, 162, 235, 0.2)',
                    'rgba(255, 206, 86, 0.2)',
                    'rgba(75, 192, 192, 0.2)',
                    'rgba(153, 102, 255, 0.2)',
                    'rgba(255, 159, 64, 0.2)'
                ],
                borderColor: [
                    'rgba(255, 99, 132, 1)',
                    'rgba(54, 162, 235, 1)',
                    'rgba(255, 206, 86, 1)',
                    'rgba(75, 192, 192, 1)',
                    'rgba(153, 102, 255, 1)',
                    'rgba(255, 159, 64, 1)'
                ],
                borderWidth: 1
            }]
        },
        options: {
            scales: {
                yAxes: [{
                    ticks: {
                        beginAtZero: true
                    }
                }]
            }
        },
        animation: {
          onProgress: function(animation) {
                duration:4000
               
          }
                }
    });

您可以使用该方法并在每次交换数组元素时以一定的延迟更新
标签
数据集.data
数据集.backgroundColor
。然后还需要调用以确保Chart.js在
画布上重新绘制更新的图表

请看一下下面的可运行代码,看看它是如何工作的

函数bubbleSort(){
让标签=chart.data.labels;
让data=chart.data.datasets[0].data;
让colors=chart.data.dataset[0].backgroundColor;
让我们交换;
设超时=0;
做{
交换=假;
for(设i=0;idata[i+1]){
交换(标签,i);
交换(数据,i);
交换(颜色,i);
超时+=50;
this.updateChartDelayed(labels.slice(0)、data.slice(0)、colors.slice(0)、timeout);
交换=真;
}
}
}while(交换);
}
功能交换(arr,i){
设tmp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=tmp;
}
函数updateChartDelayed(标签、数据、颜色、超时){
设置超时(()=>{
chart.data.labels=标签;
chart.data.dataset[0]。data=data;
chart.data.datasets[0]。backgroundColor=颜色;
chart.update();
},超时);
}
常量标签=['A'、'B'、'C'、'D'、'E'、'F'、'G'、'H'、'I'、'J'、'K'、'L'、'M'、'N'、'O'、'P'、'Q'、'R'、'S'、'T'、'U'、'V'、'W'、'X'、'Y'、'Z'];
常量图表=新图表(“myChart”{
类型:'bar',
数据:{
标签:标签,
数据集:[{
数据:labels.map(()=>Math.random()),
背景背景背景颜色:以下背景颜色:[ţFF6633ţFF666633',“ţFF33FF',“35FFFF99',”FFFFFF99',“35FFFFFF99',,“ţFF66666633ţFF66666633',,“35保保保保洁FF3333333399',,“35FF33FF33FF33FF33FF99',,,,,“35FFFFFFFF99'FFFF99'FFFFFF99',,,,,,“35FFFF99'FFFFFFFFFFFF99'',,,,,,,,,,,,,,,,,,,,,,“35FFFFFFFFFFFFFF99'FF99'FFFF99'FFFF99'FF99'FF99'FFFF99',,,,,,,,,,,,,,,,,,,,,,#991AFF’、#E666FF’、#4DB3FF’、#1AB399’、#4D8066’、#809980’、#E6FF80’、#1AF33’、#99933’、#FF4D’,
边框宽度:1
}]
},
选项:{
图例:{
显示:假
},
比例:{
雅克斯:[{
滴答声:{
贝吉纳泽罗:是的
}
}]
}
}
});
setTimeout(()=>bubbleSort(),1000)

您可以使用该方法并在每次交换数组元素时以一定的延迟更新
标签
数据集.数据
数据集.背景色
。然后还需要调用以确保Chart.js在
画布上重新绘制更新的图表

请看一下下面的可运行代码,看看它是如何工作的

函数bubbleSort(){
让标签=chart.data.labels;
让data=chart.data.datasets[0].data;
让colors=chart.data.dataset[0].backgroundColor;
让我们交换;
设超时=0;
做{
交换=假;
for(设i=0;idata[i+1]){
交换(标签,i);
交换(数据,i);
交换(颜色,i);
超时+=50;
this.updateChartDelayed(labels.slice(0)、data.slice(0)、colors.slice(0)、timeout);
交换=真;
}
}
}while(交换);
}
功能交换(arr,i){
设tmp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=tmp;
}
函数updateChartDelayed(标签、数据、颜色、超时){
设置超时(()=>{
chart.data.labels=标签;
chart.data.dataset[0]。data=data;
chart.data.datasets[0]。backgroundColor=颜色;
chart.update();
},超时);
}
常量标签=['A'、'B'、'C'、'D'、'E'、'F'、'G'、'H'、'I'、'J'、'K'、'L'、'M'、'N'、'O'、'P'、'Q'、'R'、'S'、'T'、'U'、'V'、'W'、'X'、'Y'、'Z'];
常量图表=新图表(“myChart”{
类型:'bar',
数据:{
标签:标签,
数据集:[{
数据:labels.map(()=>Math.random()),
背景背景背景颜色:以下背景颜色:[ţFF6633ţFF666633',“ţFF33FF',“35FFFF99',”FFFFFF99',“35FFFFFF99',,“ţFF66666633ţFF66666633',,“35保保保保洁FF3333333399',,“35FF33FF33FF33FF33FF99',,,,,“35FFFFFFFF99'FFFF99'FFFFFF99',,,,,,“35FFFF99'FFFFFFFFFFFF99'',,,,,,,,,,,,,,,,,,,,,,“35FFFFFFFFFFFFFF99'FF99'FFFF99'FFFF99'FF99'FF99'FFFF99',,,,,,,,,,,,,,,,,,,,,,#991AFF’、#E666FF’、#4DB3FF’、#1AB399’、#4D8066’、#809980’、#E6FF80’、#1AF33’、#99933’、#FF4D’,
边框宽度:1
}]
},
选项:{
图例:{
显示:假
},
比例:{
雅克斯:[{
滴答声:{
贝吉纳泽罗:是的
}
}]
}
}
});
setTimeout(()=>bubbleSort(),1000)


您可以添加设置超时,以按指定的间隔更改视图。在setTimeout中,您可以更新数据集并使用chart.update。您可以添加setTimeout以按指定的间隔更改视图。在setTimeout中,您可以更新数据集并使用chart.update。