Commit b1261049 authored by Joshua Gould's avatar Joshua Gould

array color fields

parent 89983421
morpheus.VectorColorModel = function() { morpheus.VectorColorModel = function () {
this.vectorNameToColorMap = new morpheus.Map(); this.vectorNameToColorMap = new morpheus.Map();
this.vectorNameToColorScheme = new morpheus.Map(); this.vectorNameToColorScheme = new morpheus.Map();
this.colors = morpheus.VectorColorModel.TWENTY_COLORS; this.colors = morpheus.VectorColorModel.TWENTY_COLORS;
...@@ -9,63 +9,63 @@ morpheus.VectorColorModel.FEMALE = '#ff99ff'; ...@@ -9,63 +9,63 @@ morpheus.VectorColorModel.FEMALE = '#ff99ff';
morpheus.VectorColorModel.MALE = '#66ccff'; morpheus.VectorColorModel.MALE = '#66ccff';
// tableau 20-same as d3 category20 // tableau 20-same as d3 category20
morpheus.VectorColorModel.TWENTY_COLORS = [ '#1f77b4', '#aec7e8', '#ff7f0e', morpheus.VectorColorModel.TWENTY_COLORS = ['#1f77b4', '#aec7e8', '#ff7f0e',
'#ffbb78', '#2ca02c', '#98df8a', '#d62728', '#ff9896', '#9467bd', '#ffbb78', '#2ca02c', '#98df8a', '#d62728', '#ff9896', '#9467bd',
'#c5b0d5', '#8c564b', '#c49c94', '#e377c2', '#f7b6d2', '#7f7f7f', '#c5b0d5', '#8c564b', '#c49c94', '#e377c2', '#f7b6d2', '#7f7f7f',
'#c7c7c7', '#bcbd22', '#dbdb8d', '#17becf', '#9edae5' ]; '#c7c7c7', '#bcbd22', '#dbdb8d', '#17becf', '#9edae5'];
morpheus.VectorColorModel.CATEGORY_20A = morpheus.VectorColorModel.TWENTY_COLORS; morpheus.VectorColorModel.CATEGORY_20A = morpheus.VectorColorModel.TWENTY_COLORS;
morpheus.VectorColorModel.CATEGORY_20B = [ '#393b79', '#5254a3', '#6b6ecf', morpheus.VectorColorModel.CATEGORY_20B = ['#393b79', '#5254a3', '#6b6ecf',
'#9c9ede', '#637939', '#8ca252', '#b5cf6b', '#cedb9c', '#8c6d31', '#9c9ede', '#637939', '#8ca252', '#b5cf6b', '#cedb9c', '#8c6d31',
'#bd9e39', '#e7ba52', '#e7cb94', '#843c39', '#ad494a', '#d6616b', '#bd9e39', '#e7ba52', '#e7cb94', '#843c39', '#ad494a', '#d6616b',
'#e7969c', '#7b4173', '#a55194', '#ce6dbd', '#de9ed6' ]; '#e7969c', '#7b4173', '#a55194', '#ce6dbd', '#de9ed6'];
morpheus.VectorColorModel.CATEGORY_20C = [ '#3182bd', '#6baed6', '#9ecae1', morpheus.VectorColorModel.CATEGORY_20C = ['#3182bd', '#6baed6', '#9ecae1',
'#c6dbef', '#e6550d', '#fd8d3c', '#fdae6b', '#fdd0a2', '#31a354', '#c6dbef', '#e6550d', '#fd8d3c', '#fdae6b', '#fdd0a2', '#31a354',
'#74c476', '#a1d99b', '#c7e9c0', '#756bb1', '#9e9ac8', '#bcbddc', '#74c476', '#a1d99b', '#c7e9c0', '#756bb1', '#9e9ac8', '#bcbddc',
'#dadaeb', '#636363', '#969696', '#bdbdbd', '#d9d9d9' ]; '#dadaeb', '#636363', '#969696', '#bdbdbd', '#d9d9d9'];
morpheus.VectorColorModel.CATEGORY_ALL = [].concat( morpheus.VectorColorModel.CATEGORY_ALL = [].concat(
morpheus.VectorColorModel.CATEGORY_20A, morpheus.VectorColorModel.CATEGORY_20A,
morpheus.VectorColorModel.CATEGORY_20B, morpheus.VectorColorModel.CATEGORY_20B,
morpheus.VectorColorModel.CATEGORY_20C); morpheus.VectorColorModel.CATEGORY_20C);
morpheus.VectorColorModel.TABLEAU10 = [ '#1f77b4', '#ff7f0e', '#2ca02c', morpheus.VectorColorModel.TABLEAU10 = ['#1f77b4', '#ff7f0e', '#2ca02c',
'#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22',
'#17becf' ]; '#17becf'];
morpheus.VectorColorModel.STANDARD_COLORS = { morpheus.VectorColorModel.STANDARD_COLORS = {
'na' : '#c0c0c0', 'na': '#c0c0c0',
'nan' : '#c0c0c0', 'nan': '#c0c0c0',
'' : '#ffffff', '': '#ffffff',
'wt' : '#ffffff', 'wt': '#ffffff',
'n' : '#ffffff', 'n': '#ffffff',
'0' : '#ffffff', '0': '#ffffff',
'y' : morpheus.VectorColorModel.YES_COLOR, 'y': morpheus.VectorColorModel.YES_COLOR,
'1' : morpheus.VectorColorModel.YES_COLOR, '1': morpheus.VectorColorModel.YES_COLOR,
'male' : morpheus.VectorColorModel.MALE, 'male': morpheus.VectorColorModel.MALE,
'm' : morpheus.VectorColorModel.MALE, 'm': morpheus.VectorColorModel.MALE,
'female' : morpheus.VectorColorModel.FEMALE, 'female': morpheus.VectorColorModel.FEMALE,
'f' : morpheus.VectorColorModel.FEMALE, 'f': morpheus.VectorColorModel.FEMALE,
'kd' : '#C675A8', 'kd': '#C675A8',
'oe' : '#56b4e9', 'oe': '#56b4e9',
'cp' : '#FF9933', 'cp': '#FF9933',
'trt_sh.cgs' : '#C675A8', 'trt_sh.cgs': '#C675A8',
'trt_oe' : '#56b4e9', 'trt_oe': '#56b4e9',
'trt_cp' : '#FF9933', 'trt_cp': '#FF9933',
'a375' : '#1490C1', 'a375': '#1490C1',
'a549' : '#AAC8E9', 'a549': '#AAC8E9',
'hcc515' : '#1C9C2A', 'hcc515': '#1C9C2A',
'hepg2' : '#94DC89', 'hepg2': '#94DC89',
'ht29' : '#946DBE', 'ht29': '#946DBE',
'mcf7' : '#C5B2D5', 'mcf7': '#C5B2D5',
'pc3' : '#38C697', 'pc3': '#38C697',
'asc' : '#FF8000', 'asc': '#FF8000',
'cd34' : '#FFBB75', 'cd34': '#FFBB75',
'ha1e' : '#FB4124', 'ha1e': '#FB4124',
'neu' : '#FF9A94', 'neu': '#FF9A94',
'npc' : '#E57AC6', 'npc': '#E57AC6',
'cancer' : '#1490C1', 'cancer': '#1490C1',
'immortalized normal' : '#FF8000' 'immortalized normal': '#FF8000'
}; };
morpheus.VectorColorModel.getStandardColor = function(value) { morpheus.VectorColorModel.getStandardColor = function (value) {
if (value == null) { if (value == null) {
return '#ffffff'; return '#ffffff';
} }
...@@ -73,7 +73,7 @@ morpheus.VectorColorModel.getStandardColor = function(value) { ...@@ -73,7 +73,7 @@ morpheus.VectorColorModel.getStandardColor = function(value) {
return morpheus.VectorColorModel.STANDARD_COLORS[stringValue]; return morpheus.VectorColorModel.STANDARD_COLORS[stringValue];
}; };
morpheus.VectorColorModel.getColorMapForNumber = function(length) { morpheus.VectorColorModel.getColorMapForNumber = function (length) {
var colors; var colors;
if (length < 3) { if (length < 3) {
colors = colorbrewer.Set1[3]; colors = colorbrewer.Set1[3];
...@@ -83,30 +83,30 @@ morpheus.VectorColorModel.getColorMapForNumber = function(length) { ...@@ -83,30 +83,30 @@ morpheus.VectorColorModel.getColorMapForNumber = function(length) {
return colors ? colors : morpheus.VectorColorModel.TWENTY_COLORS; return colors ? colors : morpheus.VectorColorModel.TWENTY_COLORS;
}; };
morpheus.VectorColorModel.prototype = { morpheus.VectorColorModel.prototype = {
clear : function(vector) { clear: function (vector) {
this.vectorNameToColorMap.remove(vector.getName()); this.vectorNameToColorMap.remove(vector.getName());
this.vectorNameToColorScheme.remove(vector.getName()); this.vectorNameToColorScheme.remove(vector.getName());
}, },
copy : function() { copy: function () {
var c = new morpheus.VectorColorModel(); var c = new morpheus.VectorColorModel();
c.colors = this.colors.slice(0); c.colors = this.colors.slice(0);
this.vectorNameToColorMap.forEach(function(colorMap, name) { this.vectorNameToColorMap.forEach(function (colorMap, name) {
var newColorMap = new morpheus.Map(); var newColorMap = new morpheus.Map();
newColorMap.setAll(colorMap); // copy existing values newColorMap.setAll(colorMap); // copy existing values
c.vectorNameToColorMap.set(name, newColorMap); c.vectorNameToColorMap.set(name, newColorMap);
}); });
this.vectorNameToColorScheme.forEach(function(colorScheme, name) { this.vectorNameToColorScheme.forEach(function (colorScheme, name) {
c.vectorNameToColorScheme.set(name, colorScheme c.vectorNameToColorScheme.set(name, colorScheme
.copy(new morpheus.Project(new morpheus.Dataset('', .copy(new morpheus.Project(new morpheus.Dataset('',
1, 1)))); 1, 1))));
}); });
return c; return c;
}, },
clearAll : function() { clearAll: function () {
this.vectorNameToColorMap = new morpheus.Map(); this.vectorNameToColorMap = new morpheus.Map();
this.vectorNameToColorScheme = new morpheus.Map(); this.vectorNameToColorScheme = new morpheus.Map();
}, },
containsDiscreteColor : function(vector, value) { containsDiscreteColor: function (vector, value) {
var metadataValueToColorMap = this.vectorNameToColorMap.get(vector var metadataValueToColorMap = this.vectorNameToColorMap.get(vector
.getName()); .getName());
if (metadataValueToColorMap === undefined) { if (metadataValueToColorMap === undefined) {
...@@ -115,41 +115,42 @@ morpheus.VectorColorModel.prototype = { ...@@ -115,41 +115,42 @@ morpheus.VectorColorModel.prototype = {
var c = metadataValueToColorMap.get(value); var c = metadataValueToColorMap.get(value);
return c != null; return c != null;
}, },
setDiscreteColorMap : function(colors) { setDiscreteColorMap: function (colors) {
this.colors = colors; this.colors = colors;
}, },
getContinuousColorScheme : function(vector) { getContinuousColorScheme: function (vector) {
return this.vectorNameToColorScheme.get(vector.getName()); return this.vectorNameToColorScheme.get(vector.getName());
}, },
getDiscreteColorScheme : function(vector) { getDiscreteColorScheme: function (vector) {
return this.vectorNameToColorMap.get(vector.getName()); return this.vectorNameToColorMap.get(vector.getName());
}, },
createContinuousColorMap : function(vector) { createContinuousColorMap: function (vector) {
var min = morpheus.Min(vector); var minMax = morpheus.VectorUtil.getMinMax(vector);
var max = morpheus.Max(vector); var min = minMax.min;
var max = minMax.max;
var cs = new morpheus.HeatMapColorScheme(new morpheus.Project( var cs = new morpheus.HeatMapColorScheme(new morpheus.Project(
new morpheus.Dataset('', 1, 1)), { new morpheus.Dataset('', 1, 1)), {
type : 'fixed', type: 'fixed',
map : [ { map: [{
value : min, value: min,
color : colorbrewer.Greens[3][0] color: colorbrewer.Greens[3][0]
}, { }, {
value : max, value: max,
color : colorbrewer.Greens[3][2] color: colorbrewer.Greens[3][2]
} ] }]
}); });
this.vectorNameToColorScheme.set(vector.getName(), cs); this.vectorNameToColorScheme.set(vector.getName(), cs);
return cs; return cs;
}, },
getContinuousMappedValue : function(vector, value) { getContinuousMappedValue: function (vector, value) {
var cs = this.vectorNameToColorScheme.get(vector.getName()); var cs = this.vectorNameToColorScheme.get(vector.getName());
if (cs === undefined) { if (cs === undefined) {
cs = this.createContinuousColorMap(vector); cs = this.createContinuousColorMap(vector);
} }
return cs.getColor(0, 0, value); return cs.getColor(0, 0, value);
}, },
_getColorForValue : function(value) { _getColorForValue: function (value) {
var color = morpheus.VectorColorModel.getStandardColor(value); var color = morpheus.VectorColorModel.getStandardColor(value);
if (color == null) { // try to reuse existing color map if (color == null) { // try to reuse existing color map
var existingMetadataValueToColorMap = this.vectorNameToColorMap var existingMetadataValueToColorMap = this.vectorNameToColorMap
...@@ -163,7 +164,7 @@ morpheus.VectorColorModel.prototype = { ...@@ -163,7 +164,7 @@ morpheus.VectorColorModel.prototype = {
} }
return color; return color;
}, },
getMappedValue : function(vector, value) { getMappedValue: function (vector, value) {
var metadataValueToColorMap = this.vectorNameToColorMap.get(vector var metadataValueToColorMap = this.vectorNameToColorMap.get(vector
.getName()); .getName());
if (metadataValueToColorMap === undefined) { if (metadataValueToColorMap === undefined) {
...@@ -199,7 +200,7 @@ morpheus.VectorColorModel.prototype = { ...@@ -199,7 +200,7 @@ morpheus.VectorColorModel.prototype = {
} }
} else { } else {
var _this = this; var _this = this;
_.each(values, function(val) { _.each(values, function (val) {
_this.getMappedValue(vector, val); _this.getMappedValue(vector, val);
}); });
} }
...@@ -215,7 +216,7 @@ morpheus.VectorColorModel.prototype = { ...@@ -215,7 +216,7 @@ morpheus.VectorColorModel.prototype = {
} }
return color; return color;
}, },
setMappedValue : function(vector, value, color) { setMappedValue: function (vector, value, color) {
var metadataValueToColorMap = this.vectorNameToColorMap.get(vector var metadataValueToColorMap = this.vectorNameToColorMap.get(vector
.getName()); .getName());
if (metadataValueToColorMap === undefined) { if (metadataValueToColorMap === undefined) {
......
...@@ -354,7 +354,7 @@ morpheus.VectorTrack.prototype = { ...@@ -354,7 +354,7 @@ morpheus.VectorTrack.prototype = {
.isRenderAs(morpheus.VectorTrack.RENDER.BAR))) { .isRenderAs(morpheus.VectorTrack.RENDER.BAR))) {
if (this.getFullVector().getProperties().has( if (this.getFullVector().getProperties().has(
morpheus.VectorKeys.FIELDS) morpheus.VectorKeys.FIELDS)
|| morpheus.VectorUtil.getDataType(this.getFullVector()) === 'number') { || morpheus.VectorUtil.getDataType(this.getFullVector()) === 'number' || morpheus.VectorUtil.getDataType(this.getFullVector()) === '[number]') {
this.settings.discrete = false; this.settings.discrete = false;
this.settings.highlightMatchingValues = false; this.settings.highlightMatchingValues = false;
} }
...@@ -824,7 +824,7 @@ morpheus.VectorTrack.prototype = { ...@@ -824,7 +824,7 @@ morpheus.VectorTrack.prototype = {
var SHOW_SELECTION_ONLY = 'Show Selection Only'; var SHOW_SELECTION_ONLY = 'Show Selection Only';
var CLEAR_SELECTION = 'Clear Selection'; var CLEAR_SELECTION = 'Clear Selection';
var HIGHLIGHT_MATCHING_VALUES = 'Highlight Matching Values'; var HIGHLIGHT_MATCHING_VALUES = 'Highlight Matching Values';
var FIELDS = 'Fields...'; var FIELDS = 'Choose Fields...';
var DELETE = 'Delete...'; var DELETE = 'Delete...';
var TOOLTIP = 'Show In Tooltip'; var TOOLTIP = 'Show In Tooltip';
var HIDE = 'Hide'; var HIDE = 'Hide';
...@@ -837,15 +837,16 @@ morpheus.VectorTrack.prototype = { ...@@ -837,15 +837,16 @@ morpheus.VectorTrack.prototype = {
var SORT_SEL_DESC = 'Sort Heat Map Descending'; var SORT_SEL_DESC = 'Sort Heat Map Descending';
var SORT_SEL_TOP_N = 'Sort Heat Map Descending/Ascending'; var SORT_SEL_TOP_N = 'Sort Heat Map Descending/Ascending';
var DISPLAY_BAR = 'Show Bar Chart'; var DISPLAY_BAR = 'Show Bar Chart';
var DISPLAY_STACKED_BAR = 'Stacked'; var DISPLAY_STACKED_BAR = 'Show Stacked Bar Chart';
var DISPLAY_BOX_PLOT = 'Show Box Plot';
var DISPLAY_COLOR = 'Show Color'; var DISPLAY_COLOR = 'Show Color';
var COLOR_BAR_SIZE = 'Color Bar Size...';
var DISPLAY_TEXT = 'Show Text'; var DISPLAY_TEXT = 'Show Text';
var DISPLAY_SHAPE = 'Show Shape'; var DISPLAY_SHAPE = 'Show Shape';
var DISPLAY_ARC = 'Show Arc'; var DISPLAY_ARC = 'Show Arc';
var DISPLAY_TEXT_AND_COLOR = 'Show Colored Text'; var DISPLAY_TEXT_AND_COLOR = 'Show Colored Text';
var DISPLAY_STRUCTURE = 'Show Chemical Structure'; var DISPLAY_STRUCTURE = 'Show Chemical Structure';
var DISPLAY_CONTINUOUS = 'Continuous'; var DISPLAY_CONTINUOUS = 'Continuous';
var TOGGLE = 'Expand/Collapse';
var positions = this.positions; var positions = this.positions;
var heatmap = this.heatmap; var heatmap = this.heatmap;
...@@ -955,25 +956,36 @@ morpheus.VectorTrack.prototype = { ...@@ -955,25 +956,36 @@ morpheus.VectorTrack.prototype = {
name: DISPLAY_BAR, name: DISPLAY_BAR,
checked: this.isRenderAs(morpheus.VectorTrack.RENDER.BAR) checked: this.isRenderAs(morpheus.VectorTrack.RENDER.BAR)
}); });
} }
if (isArray) { if (isArray) {
sectionToItems.Display.push({ sectionToItems.Display.push({
name: DISPLAY_STACKED_BAR, name: DISPLAY_STACKED_BAR,
checked: this.settings.stackedBar checked: this.settings.stackedBar
}); });
sectionToItems.Display.push({
name: DISPLAY_BOX_PLOT,
checked: this.isRenderAs(morpheus.VectorTrack.RENDER.BOX_PLOT)
});
sectionToItems.Display.push({ sectionToItems.Display.push({
name: FIELDS, name: FIELDS,
}); });
} }
if (!isArray) { sectionToItems.Display.push({
name: DISPLAY_TEXT,
checked: this.isRenderAs(morpheus.VectorTrack.RENDER.TEXT)
});
sectionToItems.Display.push({ sectionToItems.Display.push({
name: DISPLAY_COLOR, name: DISPLAY_COLOR,
checked: this.isRenderAs(morpheus.VectorTrack.RENDER.COLOR) checked: this.isRenderAs(morpheus.VectorTrack.RENDER.COLOR)
}); });
if (this.isRenderAs(morpheus.VectorTrack.RENDER.COLOR)) {
sectionToItems.Display.push({ sectionToItems.Display.push({
name: DISPLAY_TEXT, name: COLOR_BAR_SIZE
checked: this.isRenderAs(morpheus.VectorTrack.RENDER.TEXT)
}); });
}
if (!isArray) {
sectionToItems.Display.push({ sectionToItems.Display.push({
name: DISPLAY_SHAPE, name: DISPLAY_SHAPE,
checked: this.isRenderAs(morpheus.VectorTrack.RENDER.SHAPE) checked: this.isRenderAs(morpheus.VectorTrack.RENDER.SHAPE)
...@@ -984,11 +996,6 @@ morpheus.VectorTrack.prototype = { ...@@ -984,11 +996,6 @@ morpheus.VectorTrack.prototype = {
// }); // });
} }
// sectionToItems.Display.push({
// name : DISPLAY_TEXT_AND_COLOR,
// checked : this
// .isRenderAs(morpheus.VectorTrack.RENDER.TEXT_AND_COLOR)
// });
if (!isArray && !isNumber && !this.isColumns if (!isArray && !isNumber && !this.isColumns
&& name.toLowerCase().indexOf('smile') !== -1) { && name.toLowerCase().indexOf('smile') !== -1) {
...@@ -1204,7 +1211,7 @@ morpheus.VectorTrack.prototype = { ...@@ -1204,7 +1211,7 @@ morpheus.VectorTrack.prototype = {
.set( .set(
morpheus.VectorKeys.VISIBLE_FIELDS, morpheus.VectorKeys.VISIBLE_FIELDS,
visibleFieldIndices); visibleFieldIndices);
// remove cached box field
var summaryFunction = fullVector var summaryFunction = fullVector
.getProperties() .getProperties()
.get( .get(
...@@ -1220,7 +1227,7 @@ morpheus.VectorTrack.prototype = { ...@@ -1220,7 +1227,7 @@ morpheus.VectorTrack.prototype = {
.getFullDataset() .getFullDataset()
.getRowMetadata() .getRowMetadata()
.add(_this.name); .add(_this.name);
// remove cached box field
for (var i = 0; i < updatedVector for (var i = 0; i < updatedVector
.size(); i++) { .size(); i++) {
var array = fullVector var array = fullVector
...@@ -1258,15 +1265,31 @@ morpheus.VectorTrack.prototype = { ...@@ -1258,15 +1265,31 @@ morpheus.VectorTrack.prototype = {
close: 'Close', close: 'Close',
html: formBuilder.$form html: formBuilder.$form
}); });
} else if (item === TOGGLE) { } else if (item === COLOR_BAR_SIZE) {
var dataset = project var formBuilder = new morpheus.FormBuilder();
.getSortedFilteredDataset(); formBuilder.append({
project.getRowSelectionModel().getViewIndices() name: 'size',
.forEach(function (index) { type: 'text',
dataset.setState(index, undefined); // FIXME value: _this.settings.colorBarSize,
required: true,
col: 'col-xs-2'
});
formBuilder.find('size').on(
'change',
function () {
var val = parseFloat($(this)
.val());
if (val > 0) {
_this.settings.colorBarSize = val;
_this.setInvalid(true);
_this.repaint();
}
});
morpheus.FormBuilder.showInModal({
title: 'Color Bar Size',
close: 'Close',
html: formBuilder.$form
}); });
project.setFullDataset(
project.getFullDataset(), true);
} else if (item === ANNOTATE_SELECTION) { } else if (item === ANNOTATE_SELECTION) {
var formBuilder = new morpheus.FormBuilder(); var formBuilder = new morpheus.FormBuilder();
formBuilder.append({ formBuilder.append({
...@@ -1741,6 +1764,8 @@ morpheus.VectorTrack.prototype = { ...@@ -1741,6 +1764,8 @@ morpheus.VectorTrack.prototype = {
item = morpheus.VectorTrack.RENDER.SHAPE; item = morpheus.VectorTrack.RENDER.SHAPE;
} else if (item === DISPLAY_ARC) { } else if (item === DISPLAY_ARC) {
item = morpheus.VectorTrack.RENDER.ARC; item = morpheus.VectorTrack.RENDER.ARC;
} else if (item === DISPLAY_BOX_PLOT) {
item = morpheus.VectorTrack.RENDER.BOX_PLOT;
} else { } else {
console.log('Unknown item ' + item); console.log('Unknown item ' + item);
} }
...@@ -1764,8 +1789,9 @@ morpheus.VectorTrack.prototype = { ...@@ -1764,8 +1789,9 @@ morpheus.VectorTrack.prototype = {
var settings = this.settings; var settings = this.settings;
var canvasSize = isColumns ? this.getUnscaledHeight() : this var canvasSize = isColumns ? this.getUnscaledHeight() : this
.getUnscaledWidth(); .getUnscaledWidth();
if (settings.colorBarSize > canvasSize) { var colorBarSize = settings.colorBarSize;
settings.colorBarSize = canvasSize >= 5 ? (canvasSize - 1) if (colorBarSize > canvasSize) {
colorBarSize = canvasSize >= 5 ? (canvasSize - 1)
: canvasSize; : canvasSize;
} }
var getColor; var getColor;
...@@ -1774,6 +1800,45 @@ morpheus.VectorTrack.prototype = { ...@@ -1774,6 +1800,45 @@ morpheus.VectorTrack.prototype = {
} else { } else {
getColor = _.bind(colorModel.getContinuousMappedValue, colorModel); getColor = _.bind(colorModel.getContinuousMappedValue, colorModel);
} }
if (vector.getProperties().get(
morpheus.VectorKeys.FIELDS) != null) {
var visibleFieldIndices = vector.getProperties().get(
morpheus.VectorKeys.VISIBLE_FIELDS);
if (visibleFieldIndices == null) {
visibleFieldIndices = morpheus.Util.seq(vector.getProperties().get(
morpheus.VectorKeys.FIELDS).length);
}
colorBarSize /= visibleFieldIndices.length;
var nvisibleFieldIndices = visibleFieldIndices.length;
for (var i = start; i < end; i++) {
var array = vector.getValue(i);
var position = positions.getPosition(i);
var size = positions.getItemSize(i);
var _offset = offset;
if (array != null) {
for (var j = 0; j < nvisibleFieldIndices; j++) {
var value = array[visibleFieldIndices[j]];
var color = getColor(vector, value);
context.fillStyle = color;
if (isColumns) {
context.beginPath();
context.rect(position, _offset - colorBarSize, size,
colorBarSize);
context.fill();
} else {
context.beginPath();
context.rect(_offset, position, colorBarSize, size);
context.fill();
}
_offset += colorBarSize;
}
}
}
} else {
for (var i = start; i < end; i++) { for (var i = start; i < end; i++) {
var value = vector.getValue(i); var value = vector.getValue(i);
var position = positions.getPosition(i); var position = positions.getPosition(i);
...@@ -1782,15 +1847,16 @@ morpheus.VectorTrack.prototype = { ...@@ -1782,15 +1847,16 @@ morpheus.VectorTrack.prototype = {
context.fillStyle = color; context.fillStyle = color;
if (isColumns) { if (isColumns) {
context.beginPath(); context.beginPath();
context.rect(position, offset - settings.colorBarSize, size, context.rect(position, offset - colorBarSize, size,
settings.colorBarSize); settings.colorBarSize);
context.fill(); context.fill();
} else { } else {
context.beginPath(); context.beginPath();
context.rect(offset, position, settings.colorBarSize, size); context.rect(offset, position, colorBarSize, size);
context.fill(); context.fill();
} }
} }
}
}, },
renderShape: function (context, vector, start, end, clip, offset) { renderShape: function (context, vector, start, end, clip, offset) {
var isColumns = this.isColumns; var isColumns = this.isColumns;
...@@ -1800,8 +1866,9 @@ morpheus.VectorTrack.prototype = { ...@@ -1800,8 +1866,9 @@ morpheus.VectorTrack.prototype = {
var settings = this.settings; var settings = this.settings;
var canvasSize = isColumns ? this.getUnscaledHeight() : this var canvasSize = isColumns ? this.getUnscaledHeight() : this
.getUnscaledWidth(); .getUnscaledWidth();
if (settings.colorBarSize > canvasSize) { var colorBarSize = settings.colorBarSize;
settings.colorBarSize = canvasSize >= 5 ? (canvasSize - 1) if (colorBarSize > canvasSize) {
colorBarSize = canvasSize >= 5 ? (canvasSize - 1)
: canvasSize; : canvasSize;
} }
context.fillStyle = 'black'; context.fillStyle = 'black';
...@@ -1814,7 +1881,7 @@ morpheus.VectorTrack.prototype = { ...@@ -1814,7 +1881,7 @@ morpheus.VectorTrack.prototype = {
var value = vector.getValue(i); var value = vector.getValue(i);
var position = positions.getPosition(i); var position = positions.getPosition(i);
var itemSize = positions.getItemSize(i); var itemSize = positions.getItemSize(i);
var minSize = Math.min(settings.colorBarSize, itemSize); var minSize = Math.min(colorBarSize, itemSize);
var size2 = minSize / 2; var size2 = minSize / 2;
var shape = shapeModel.getMappedValue(vector, value); var shape = shapeModel.getMappedValue(vector, value);
// x and y are at center // x and y are at center
...@@ -2025,6 +2092,7 @@ morpheus.VectorTrack.prototype = { ...@@ -2025,6 +2092,7 @@ morpheus.VectorTrack.prototype = {
.getVector(this.settings.colorByField) : null; .getVector(this.settings.colorByField) : null;
var colorModel = isColumns ? this.project.getColumnColorModel() var colorModel = isColumns ? this.project.getColumnColorModel()
: this.project.getRowColorModel(); : this.project.getRowColorModel();
// TODO cache box values
for (var i = start; i < end; i++) { for (var i = start; i < end; i++) {
var array = vector.getValue(i); var array = vector.getValue(i);
if (array != null) { if (array != null) {
......
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