parent
							
								
									272ef37dfe
								
							
						
					
					
						commit
						3c669717e2
					
				
									
										Binary file not shown.
									
								
							
						
									
										Binary file not shown.
									
								
							
						| @ -0,0 +1 @@ | |||||||
|  | {"duration": 12.543240070343018, "input_args": {"XData": "     sepal_l  sepal_w  petal_l  petal_w\n0        6.3      3.3      6.0      2.5\n1        7.1      3.0      5.9      2.1\n2        5.8      2.7      5.1      1.9\n3        6.3      2.9      5.6      1.8\n4        7.6      3.0      6.6      2.1\n..       ...      ...      ...      ...\n145      5.1      3.8      1.6      0.2\n146      5.0      3.5      1.6      0.6\n147      5.1      3.4      1.5      0.2\n148      4.6      3.2      1.4      0.2\n149      4.8      3.0      1.4      0.3\n\n[150 rows x 4 columns]", "yData": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]", "clf": "KNeighborsClassifier(algorithm='ball_tree', leaf_size=30, metric='minkowski',\n                     metric_params=None, n_jobs=None, n_neighbors=82, p=2,\n                     weights='uniform')", "params": "{'n_neighbors': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], 'metric': ['chebyshev', 'manhattan', 'euclidean', 'minkowski'], 'algorithm': ['brute', 'kd_tree', 'ball_tree'], 'weights': ['uniform', 'distance']}", "eachAlgor": "'KNN'", "AlgorithmsIDsEnd": "0"}} | ||||||
									
										Binary file not shown.
									
								
							
						| @ -0,0 +1 @@ | |||||||
|  | {"duration": 19.771310806274414, "input_args": {"XData": "     sepal_l  sepal_w  petal_l  petal_w\n0        6.3      3.3      6.0      2.5\n1        7.1      3.0      5.9      2.1\n2        5.8      2.7      5.1      1.9\n3        6.3      2.9      5.6      1.8\n4        7.6      3.0      6.6      2.1\n..       ...      ...      ...      ...\n145      5.1      3.8      1.6      0.2\n146      5.0      3.5      1.6      0.6\n147      5.1      3.4      1.5      0.2\n148      4.6      3.2      1.4      0.2\n149      4.8      3.0      1.4      0.3\n\n[150 rows x 4 columns]", "yData": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]", "clf": "LogisticRegression(C=64, class_weight=None, dual=False, fit_intercept=True,\n                   intercept_scaling=1, l1_ratio=None, max_iter=300,\n                   multi_class='auto', n_jobs=None, penalty='none',\n                   random_state=42, solver='newton-cg', tol=0.0001, verbose=0,\n                   warm_start=False)", "params": "{'C': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], 'max_iter': [50, 100, 150, 200, 250, 300, 350, 400, 450], 'solver': ['lbfgs', 'newton-cg', 'sag', 'saga'], 'penalty': ['l2', 'none']}", "eachAlgor": "'LR'", "AlgorithmsIDsEnd": "100"}} | ||||||
| @ -0,0 +1,455 @@ | |||||||
|  | 
 | ||||||
|  | <template> | ||||||
|  |   <div> | ||||||
|  |     <div id="containerAllCM"></div> | ||||||
|  |     <div id="containerSelectionCM"></div> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <script> | ||||||
|  | import * as d3Base from 'd3' | ||||||
|  | import { EventBus } from '../main.js' | ||||||
|  | import $ from 'jquery' | ||||||
|  | import * as colorbr from 'colorbrewer' | ||||||
|  | 
 | ||||||
|  | // attach all d3 plugins to the d3 library | ||||||
|  | const d3 = Object.assign(d3Base) | ||||||
|  | const colorbrewer = Object.assign(colorbr) | ||||||
|  | 
 | ||||||
|  | export default { | ||||||
|  |   name: "PredictionsCM", | ||||||
|  |   data () { | ||||||
|  |     return { | ||||||
|  |       GetResultsAll: [], | ||||||
|  |       GetResultsSelectionCM: [], | ||||||
|  |       responsiveWidthHeight: [], | ||||||
|  |       predictSelectionCM: [], | ||||||
|  |       StoreIndices: [], | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     reset () { | ||||||
|  |       var svg = d3.select("#containerAllCM"); | ||||||
|  |       svg.selectAll("*").remove(); | ||||||
|  |       var svg = d3.select("#containerSelectionCM"); | ||||||
|  |       svg.selectAll("*").remove(); | ||||||
|  |     }, | ||||||
|  |     Grid () { | ||||||
|  | 
 | ||||||
|  |       Array.prototype.multiIndexOf = function (el) {  | ||||||
|  |           var idxs = []; | ||||||
|  |           for (var i = this.length - 1; i >= 0; i--) { | ||||||
|  |               if (this[i] === el) { | ||||||
|  |                   idxs.unshift(i); | ||||||
|  |               } | ||||||
|  |           } | ||||||
|  |           return idxs; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |       var svg = d3.select("#containerAllCM"); | ||||||
|  |       svg.selectAll("*").remove(); | ||||||
|  | 
 | ||||||
|  |       var yValues = JSON.parse(this.GetResultsAllCM[6]) | ||||||
|  |       var targetNames = JSON.parse(this.GetResultsAllCM[7]) | ||||||
|  | 
 | ||||||
|  |       var getIndices = [] | ||||||
|  |       for (let i = 0; i < targetNames.length; i++) { | ||||||
|  |         getIndices.push(yValues.multiIndexOf(targetNames[i])) | ||||||
|  |       } | ||||||
|  |       getIndices.reverse() | ||||||
|  | 
 | ||||||
|  |       var predictions = JSON.parse(this.GetResultsAllCM[12]) | ||||||
|  |       var KNNPred = predictions[0] | ||||||
|  |       var LRPred = predictions[1] | ||||||
|  |       var PredAver = predictions[2] | ||||||
|  | 
 | ||||||
|  |       var dataAver = [] | ||||||
|  |       var dataAverGetResults = [] | ||||||
|  |       var dataKNN = [] | ||||||
|  |       var dataKNNResults = [] | ||||||
|  |       var dataLR = [] | ||||||
|  |       var dataLRResults = [] | ||||||
|  | 
 | ||||||
|  |       var max = 0 | ||||||
|  |       for (let i = 0; i < targetNames.length; i++) { | ||||||
|  |         if (getIndices[targetNames[i]].length > max) { | ||||||
|  |           max = getIndices[targetNames[i]].length | ||||||
|  |         }  | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       var sqrtSize = Math.ceil(Math.sqrt(max)) | ||||||
|  |       var size = sqrtSize * sqrtSize | ||||||
|  | 
 | ||||||
|  |       for (let i = 0; i < targetNames.length; i++) { | ||||||
|  |         dataAver = []; | ||||||
|  |         dataKNN = [] | ||||||
|  |         dataLR = [] | ||||||
|  |         getIndices[targetNames[i]].forEach(element => { | ||||||
|  |           dataAver.push({ id: element, value: PredAver[element][targetNames[i]] }) | ||||||
|  |           dataKNN.push({ id: element, value: KNNPred[element][targetNames[i]] }) | ||||||
|  |           dataLR.push({ id: element, value: LRPred[element][targetNames[i]] }) | ||||||
|  |         }); | ||||||
|  |         for (let j = 0; j < size - getIndices[targetNames[i]].length; j++) { | ||||||
|  |           dataAver.push({ id: null, value: 1.0 }) | ||||||
|  |           dataKNN.push({ id: null, value: 1.0 }) | ||||||
|  |           dataLR.push({ id: null, value: 1.0 }) | ||||||
|  |         } | ||||||
|  |         dataAverGetResults.push(dataAver) | ||||||
|  |         dataKNNResults.push(dataKNN) | ||||||
|  |         dataLRResults.push(dataLR) | ||||||
|  |       } | ||||||
|  |     dataAverGetResults.reverse() | ||||||
|  |     dataKNNResults.reverse() | ||||||
|  |     dataLRResults.reverse() | ||||||
|  |      | ||||||
|  |     var classArray = [] | ||||||
|  |     this.StoreIndices = [] | ||||||
|  |     for (let i = 0; i < dataAverGetResults.length; i++) { | ||||||
|  |       dataAverGetResults[i].sort((a, b) => (a.value > b.value) ? 1 : -1) | ||||||
|  |       var len = dataAverGetResults[i].length | ||||||
|  |       var indices = new Array(len) | ||||||
|  |       for (let j = 0; j < len; j++) { | ||||||
|  |         indices[j] = dataAverGetResults[i][j].id; | ||||||
|  |       } | ||||||
|  |       this.StoreIndices.push(indices) | ||||||
|  |        | ||||||
|  |       dataKNNResults[i].sort(function(a, b){ | ||||||
|  |         return indices.indexOf(a.id) - indices.indexOf(b.id) | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|  |       dataLRResults[i].sort(function(a, b){ | ||||||
|  |         return indices.indexOf(a.id) - indices.indexOf(b.id) | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|  |       classArray.push(dataAverGetResults[i].concat(dataKNNResults[i], dataLRResults[i])); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     var classStore = [].concat.apply([], classArray); | ||||||
|  | 
 | ||||||
|  | 		// === Set up canvas === // | ||||||
|  | 
 | ||||||
|  | 		var width = 1200, | ||||||
|  | 				height = 125; | ||||||
|  | 		var colourScale; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 		var canvas = d3.select('#containerAllCM') | ||||||
|  | 			.append('canvas') | ||||||
|  | 			.attr('width', width) | ||||||
|  | 			.attr('height', height); | ||||||
|  | 
 | ||||||
|  | 		var context = canvas.node().getContext('2d'); | ||||||
|  | 
 | ||||||
|  | 		// === Bind data to custom elements === // | ||||||
|  | 
 | ||||||
|  | 		var customBase = document.createElement('custom'); | ||||||
|  | 		var custom = d3.select(customBase); // this is our svg replacement | ||||||
|  | 
 | ||||||
|  |     // settings for a grid with 40 cells in a row and 2x5 cells in a group | ||||||
|  | 		var groupSpacing = 60; | ||||||
|  | 		var cellSpacing = 2; | ||||||
|  |     var cellSize = Math.floor((width - 1 * groupSpacing) / (10 * sqrtSize)) - cellSpacing; | ||||||
|  | 
 | ||||||
|  | 		// === First call === // | ||||||
|  | 		databind(classStore, size, sqrtSize); // ...then update the databind function | ||||||
|  | 		 | ||||||
|  | 		var t = d3.timer(function(elapsed) { | ||||||
|  | 			draw(); | ||||||
|  | 			if (elapsed > 300) t.stop(); | ||||||
|  | 		}); // start a timer that runs the draw function for 500 ms (this needs to be higher than the transition in the databind function) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 		// === Bind and draw functions === // | ||||||
|  | 
 | ||||||
|  | 		function databind(data, size, sqrtSize) { | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  | 			colourScale = d3.scaleSequential(d3.interpolateReds).domain([1, 0]) | ||||||
|  | 
 | ||||||
|  | 			var join = custom.selectAll('custom.rect') | ||||||
|  |         .data(data); | ||||||
|  |          | ||||||
|  | 			var enterSel = join.enter() | ||||||
|  | 				.append('custom') | ||||||
|  | 				.attr('class', 'rect') | ||||||
|  | 	      .attr('x', function(d, i) { | ||||||
|  | 	        var x0 = Math.floor(i / size) % sqrtSize, x1 = Math.floor(i % sqrtSize); | ||||||
|  | 	        return groupSpacing * x0 + (cellSpacing + cellSize) * (x1 + x0 * 10); | ||||||
|  | 	      }) | ||||||
|  | 	      .attr('y', function(d, i) { | ||||||
|  | 	        var y0 = Math.floor(i / data.length), y1 = Math.floor(i % size / sqrtSize); | ||||||
|  | 	        return groupSpacing * y0 + (cellSpacing + cellSize) * (y1 + y0 * 10); | ||||||
|  | 	      }) | ||||||
|  | 				.attr('width', 0) | ||||||
|  | 				.attr('height', 0); | ||||||
|  | 
 | ||||||
|  | 			join | ||||||
|  | 				.merge(enterSel) | ||||||
|  | 				.transition() | ||||||
|  | 				.attr('width', cellSize) | ||||||
|  | 				.attr('height', cellSize) | ||||||
|  |         .attr('fillStyle', function(d) { return colourScale(d.value); }) | ||||||
|  | 
 | ||||||
|  | 			var exitSel = join.exit() | ||||||
|  | 				.transition() | ||||||
|  | 				.attr('width', 0) | ||||||
|  | 				.attr('height', 0) | ||||||
|  | 				.remove(); | ||||||
|  | 
 | ||||||
|  | 		} // databind() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 		// === Draw canvas === // | ||||||
|  | 
 | ||||||
|  | 		function draw() { | ||||||
|  | 
 | ||||||
|  | 			// clear canvas | ||||||
|  | 			 | ||||||
|  | 			context.fillStyle = '#fff'; | ||||||
|  | 			context.fillRect(0, 0, width, height); | ||||||
|  | 
 | ||||||
|  | 			 | ||||||
|  | 			// draw each individual custom element with their properties | ||||||
|  | 			 | ||||||
|  | 			var elements = custom.selectAll('custom.rect') // this is the same as the join variable, but used here to draw | ||||||
|  | 			 | ||||||
|  | 			elements.each(function(d,i) { | ||||||
|  | 
 | ||||||
|  | 				// for each virtual/custom element... | ||||||
|  | 
 | ||||||
|  | 				var node = d3.select(this); | ||||||
|  | 				context.fillStyle = node.attr('fillStyle'); | ||||||
|  | 				context.fillRect(node.attr('x'), node.attr('y'), node.attr('width'), node.attr('height')) | ||||||
|  | 
 | ||||||
|  | 			}); | ||||||
|  | 
 | ||||||
|  | 		} // draw() | ||||||
|  | 
 | ||||||
|  |   }, | ||||||
|  |   GridSelection () { | ||||||
|  | 
 | ||||||
|  |       Array.prototype.multiIndexOf = function (el) {  | ||||||
|  |           var idxs = []; | ||||||
|  |           for (var i = this.length - 1; i >= 0; i--) { | ||||||
|  |               if (this[i] === el) { | ||||||
|  |                   idxs.unshift(i); | ||||||
|  |               } | ||||||
|  |           } | ||||||
|  |           return idxs; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |       var svg = d3.select("#containerSelectionCM"); | ||||||
|  |       svg.selectAll("*").remove(); | ||||||
|  | 
 | ||||||
|  |       var predictionsAll = JSON.parse(this.GetResultsSelectionCM[12]) | ||||||
|  | 
 | ||||||
|  |       if (this.predictSelectionCM.length != 0) { | ||||||
|  |         var predictions = this.predictSelectionCM | ||||||
|  |         var KNNPred = predictions[0] | ||||||
|  |         var LRPred = predictions[1] | ||||||
|  |         var PredAver = predictions[2] | ||||||
|  |       } else { | ||||||
|  |         var KNNPred = predictionsAll[0] | ||||||
|  |         var LRPred = predictionsAll[1] | ||||||
|  |         var PredAver = predictionsAll[2] | ||||||
|  |       } | ||||||
|  |       var KNNPredAll = predictionsAll[0] | ||||||
|  |       var LRPredAll = predictionsAll[1] | ||||||
|  |       var PredAverAll = predictionsAll[2] | ||||||
|  | 
 | ||||||
|  |       var yValues = JSON.parse(this.GetResultsSelectionCM[6]) | ||||||
|  |       var targetNames = JSON.parse(this.GetResultsSelectionCM[7]) | ||||||
|  | 
 | ||||||
|  |       var getIndices = [] | ||||||
|  |       for (let i = 0; i < targetNames.length; i++) { | ||||||
|  |         getIndices.push(yValues.multiIndexOf(targetNames[i])) | ||||||
|  |       } | ||||||
|  |       getIndices.reverse() | ||||||
|  | 
 | ||||||
|  |       var dataAver = [] | ||||||
|  |       var dataAverGetResults = [] | ||||||
|  |       var dataKNN = [] | ||||||
|  |       var dataKNNResults = [] | ||||||
|  |       var dataLR = [] | ||||||
|  |       var dataLRResults = [] | ||||||
|  | 
 | ||||||
|  |       var max = 0 | ||||||
|  |       for (let i = 0; i < targetNames.length; i++) { | ||||||
|  |         if (getIndices[targetNames[i]].length > max) { | ||||||
|  |           max = getIndices[targetNames[i]].length | ||||||
|  |         }  | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       var sqrtSize = Math.ceil(Math.sqrt(max)) | ||||||
|  |       var size = sqrtSize * sqrtSize | ||||||
|  | 
 | ||||||
|  |       for (let i = 0; i < targetNames.length; i++) { | ||||||
|  |         dataAver = []; | ||||||
|  |         dataKNN = [] | ||||||
|  |         dataLR = [] | ||||||
|  |         getIndices[targetNames[i]].forEach(element => { | ||||||
|  |           dataAver.push({ id: element, value: PredAver[element][targetNames[i]] - PredAverAll[element][targetNames[i]] }) | ||||||
|  |           dataKNN.push({ id: element, value: KNNPred[element][targetNames[i]] - KNNPredAll[element][targetNames[i]] }) | ||||||
|  |           dataLR.push({ id: element, value: LRPred[element][targetNames[i]] - LRPredAll[element][targetNames[i]] }) | ||||||
|  |         }); | ||||||
|  |         for (let j = 0; j < size - getIndices[targetNames[i]].length; j++) { | ||||||
|  |           dataAver.push({ id: null, value: 0 }) | ||||||
|  |           dataKNN.push({ id: null, value: 0 }) | ||||||
|  |           dataLR.push({ id: null, value: 0 }) | ||||||
|  |         } | ||||||
|  |         dataAverGetResults.push(dataAver) | ||||||
|  |         dataKNNResults.push(dataKNN) | ||||||
|  |         dataLRResults.push(dataLR) | ||||||
|  |       } | ||||||
|  |     dataAverGetResults.reverse() | ||||||
|  |     dataKNNResults.reverse() | ||||||
|  |     dataLRResults.reverse() | ||||||
|  |      | ||||||
|  |     var classArray = [] | ||||||
|  | 
 | ||||||
|  |     for (let i = 0; i < dataAverGetResults.length; i++) { | ||||||
|  |        | ||||||
|  |       var indices = this.StoreIndices[i] | ||||||
|  |       dataAverGetResults[i].sort(function(a, b){ | ||||||
|  |         return indices.indexOf(a.id) - indices.indexOf(b.id) | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|  |       dataKNNResults[i].sort(function(a, b){ | ||||||
|  |         return indices.indexOf(a.id) - indices.indexOf(b.id) | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|  |       dataLRResults[i].sort(function(a, b){ | ||||||
|  |         return indices.indexOf(a.id) - indices.indexOf(b.id) | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|  |       classArray.push(dataAverGetResults[i].concat(dataKNNResults[i], dataLRResults[i])); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     var classStore = [].concat.apply([], classArray); | ||||||
|  | 		// === Set up canvas === // | ||||||
|  | 
 | ||||||
|  | 		var width = 1200, | ||||||
|  | 				height = 125; | ||||||
|  | 		var colourScale; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 		var canvas = d3.select('#containerSelectionCM') | ||||||
|  | 			.append('canvas') | ||||||
|  | 			.attr('width', width) | ||||||
|  | 			.attr('height', height); | ||||||
|  | 
 | ||||||
|  | 		var context = canvas.node().getContext('2d'); | ||||||
|  | 
 | ||||||
|  | 		// === Bind data to custom elements === // | ||||||
|  | 
 | ||||||
|  | 		var customBase = document.createElement('custom'); | ||||||
|  | 		var custom = d3.select(customBase); // this is our svg replacement | ||||||
|  | 
 | ||||||
|  |     // settings for a grid with 40 cells in a row and 2x5 cells in a group | ||||||
|  | 		var groupSpacing = 60; | ||||||
|  | 		var cellSpacing = 2; | ||||||
|  |     var cellSize = Math.floor((width - 1 * groupSpacing) / (10 * sqrtSize)) - cellSpacing; | ||||||
|  | 
 | ||||||
|  | 		// === First call === // | ||||||
|  | 		databind(classStore, size, sqrtSize); // ...then update the databind function | ||||||
|  | 		 | ||||||
|  | 		var t = d3.timer(function(elapsed) { | ||||||
|  | 			draw(); | ||||||
|  | 			if (elapsed > 300) t.stop(); | ||||||
|  | 		}); // start a timer that runs the draw function for 500 ms (this needs to be higher than the transition in the databind function) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 		// === Bind and draw functions === // | ||||||
|  | 
 | ||||||
|  | 		function databind(data, size, sqrtSize) { | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  | 			colourScale = d3.scaleSequential(d3.interpolatePRGn).domain([-1, 1]) | ||||||
|  | 
 | ||||||
|  | 			var join = custom.selectAll('custom.rect') | ||||||
|  |         .data(data); | ||||||
|  |          | ||||||
|  | 			var enterSel = join.enter() | ||||||
|  | 				.append('custom') | ||||||
|  | 				.attr('class', 'rect') | ||||||
|  | 	      .attr('x', function(d, i) { | ||||||
|  | 	        var x0 = Math.floor(i / size) % sqrtSize, x1 = Math.floor(i % sqrtSize); | ||||||
|  | 	        return groupSpacing * x0 + (cellSpacing + cellSize) * (x1 + x0 * 10); | ||||||
|  | 	      }) | ||||||
|  | 	      .attr('y', function(d, i) { | ||||||
|  | 	        var y0 = Math.floor(i / data.length), y1 = Math.floor(i % size / sqrtSize); | ||||||
|  | 	        return groupSpacing * y0 + (cellSpacing + cellSize) * (y1 + y0 * 10); | ||||||
|  | 	      }) | ||||||
|  | 				.attr('width', 0) | ||||||
|  | 				.attr('height', 0); | ||||||
|  | 
 | ||||||
|  | 			join | ||||||
|  | 				.merge(enterSel) | ||||||
|  | 				.transition() | ||||||
|  | 				.attr('width', cellSize) | ||||||
|  | 				.attr('height', cellSize) | ||||||
|  |         .attr('fillStyle', function(d) { return colourScale(d.value); }) | ||||||
|  | 
 | ||||||
|  | 			var exitSel = join.exit() | ||||||
|  | 				.transition() | ||||||
|  | 				.attr('width', 0) | ||||||
|  | 				.attr('height', 0) | ||||||
|  | 				.remove(); | ||||||
|  | 
 | ||||||
|  | 		} // databind() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 		// === Draw canvas === // | ||||||
|  | 
 | ||||||
|  | 		function draw() { | ||||||
|  | 
 | ||||||
|  | 			// clear canvas | ||||||
|  | 			 | ||||||
|  | 			context.fillStyle = '#fff'; | ||||||
|  | 			context.fillRect(0, 0, width, height); | ||||||
|  | 
 | ||||||
|  | 			 | ||||||
|  | 			// draw each individual custom element with their properties | ||||||
|  | 			 | ||||||
|  | 			var elements = custom.selectAll('custom.rect') // this is the same as the join variable, but used here to draw | ||||||
|  | 			 | ||||||
|  | 			elements.each(function(d,i) { | ||||||
|  | 
 | ||||||
|  | 				// for each virtual/custom element... | ||||||
|  | 
 | ||||||
|  | 				var node = d3.select(this); | ||||||
|  | 				context.fillStyle = node.attr('fillStyle'); | ||||||
|  | 				context.fillRect(node.attr('x'), node.attr('y'), node.attr('width'), node.attr('height')) | ||||||
|  | 
 | ||||||
|  | 			}); | ||||||
|  | 
 | ||||||
|  | 		} // draw() | ||||||
|  | 
 | ||||||
|  |   }, | ||||||
|  |   }, | ||||||
|  |   mounted () { | ||||||
|  |       EventBus.$on('emittedEventCallingGridCrossoverMutation', data => { this.GetResultsAllCM = data; }) | ||||||
|  |       EventBus.$on('emittedEventCallingGridCrossoverMutation', this.Grid) | ||||||
|  | 
 | ||||||
|  |       EventBus.$on('emittedEventCallingGridSelectionGridCrossoverMutation', data => { this.GetResultsSelectionCM = data; }) | ||||||
|  |       EventBus.$on('emittedEventCallingGridSelectionGridCrossoverMutation', this.GridSelection) | ||||||
|  | 
 | ||||||
|  |       EventBus.$on('SendSelectedPointsToServerEventCM', data => { this.predictSelectionCM = data; }) | ||||||
|  |       EventBus.$on('SendSelectedPointsToServerEventCM', this.GridSelection) | ||||||
|  | 
 | ||||||
|  |       EventBus.$on('Responsive', data => { | ||||||
|  |       this.responsiveWidthHeight = data}) | ||||||
|  |       EventBus.$on('ResponsiveandChange', data => { | ||||||
|  |       this.responsiveWidthHeight = data}) | ||||||
|  | 
 | ||||||
|  |       // reset the views | ||||||
|  |       EventBus.$on('resetViews', this.reset) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <style type="text/css"> | ||||||
|  | 		canvas { | ||||||
|  | 			border:  1px dotted #ccc; | ||||||
|  | 		} | ||||||
|  | </style> | ||||||
					Loading…
					
					
				
		Reference in new issue