|
1 |
| -import {InternSet, reverse as reverseof, sort} from "d3"; |
| 1 | +import {InternMap, InternSet, reverse as reverseof, sort as sorter} from "d3"; |
2 | 2 | import {quantize} from "d3";
|
3 | 3 | import {scaleBand, scaleOrdinal, scalePoint} from "d3";
|
4 | 4 | import {
|
@@ -180,7 +180,8 @@ function Scheme(scheme) {
|
180 | 180 | }
|
181 | 181 |
|
182 | 182 | export function ScaleO(scale, channels, {
|
183 |
| - domain = inferDomain(channels), |
| 183 | + sort, |
| 184 | + domain = inferDomain(channels, sort), |
184 | 185 | range,
|
185 | 186 | reverse,
|
186 | 187 | inset
|
@@ -245,11 +246,23 @@ function maybeRound(scale, channels, options = {}) {
|
245 | 246 | return scale;
|
246 | 247 | }
|
247 | 248 |
|
248 |
| -function inferDomain(channels) { |
| 249 | +function inferDomain(channels, sort = "ascending") { |
249 | 250 | const domain = new InternSet();
|
| 251 | + if (sort === "count") { |
| 252 | + const counts = new InternMap(); |
| 253 | + for (const {value} of channels) { |
| 254 | + if (value === undefined) continue; |
| 255 | + for (const v of value) { |
| 256 | + domain.add(v); |
| 257 | + counts.set(v, counts.has(v) ? counts.get(v) + 1 : 1); |
| 258 | + } |
| 259 | + } |
| 260 | + return sort(domain, key => counts.get(key)); |
| 261 | + } |
250 | 262 | for (const {value} of channels) {
|
251 | 263 | if (value === undefined) continue;
|
252 | 264 | for (const v of value) domain.add(v);
|
253 | 265 | }
|
254 |
| - return sort(domain, ascendingDefined); |
| 266 | + if (sort === "ascending") return sorter(domain, ascendingDefined); |
| 267 | + return domain; |
255 | 268 | }
|
0 commit comments