@@ -101,12 +101,12 @@ function axisKy(
101
101
marginRight === undefined &&
102
102
anchor === "right" &&
103
103
x == null && { scale : k , labelAnchor, label} ;
104
+ marginRight ??= margin === undefined ? ( anchor === "right" ? 40 : 0 ) : margin ;
104
105
const autoMarginLeft = margin === undefined &&
105
106
marginLeft === undefined &&
106
107
anchor === "left" &&
107
108
x == null && { scale : k , labelAnchor, label} ;
108
- marginRight = margin === undefined ? ( anchor === "right" ? 40 : 0 ) : margin ;
109
- marginLeft = margin === undefined ? ( anchor === "left" ? 40 : 0 ) : margin ;
109
+ marginLeft ??= margin === undefined ? ( anchor === "left" ? 40 : 0 ) : margin ;
110
110
return marks (
111
111
tickSize && ! isNoneish ( stroke )
112
112
? axisTickKy ( k , anchor , data , {
@@ -194,9 +194,9 @@ function axisKx(
194
194
tickRotate,
195
195
y,
196
196
margin,
197
- marginTop = margin === undefined ? ( anchor === "top" ? 30 : 0 ) : margin ,
197
+ marginTop,
198
198
marginRight = margin === undefined ? 20 : margin ,
199
- marginBottom = margin === undefined ? ( anchor === "bottom" ? 30 : 0 ) : margin ,
199
+ marginBottom,
200
200
marginLeft = margin === undefined ? 20 : margin ,
201
201
label,
202
202
labelAnchor,
@@ -210,6 +210,16 @@ function axisKx(
210
210
tickRotate = number ( tickRotate ) ;
211
211
if ( labelAnchor !== undefined ) labelAnchor = keyword ( labelAnchor , "labelAnchor" , [ "center" , "left" , "right" ] ) ;
212
212
labelArrow = maybeLabelArrow ( labelArrow ) ;
213
+ const autoMarginTop = margin === undefined &&
214
+ marginTop === undefined &&
215
+ anchor === "top" &&
216
+ y == null && { scale : k , labelAnchor, label} ;
217
+ marginTop ??= margin === undefined ? ( anchor === "top" ? 30 : 0 ) : margin ;
218
+ const autoMarginBottom = margin === undefined &&
219
+ marginBottom === undefined &&
220
+ anchor === "bottom" &&
221
+ y == null && { scale : k , labelAnchor, label} ;
222
+ marginBottom ??= margin === undefined ? ( anchor === "bottom" ? 30 : 0 ) : margin ;
213
223
return marks (
214
224
tickSize && ! isNoneish ( stroke )
215
225
? axisTickKx ( k , anchor , data , {
@@ -239,6 +249,8 @@ function axisKx(
239
249
marginRight,
240
250
marginBottom,
241
251
marginLeft,
252
+ autoMarginTop,
253
+ autoMarginBottom,
242
254
...options
243
255
} )
244
256
: null ,
@@ -645,7 +657,10 @@ function axisMark(mark, k, data, properties, options, initialize) {
645
657
}
646
658
if ( properties !== undefined ) Object . assign ( m , properties ) ;
647
659
m . autoMarginLeft = options . autoMarginLeft ;
660
+ m . autoMarginTop = options . autoMarginTop ;
648
661
m . autoMarginRight = options . autoMarginRight ;
662
+ m . autoMarginBottom = options . autoMarginBottom ;
663
+ m . autoMarginLeft = options . autoMarginLeft ;
649
664
if ( m . clip === undefined ) m . clip = false ; // don’t clip axes by default
650
665
return m ;
651
666
}
@@ -719,7 +734,7 @@ function inferFontVariant(scale) {
719
734
720
735
// Takes the scale label, and if this is not an ordinal scale and the label was
721
736
// inferred from an associated channel, adds an orientation-appropriate arrow.
722
- function formatAxisLabel ( k , scale , { anchor, label = scale . label , labelAnchor, labelArrow} = { } ) {
737
+ export function formatAxisLabel ( k , scale , { anchor, label = scale . label , labelAnchor, labelArrow} = { } ) {
723
738
if ( label == null || ( label . inferred && hasTemporalDomain ( scale ) && / ^ ( d a t e | t i m e | y e a r ) $ / i. test ( label ) ) ) return ;
724
739
label = String ( label ) ; // coerce to a string after checking if inferred
725
740
if ( labelArrow === "auto" ) labelArrow = ( ! scale . bandwidth || scale . interval ) && ! / [ ↑ ↓ → ← ] / . test ( label ) ;
0 commit comments