view js/scatter3D.js @ 1:b5453d07f740 draft default tip

"planemo upload for repository https://github.com/ImmPortDB/immport-galaxy-tools/tree/master/flowtools/flow_overview commit 65373effef15809f3db0e5f9603ef808f4110aa3"
author azomics
date Wed, 29 Jul 2020 17:03:53 -0400
parents
children
line wrap: on
line source

// Copyright (c) 2016 Northrop Grumman.
// All rights reserved.

var updateScatter3D = function(){
  scatterData3D['selectedPopulations'] = [];
  scatterData3DMFI['selectedPopulations'] = [];
  $('.pop3D').each(function() {
    if (this.checked) {
      scatterData3D['selectedPopulations'].push(parseInt(this.value));
      scatterData3DMFI['selectedPopulations'].push(parseInt(this.value));
    }
  });
  processScatterData3D();
  processScatterData3DMFI();
  displayScatterPlot3D();
};

var processScatterData3D = function() {
  var xData = [],
      yData = [],
      zData = [],
      popData = [],
      pop = [],
      col1 = [],
      col2 = [],
      col3 = [],
      min = Number.MAX_VALUE,
      max = Number.MIN_VALUE;

  min = d3.min(scatterData3D['data'], function(array) {
    return d3.min(array);
  });
  max = d3.max(scatterData3D['data'], function(array) {
    return d3.max(array);
  });
  scatterData3D['min'] = 0;
  scatterData3D['max'] = max;

  col1 = scatterData3D['data'].map(function(value,index) {
    return value[scatterData3D['m1']];
  });
  col2 = scatterData3D['data'].map(function(value,index) {
    return value[scatterData3D['m2']];
  });
  col3 = scatterData3D['data'].map(function(value,index) {
    return value[scatterData3D['m3']];
  });
  pop = scatterData3D['data'].map(function(value,index) {
    return value[scatterData3D['popCol']];
  });

  for (var i = 0, j = col1.length; i < j; i++) {
    if (scatterData3D['selectedPopulations'].indexOf(pop[i]) >= 0) {
      xData.push(col1[i]);
      yData.push(col2[i]);
      zData.push(col3[i]);
      popData.push(pop[i]);
    }
  }

  scatterData3D['popColors'] = popData.map(function(value,index) {
    return color_palette[0][value][0];
  });
  scatterData3D['xData'] = xData;
  scatterData3D['yData'] = yData;
  scatterData3D['zData'] = zData;
  scatterData3D['popData'] = popData;
  return scatterData3D;
};

var displayScatterToolbar3D = function() {
  $("#xAxisMarker3D").select2();
  $("#yAxisMarker3D").select2();
  $("#zAxisMarker3D").select2();
  $("#view3D").select2();

  scatterData3D['columnHeadings'].map(function(value,index) {
    $('#xAxisMarker3D')
        .append($("<option></option>")
        .attr("value",index)
        .text(value));

    $('#yAxisMarker3D')
        .append($("<option></option>")
        .attr("value",index)
        .text(value));

    $('#zAxisMarker3D')
        .append($("<option></option>")
        .attr("value",index)
        .text(value));
  });

  $('#xAxisMarker3D').select2("val",0);
  $('#yAxisMarker3D').select2("val",1);
  $('#zAxisMarker3D').select2("val",2);

  $("#xAxisMarker3D").on("change",function(e) {
    var m1 = $("#xAxisMarker3D").select2("val");
    scatterData3D['m1'] = m1;
    scatterData3DMFI['m1'] = m1;
    updateScatter3D();
  });
  $("#yAxisMarker3D").on("change",function(e) {
    var m2 = $("#yAxisMarker3D").select2("val");
    scatterData3D['m2'] = m2;
    scatterData3DMFI['m2'] = m2;
    updateScatter3D();
  });
  $("#zAxisMarker3D").on("change",function(e) {
    var m3 = $("#zAxisMarker3D").select2("val");
    scatterData3D['m3'] = m3;
    scatterData3DMFI['m3'] = m3;
    updateScatter3D();
  });

  $("#view3D").on("change",function(e) {
    var view = $("#view3D").select2("val");
    scatterData3D['view'] = view;
    updateScatter3D();
  });

  $("#updateDisplay3D").on("click",function() {
    $(".pop3D").prop("checked", true);
    $("#selectall3D").prop('checked', true);
    updateScatter3D();
  });
};

var displayScatterPopulation3D = function() {
  $("#populationTable3D tbody").empty();
  scatterData3D['populations'].map(function(value) {
    $('#populationTable3D tbody')
        .append('<tr><td align="center">'
                + '<input type="checkbox" checked class="pop3D" value='
                + value + '/></td><td title="'+ newNames[value]
                + '">'+ newNames[value] + '</td>'
                + '<td><span style="background-color:'
                + color_palette[0][value][0] + '">&nbsp;&nbsp;&nbsp</span></td>'
                + '<td>' + scatterData3D['percent'][value - 1] + '</td></tr>');
  });

  $('#selectall3D').click(function() {
    var checkAll = $("#selectall3D").prop('checked');
    if (checkAll) {
      $(".pop3D").prop("checked", true);
    } else {
      $(".pop3D").prop("checked", false);
    }
    updateScatter3D();
  });
  $('.pop3D').click(function() {
    if ($('.pop3D').length == $(".pop3D:checked").length) {
      $('#selectall3D').prop("checked",true);
    } else {
      $('#selectall3D').prop("checked",false);
    }
    updateScatter3D();
  });

  $('.pop3D').each(function() {
    var selectedpop3D = parseInt(this.value);
    if ($.inArray(selectedpop3D,scatterData3D['selectedPopulations']) > -1) {
      this.checked = true;
    } else {
      this.checked = false;
    }
  });
};

var displayScatterPlot3D = function() {
  var h = $(window).height() - 200,
      w = $("#scatterPlotDiv3D").width(),
      xtitle = scatterData3D['columnHeadings'][scatterData3D['m1']],
      ytitle = scatterData3D['columnHeadings'][scatterData3D['m2']],
      ztitle = scatterData3D['columnHeadings'][scatterData3D['m3']],
      view = scatterData3D['view'],
      traces = [],
      layout = {};

  $("#scatterPlotDiv3D").empty();
  $("#scatterPlotDiv3D").height(h);

  if ( view == 1 || view == 2 ) {
    var trace1 = {
        x: scatterData3D['xData'],
        y: scatterData3D['yData'],
        z: scatterData3D['zData'],
        mode: 'markers',
        opacity: .75,
        hoverinfo: "none",
        marker: {
          size: 2,
          color: scatterData3D['popColors']
        },
        type: 'scatter3d'
    };
    traces.push(trace1);
  };

  if ( view == 1 || view == 3) {
    var trace2 = {
        x: scatterData3DMFI['xData'],
        y: scatterData3DMFI['yData'],
        z: scatterData3DMFI['zData'],
        mode: 'markers',
        opacity: 1.0,
        hoverinfo: "x+y+z",
        marker: {
          symbol: "circle-open",
          size: 8,
          color: scatterData3DMFI['popColors']
        },
        type: 'scatter3d'
    };
    traces.push(trace2);
  }

  layout = {
      title: '',
      showlegend: false,
      scene: {
        aspectratio: {
          x: 1,
          y: 1,
          z: 1
        },
        camera: {
          center: {
            x: 0,
            y: 0,
            z: 0
          },
          eye: {
            x: 1.25,
            y: 1.25,
            z: 1.25
          },
          up: {
            x: 0,
            y: 0,
            z: 1
          }
        },
        xaxis: {
          type: 'linear',
          title: xtitle,
          range: [0, scatterData3D['max']],
          zeroline: false
        },
        yaxis: {
          type: 'linear',
          title: ytitle,
          range: [0, scatterData3D['max']],
          zeroline: false
        },
        zaxis: {
          type: 'linear',
          title: ztitle,
          range: [0, scatterData3D['max']],
          zeroline: false
        }
      }
  };

  Plotly.newPlot('scatterPlotDiv3D', traces, layout);
};