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