Commit 21325521 authored by Romain Loth's avatar Romain Loth

new metric for growth_rate has new function for colors

parent e5fa238c
...@@ -18,7 +18,7 @@ function ChangeGraphAppearanceByAtt( manualflag ) { ...@@ -18,7 +18,7 @@ function ChangeGraphAppearanceByAtt( manualflag ) {
if(!TW.colorByAtt) return; if(!TW.colorByAtt) return;
// Seeing all the possible attributes! // Seeing all the possible attributes!
var AttsDict = {} var AttsDict = {}
var Atts_2_Exclude = {} var Atts_2_Exclude = {}
var v_nodes = getVisibleNodes(); var v_nodes = getVisibleNodes();
for (var i in v_nodes) { for (var i in v_nodes) {
...@@ -33,11 +33,11 @@ function ChangeGraphAppearanceByAtt( manualflag ) { ...@@ -33,11 +33,11 @@ function ChangeGraphAppearanceByAtt( manualflag ) {
if ( ( typeof(someatt)=="string" && isNaN(Number(someatt)) ) || typeof(someatt)=="object" ) { if ( ( typeof(someatt)=="string" && isNaN(Number(someatt)) ) || typeof(someatt)=="object" ) {
if (!Atts_2_Exclude[a]) Atts_2_Exclude[a]=0; if (!Atts_2_Exclude[a]) Atts_2_Exclude[a]=0;
Atts_2_Exclude[a]++; Atts_2_Exclude[a]++;
} }
} }
var possible_atts = []; var possible_atts = [];
if (!isUndef(TW.Nodes[id].attributes)) if (!isUndef(TW.Nodes[id].attributes))
possible_atts = Object.keys(TW.Nodes[id].attributes) possible_atts = Object.keys(TW.Nodes[id].attributes)
if(!isUndef(v_nodes[i].degree)) if(!isUndef(v_nodes[i].degree))
...@@ -45,15 +45,15 @@ function ChangeGraphAppearanceByAtt( manualflag ) { ...@@ -45,15 +45,15 @@ function ChangeGraphAppearanceByAtt( manualflag ) {
possible_atts.push("clust_louvain") possible_atts.push("clust_louvain")
for(var a in possible_atts){ for(var a in possible_atts){
if ( !AttsDict[ possible_atts[a] ] ) if ( !AttsDict[ possible_atts[a] ] )
AttsDict[ possible_atts[a] ] = 0 AttsDict[ possible_atts[a] ] = 0
AttsDict[ possible_atts[a] ] ++; AttsDict[ possible_atts[a] ] ++;
} }
} }
} }
for(var i in Atts_2_Exclude) for(var i in Atts_2_Exclude)
delete AttsDict[i]; delete AttsDict[i];
var AttsDict_sorted = ArraySortByValue(AttsDict, function(a,b){ var AttsDict_sorted = ArraySortByValue(AttsDict, function(a,b){
...@@ -64,9 +64,9 @@ function ChangeGraphAppearanceByAtt( manualflag ) { ...@@ -64,9 +64,9 @@ function ChangeGraphAppearanceByAtt( manualflag ) {
// console.log( AttsDict_sorted ) // console.log( AttsDict_sorted )
var div_info = ""; var div_info = "";
if( $( ".colorgraph_div" ).length>0 ) if( $( ".colorgraph_div" ).length>0 )
div_info += '<ul id="colorGraph" class="nav navbar-nav navbar-right">' div_info += '<ul id="colorGraph" class="nav navbar-nav navbar-right">'
div_info += ' <li class="dropdown">' div_info += ' <li class="dropdown">'
...@@ -80,6 +80,8 @@ function ChangeGraphAppearanceByAtt( manualflag ) { ...@@ -80,6 +80,8 @@ function ChangeGraphAppearanceByAtt( manualflag ) {
var att_c = AttsDict_sorted[i].value; var att_c = AttsDict_sorted[i].value;
var the_method = "clustersBy" var the_method = "clustersBy"
if(att_s.indexOf("clust")>-1) the_method = "colorsBy" if(att_s.indexOf("clust")>-1) the_method = "colorsBy"
if(att_s == "growth_rate") the_method = "colorsRelByBins"
div_info += '<li><a href="#" onclick=\''+the_method+'("'+att_s+'")\'>By '+att_s+'('+att_c+')'+'</a></li>' div_info += '<li><a href="#" onclick=\''+the_method+'("'+att_s+'")\'>By '+att_s+'('+att_c+')'+'</a></li>'
pr('<li><a href="#" onclick=\''+the_method+'("'+att_s+'")\'>By '+att_s+'('+att_c+')'+'</a></li>') pr('<li><a href="#" onclick=\''+the_method+'("'+att_s+'")\'>By '+att_s+'('+att_c+')'+'</a></li>')
} }
...@@ -116,7 +118,7 @@ function RunLouvain() { ...@@ -116,7 +118,7 @@ function RunLouvain() {
} }
edge_realdata.push(info) edge_realdata.push(info)
} }
var community = jLouvain().nodes(node_realdata).edges(edge_realdata); var community = jLouvain().nodes(node_realdata).edges(edge_realdata);
var results = community(); var results = community();
for(var i in results) for(var i in results)
TW.Nodes[i].attributes["clust_louvain"]=results[i] TW.Nodes[i].attributes["clust_louvain"]=results[i]
...@@ -130,7 +132,7 @@ function SomeEffect( ClusterCode ) { ...@@ -130,7 +132,7 @@ function SomeEffect( ClusterCode ) {
var Type=raw[0], Cluster=raw[1], clstID=Number(raw[2]); var Type=raw[0], Cluster=raw[1], clstID=Number(raw[2]);
var present = TW.partialGraph.states.slice(-1)[0]; // Last var present = TW.partialGraph.states.slice(-1)[0]; // Last
var type_t0 = present.type; var type_t0 = present.type;
var str_type_t0 = type_t0.map(Number).join("|") var str_type_t0 = type_t0.map(Number).join("|")
console.log( "\t"+str_type_t0) console.log( "\t"+str_type_t0)
...@@ -195,7 +197,7 @@ function SomeEffect( ClusterCode ) { ...@@ -195,7 +197,7 @@ function SomeEffect( ClusterCode ) {
}); });
for(var n in nodes_2_label) { for(var n in nodes_2_label) {
if(n==4) if(n==4)
break break
var ID = nodes_2_label[n].key var ID = nodes_2_label[n].key
TW.partialGraph._core.graph.nodesIndex[ID].forceLabel = true; TW.partialGraph._core.graph.nodesIndex[ID].forceLabel = true;
...@@ -257,7 +259,7 @@ function set_ClustersLegend ( daclass ) { ...@@ -257,7 +259,7 @@ function set_ClustersLegend ( daclass ) {
} }
LegendDiv += ' </ul>' LegendDiv += ' </ul>'
LegendDiv += ' </div>' LegendDiv += ' </div>'
$("#legend_for_clusters").addClass( "my-legend" ); $("#legend_for_clusters").addClass( "my-legend" );
$("#legend_for_clusters").html( LegendDiv ) $("#legend_for_clusters").html( LegendDiv )
...@@ -283,11 +285,11 @@ function getTopPapers(type){ ...@@ -283,11 +285,11 @@ function getTopPapers(type){
data: "type="+type+"&bi="+bi+"&query="+jsonparams+"&gexf="+thisgexf+"&index="+TW.field[getUrlParam.file], data: "type="+type+"&bi="+bi+"&query="+jsonparams+"&gexf="+thisgexf+"&index="+TW.field[getUrlParam.file],
//contentType: "application/json", //contentType: "application/json",
//dataType: 'json', //dataType: 'json',
success : function(data){ success : function(data){
pr(TW.APINAME+'info_div.php?'+"type="+type+"&bi="+bi+"&query="+jsonparams+"&gexf="+thisgexf+"&index="+TW.field[getUrlParam.file]); pr(TW.APINAME+'info_div.php?'+"type="+type+"&bi="+bi+"&query="+jsonparams+"&gexf="+thisgexf+"&index="+TW.field[getUrlParam.file]);
$("#topPapers").html(data); $("#topPapers").html(data);
}, },
error: function(){ error: function(){
pr('Page Not found: getTopPapers'); pr('Page Not found: getTopPapers');
} }
}); });
...@@ -303,22 +305,22 @@ function selectionUni(currentNode){ ...@@ -303,22 +305,22 @@ function selectionUni(currentNode){
opossites = []; opossites = [];
selections = []; selections = [];
TW.partialGraph.refresh(); TW.partialGraph.refresh();
} }
if((typeof selections[currentNode.id])=="undefined"){ if((typeof selections[currentNode.id])=="undefined"){
selections[currentNode.id] = 1; selections[currentNode.id] = 1;
currentNode.active=true; currentNode.active=true;
} }
else { else {
delete selections[currentNode.id]; delete selections[currentNode.id];
currentNode.active=false; currentNode.active=false;
} }
//highlightOpossites(nodes1[currentNode.id].neighbours); //highlightOpossites(nodes1[currentNode.id].neighbours);
// currentNode.color = currentNode.attr['true_color']; // currentNode.color = currentNode.attr['true_color'];
// currentNode.attr['grey'] = 0; // currentNode.attr['grey'] = 0;
//
// //
//
TW.partialGraph.zoomTo(TW.partialGraph._core.width / 2, TW.partialGraph._core.height / 2, 0.8); TW.partialGraph.zoomTo(TW.partialGraph._core.width / 2, TW.partialGraph._core.height / 2, 0.8);
TW.partialGraph.refresh(); TW.partialGraph.refresh();
...@@ -327,60 +329,60 @@ function selectionUni(currentNode){ ...@@ -327,60 +329,60 @@ function selectionUni(currentNode){
//JUST ADEME //JUST ADEME
function camaraButton(){ function camaraButton(){
$("#PhotoGraph").click(function (){ $("#PhotoGraph").click(function (){
//canvas=TW.partialGraph._core.domElements.nodes; //canvas=TW.partialGraph._core.domElements.nodes;
var nodesCtx = TW.partialGraph._core.domElements.nodes; var nodesCtx = TW.partialGraph._core.domElements.nodes;
/* /*
var edgesCtx = document.getElementById("sigma_edges_1").getContext('2d'); var edgesCtx = document.getElementById("sigma_edges_1").getContext('2d');
var edgesImg = edgesCtx.getImageData(0, 0, document.getElementById("sigma_edges_1").width, document.getElementById("sigma_edges_1").height) var edgesImg = edgesCtx.getImageData(0, 0, document.getElementById("sigma_edges_1").width, document.getElementById("sigma_edges_1").height)
nodesCtx.putImageData(edgesImg,0,0); nodesCtx.putImageData(edgesImg,0,0);
//ctx.drawImage(TW.partialGraph._core.domElements.edges,0,0) //ctx.drawImage(TW.partialGraph._core.domElements.edges,0,0)
//var oCanvas = ctx; //var oCanvas = ctx;
*/ */
//div = document.getElementById("sigma_nodes_1").getContext('2d'); //div = document.getElementById("sigma_nodes_1").getContext('2d');
//ctx = div.getContext("2d"); //ctx = div.getContext("2d");
//oCanvas.drawImage(TW.partialGraph._core.domElements.edges,0,0); //oCanvas.drawImage(TW.partialGraph._core.domElements.edges,0,0);
Canvas2Image.saveAsPNG(nodesCtx); Canvas2Image.saveAsPNG(nodesCtx);
/* /*
Canvas2Image.saveAsJPEG(oCanvas); // will prompt the user to save the image as JPEG. Canvas2Image.saveAsJPEG(oCanvas); // will prompt the user to save the image as JPEG.
// Only supported by Firefox. // Only supported by Firefox.
Canvas2Image.saveAsBMP(oCanvas); // will prompt the user to save the image as BMP. Canvas2Image.saveAsBMP(oCanvas); // will prompt the user to save the image as BMP.
// returns an <img> element containing the converted PNG image // returns an <img> element containing the converted PNG image
var oImgPNG = Canvas2Image.saveAsPNG(oCanvas, true); var oImgPNG = Canvas2Image.saveAsPNG(oCanvas, true);
// returns an <img> element containing the converted JPEG image (Only supported by Firefox) // returns an <img> element containing the converted JPEG image (Only supported by Firefox)
var oImgJPEG = Canvas2Image.saveAsJPEG(oCanvas, true); var oImgJPEG = Canvas2Image.saveAsJPEG(oCanvas, true);
// returns an <img> element containing the converted BMP image // returns an <img> element containing the converted BMP image
var oImgBMP = Canvas2Image.saveAsBMP(oCanvas, true); var oImgBMP = Canvas2Image.saveAsBMP(oCanvas, true);
// all the functions also takes width and height arguments. // all the functions also takes width and height arguments.
// These can be used to scale the resulting image: // These can be used to scale the resulting image:
// saves a PNG image scaled to 100x100 // saves a PNG image scaled to 100x100
Canvas2Image.saveAsPNG(oCanvas, false, 100, 100); Canvas2Image.saveAsPNG(oCanvas, false, 100, 100);
*/ */
}); });
} }
function getTips(){ function getTips(){
param=''; param='';
text = text =
"<br>"+ "<br>"+
"Basic Interactions:"+ "Basic Interactions:"+
"<ul>"+ "<ul>"+
...@@ -401,7 +403,7 @@ function getTips(){ ...@@ -401,7 +403,7 @@ function getTips(){
"<li>The 'change level' button allows to change between global view and node centered view,</li>"+ "<li>The 'change level' button allows to change between global view and node centered view,</li>"+
"<li>To explore the neighborhood of a selection click on the 'change level' button.</li>"+ "<li>To explore the neighborhood of a selection click on the 'change level' button.</li>"+
"</ul>"; "</ul>";
$("#tab-container").hide(); $("#tab-container").hide();
$("#tab-container-top").hide(); $("#tab-container-top").hide();
return text; return text;
...@@ -409,7 +411,7 @@ function getTips(){ ...@@ -409,7 +411,7 @@ function getTips(){
function draw1Circle(ctx , x , y , color) { function draw1Circle(ctx , x , y , color) {
ctx.strokeStyle = '#000'; ctx.strokeStyle = '#000';
ctx.lineWidth = 1; ctx.lineWidth = 1;
ctx.fillStyle = color; ctx.fillStyle = color;
...@@ -432,13 +434,13 @@ function trackMouse() { ...@@ -432,13 +434,13 @@ function trackMouse() {
x = TW.partialGraph._core.mousecaptor.mouseX; x = TW.partialGraph._core.mousecaptor.mouseX;
y = TW.partialGraph._core.mousecaptor.mouseY; y = TW.partialGraph._core.mousecaptor.mouseY;
ctx.strokeStyle = '#000'; ctx.strokeStyle = '#000';
ctx.lineWidth = 1; ctx.lineWidth = 1;
ctx.fillStyle = "#71C3FF"; ctx.fillStyle = "#71C3FF";
ctx.globalAlpha = 0.5; ctx.globalAlpha = 0.5;
ctx.beginPath(); ctx.beginPath();
if(TW.partialGraph._core.mousecaptor.ratio>showLabelsIfZoom){ if(TW.partialGraph._core.mousecaptor.ratio>showLabelsIfZoom){
for(var i in TW.partialGraph._core.graph.nodesIndex){ for(var i in TW.partialGraph._core.graph.nodesIndex){
n=TW.partialGraph._core.graph.nodesIndex[i]; n=TW.partialGraph._core.graph.nodesIndex[i];
...@@ -473,7 +475,7 @@ function trackMouse() { ...@@ -473,7 +475,7 @@ function trackMouse() {
if(TW.partialGraph.forceatlas2 && TW.partialGraph.forceatlas2.count<=1) { if(TW.partialGraph.forceatlas2 && TW.partialGraph.forceatlas2.count<=1) {
TW.partialGraph.draw(2,2,2); TW.partialGraph.draw(2,2,2);
} }
} }
ctx.arc(x, y, cursor_size, 0, Math.PI * 2, true); ctx.arc(x, y, cursor_size, 0, Math.PI * 2, true);
//ctx.arc(TW.partialGraph._core.width/2, TW.partialGraph._core.height/2, 4, 0, 2 * Math.PI, true);/*todel*/ //ctx.arc(TW.partialGraph._core.width/2, TW.partialGraph._core.height/2, 4, 0, 2 * Math.PI, true);/*todel*/
ctx.closePath(); ctx.closePath();
...@@ -512,7 +514,7 @@ function ProcessDivsFlags() { ...@@ -512,7 +514,7 @@ function ProcessDivsFlags() {
//both obsolete //both obsolete
function closeDialog () { function closeDialog () {
$('#windowTitleDialog').modal('hide'); $('#windowTitleDialog').modal('hide');
} }
function okClicked () { function okClicked () {
//document.title = document.getElementById ("xlInput").value; //document.title = document.getElementById ("xlInput").value;
......
...@@ -341,6 +341,80 @@ function clustersBy(daclass) { ...@@ -341,6 +341,80 @@ function clustersBy(daclass) {
TW.partialGraph.draw(); TW.partialGraph.draw();
} }
// rewrite of clustersBy with binning and for attributes that can have negative float values
function colorsRelByBins(daclass) {
cancelSelection(false);
// 13 colors
var binColors = [
"#005197", //blue
// "#3c76fb",
"#5c8af2",
"#64c5f2",
"#64e0f2",
"#bae64f",//epsilon
"#f9f008",
"#f9da08",
"#fab207",
"#fa9607",
"#fa6e07",
"#fa4607", // red
"#991B1E"
];
// £TODO calculate thresholds like eg d3.histogram
// var thresholdsMin = [-100,-75,-50,-25,-10,10,25,50,75,100,125,150, 1000000]
var thresholdsMin = [-75,-50,-25,-10,10,25,50,75,100,125,150, 1000000]
// get the nodes
var v_nodes = getVisibleNodes();
for(var i in v_nodes) {
var theId = v_nodes[i].id
var theNode = TW.Nodes[ theId ]
var attval = ( isUndef(theNode.attributes) || isUndef(theNode.attributes[daclass]) )? v_nodes[i][daclass]: theNode.attributes[daclass];
var theVal = parseFloat(attval)
if( !isNaN(theVal) ) { //is float
// iterate over bins
for(var j=0 ; j < thresholdsMin.length-1; j++) {
var binMin = thresholdsMin[j]
var binMax = thresholdsMin[(j+1)]
if((theVal >= binMin) && (theVal < binMax)) {
TW.partialGraph._core.graph.nodesIndex[theId].color = binColors[j]
break
}
}
}
}
TW.partialGraph.refresh();
TW.partialGraph.draw();
// [ Edge-colour by source-target nodes-colours combination ]
var v_edges = getVisibleEdges();
for(var e in v_edges) {
var e_id = v_edges[e].id;
var a = v_edges[e].source.color;
var b = v_edges[e].target.color;
a = hex2rga(a);
b = hex2rga(b);
var r = (a[0] + b[0]) >> 1;
var g = (a[1] + b[1]) >> 1;
var b = (a[2] + b[2]) >> 1;
TW.partialGraph._core.graph.edgesIndex[e_id].color = "rgba("+[r,g,b].join(",")+",0.5)";
}
// [ / Edge-colour by source-target nodes-colours combination ]
set_ClustersLegend ( null )
TW.partialGraph.refresh();
TW.partialGraph.draw();
}
function colorsBy(daclass) { function colorsBy(daclass) {
pr("") pr("")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment