Skip to content
This repository was archived by the owner on Dec 21, 2018. It is now read-only.

Commit 0f01ed7

Browse files
committed
Add scaleDiscretize method, tests, and documentation.
1 parent 3f9cb69 commit 0f01ed7

File tree

4 files changed

+64
-6
lines changed

4 files changed

+64
-6
lines changed

README.md

+19
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,25 @@ Valid schemes are either arrays of color values (e.g., applicable to
8181
[interpolator](https://github.com/d3/d3-scale#sequential_interpolator)
8282
functions (e.g., applicable to `'sequential'` scales.)
8383

84+
<a name="schemeDiscretize" href="#schemeDiscretize">#</a>
85+
vega.<b>schemeDiscretize</b>(<i>name</i>[, <i>schemes</i>, <i>interpolator</i>])
86+
[<>](https://github.com/vega/vega-scale/blob/master/src/schemes.js "Source")
87+
88+
Registry function for adding and accessing discretized color schemes,
89+
consisting of an array of color schemes for specific value counts.
90+
The *name* argument is a String indicating the name of the color scheme.
91+
If the *schemes* argument is not specified, this method returns the matching
92+
array of color schemes value in the registry, or `null` if not found.
93+
If the *schemes* argument is provided, it must be an array of valid color
94+
arrays, with non-null entries at indices for each supported value count.
95+
For example, the array at index 3 should be a 3-color array. The optional
96+
*interpolator* argument provides a continuous color
97+
[interpolator](https://github.com/d3/d3-scale#sequential_interpolator)
98+
to use when a specific item count is not provided or undefined. If the
99+
*interpolator* argument is not provided, an interpolator will be
100+
automatically created using basis spline interpolation in the RGB color
101+
space for the last (largest) color array in *schemes*.
102+
84103
<a name="interpolate" href="#interpolate">#</a>
85104
vega.<b>interpolate</b>(<i>name</i>[, <i>gamma</i>])
86105
[<>](https://github.com/vega/vega-scale/blob/master/src/interpolate.js "Source")

index.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
export {default as scale} from './src/scales';
2-
export {default as scheme} from './src/schemes';
31
export {default as bandSpace} from './src/bandSpace';
2+
export {default as scale} from './src/scales';
43
export {interpolate, interpolateRange, scaleFraction} from './src/interpolate';
4+
export {scheme, schemeDiscretized} from './src/schemes';
55
export {timeInterval, utcInterval} from './src/timeInterval';

src/schemes.js

+16-4
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import * as _ from 'd3-scale-chromatic';
77
import {interpolateRgbBasis} from 'd3-interpolate';
88
import {peek} from 'vega-util';
99

10-
var discrete = {
10+
var discretized = {
1111
blueorange: blueOrange
1212
};
1313

@@ -46,7 +46,7 @@ var schemes = {
4646

4747
function add(name, suffix) {
4848
schemes[name] = _['interpolate' + suffix];
49-
discrete[name] = _['scheme' + suffix];
49+
discretized[name] = _['scheme' + suffix];
5050
}
5151

5252
// sequential single-hue
@@ -82,7 +82,7 @@ add('yellowgreen', 'YlGn');
8282
add('yelloworangebrown', 'YlOrBr');
8383
add('yelloworangered', 'YlOrRd');
8484

85-
export default function(name, scheme) {
85+
export function scheme(name, scheme) {
8686
if (arguments.length > 1) {
8787
schemes[name] = scheme;
8888
return this;
@@ -92,7 +92,19 @@ export default function(name, scheme) {
9292
name = part[0];
9393
part = +part[1] + 1;
9494

95-
return part && discrete.hasOwnProperty(name) ? discrete[name][part-1]
95+
return part && discretized.hasOwnProperty(name) ? discretized[name][part-1]
9696
: !part && schemes.hasOwnProperty(name) ? schemes[name]
9797
: undefined;
9898
}
99+
100+
export function schemeDiscretized(name, schemeArray, interpolator) {
101+
if (arguments.length > 1) {
102+
discretized[name] = schemeArray;
103+
schemes[name] = interpolator || interpolateRgbBasis(peek(schemeArray));
104+
return this;
105+
}
106+
107+
return discretized.hasOwnProperty(name)
108+
? discretized[name]
109+
: undefined;
110+
}

test/scheme-test.js

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
var tape = require('tape'),
2+
vega = require('../');
3+
4+
tape('scheme registers a single color scheme', function(test) {
5+
var name = 'rgb',
6+
colors = ['#f00', '#0f0', '#00f'];
7+
8+
test.equal(vega.scheme(name), undefined);
9+
vega.scheme(name, colors);
10+
test.deepEqual(vega.scheme(name), colors);
11+
test.end();
12+
});
13+
14+
tape('schemeDiscretized registers discretized color schemes', function(test) {
15+
var name = 'rgbd',
16+
colors = [
17+
['#f00'],
18+
['#f00', '#0f0'],
19+
['#f00', '#0f0', '#00f']
20+
];
21+
22+
test.equal(vega.schemeDiscretized(name), undefined);
23+
vega.schemeDiscretized(name, colors);
24+
test.deepEqual(vega.schemeDiscretized(name), colors);
25+
test.equal(typeof vega.scheme(name), 'function');
26+
test.end();
27+
});

0 commit comments

Comments
 (0)