@@ -76,7 +76,8 @@ export function plot(options = {}) {
76
76
: mark . facet === "exclude" ? facetsExclude || ( facetsExclude = facetsIndex . map ( f => Uint32Array . from ( difference ( facetIndex , f ) ) ) )
77
77
: undefined ;
78
78
const { facets, channels} = mark . initialize ( markFacets , facetChannels ) ;
79
- stateByMark . set ( mark , { facets, channels : applyScaleTransforms ( channels , options ) } ) ;
79
+ applyScaleTransforms ( channels , options ) ;
80
+ stateByMark . set ( mark , { facets, channels} ) ;
80
81
}
81
82
82
83
// Initalize the scales and axes.
@@ -96,7 +97,9 @@ export function plot(options = {}) {
96
97
const { facets, channels} = mark . reinitialize ( state . facets , state . channels , scales ) ;
97
98
if ( facets !== undefined ) state . facets = facets ;
98
99
if ( channels !== undefined ) {
99
- Object . assign ( state . channels , applyScaleTransforms ( channels , options ) ) ;
100
+ inferChannelScale ( channels , mark ) ;
101
+ applyScaleTransforms ( channels , options ) ;
102
+ Object . assign ( state . channels , channels ) ;
100
103
for ( const { scale} of Object . values ( channels ) ) if ( scale != null ) newByScale . add ( scale ) ;
101
104
}
102
105
}
@@ -324,6 +327,25 @@ function applyScaleTransforms(channels, options) {
324
327
return channels ;
325
328
}
326
329
330
+ // An initializer may generate channels without knowing how the downstream mark
331
+ // will use them. Marks are typically responsible associated scales with
332
+ // channels, but here we assume common behavior across marks.
333
+ function inferChannelScale ( channels ) {
334
+ for ( const name in channels ) {
335
+ const channel = channels [ name ] ;
336
+ let { scale} = channel ;
337
+ if ( scale === true ) {
338
+ switch ( name ) {
339
+ case "fill" : case "stroke" : scale = "color" ; break ;
340
+ case "fillOpacity" : case "strokeOpacity" : case "opacity" : scale = "opacity" ; break ;
341
+ case "r" : case "length" : case "symbol" : scale = name ; break ;
342
+ default : scale = null ;
343
+ }
344
+ channel . scale = scale ;
345
+ }
346
+ }
347
+ }
348
+
327
349
function addScaleChannels ( channelsByScale , stateByMark , filter = yes ) {
328
350
for ( const { channels} of stateByMark . values ( ) ) {
329
351
for ( const name in channels ) {
0 commit comments