@@ -100,12 +100,12 @@ function axisKy(
100
100
marginRight === undefined &&
101
101
anchor === "right" &&
102
102
x == null && { scale : k , labelAnchor, label} ;
103
+ marginRight ??= margin === undefined ? ( anchor === "right" ? 40 : 0 ) : margin ;
103
104
const autoMarginLeft = margin === undefined &&
104
105
marginLeft === undefined &&
105
106
anchor === "left" &&
106
107
x == null && { scale : k , labelAnchor, label} ;
107
- marginRight = margin === undefined ? ( anchor === "right" ? 40 : 0 ) : margin ;
108
- marginLeft = margin === undefined ? ( anchor === "left" ? 40 : 0 ) : margin ;
108
+ marginLeft ??= margin === undefined ? ( anchor === "left" ? 40 : 0 ) : margin ;
109
109
return marks (
110
110
tickSize && ! isNoneish ( stroke )
111
111
? axisTickKy ( k , anchor , data , {
@@ -193,9 +193,9 @@ function axisKx(
193
193
tickRotate,
194
194
y,
195
195
margin,
196
- marginTop = margin === undefined ? ( anchor === "top" ? 30 : 0 ) : margin ,
196
+ marginTop,
197
197
marginRight = margin === undefined ? 20 : margin ,
198
- marginBottom = margin === undefined ? ( anchor === "bottom" ? 30 : 0 ) : margin ,
198
+ marginBottom,
199
199
marginLeft = margin === undefined ? 20 : margin ,
200
200
label,
201
201
labelAnchor,
@@ -209,6 +209,16 @@ function axisKx(
209
209
tickRotate = number ( tickRotate ) ;
210
210
if ( labelAnchor !== undefined ) labelAnchor = keyword ( labelAnchor , "labelAnchor" , [ "center" , "left" , "right" ] ) ;
211
211
labelArrow = maybeLabelArrow ( labelArrow ) ;
212
+ const autoMarginTop = margin === undefined &&
213
+ marginTop === undefined &&
214
+ anchor === "top" &&
215
+ y == null && { scale : k , labelAnchor, label} ;
216
+ marginTop ??= margin === undefined ? ( anchor === "top" ? 30 : 0 ) : margin ;
217
+ const autoMarginBottom = margin === undefined &&
218
+ marginBottom === undefined &&
219
+ anchor === "bottom" &&
220
+ y == null && { scale : k , labelAnchor, label} ;
221
+ marginBottom ??= margin === undefined ? ( anchor === "bottom" ? 30 : 0 ) : margin ;
212
222
return marks (
213
223
tickSize && ! isNoneish ( stroke )
214
224
? axisTickKx ( k , anchor , data , {
@@ -238,6 +248,8 @@ function axisKx(
238
248
marginRight,
239
249
marginBottom,
240
250
marginLeft,
251
+ autoMarginTop,
252
+ autoMarginBottom,
241
253
...options
242
254
} )
243
255
: null ,
@@ -627,8 +639,10 @@ function axisMark(mark, k, anchor, ariaLabel, data, options, initialize) {
627
639
channels = { } ;
628
640
}
629
641
m . ariaLabel = ariaLabel ;
630
- m . autoMarginLeft = options . autoMarginLeft ;
642
+ m . autoMarginTop = options . autoMarginTop ;
631
643
m . autoMarginRight = options . autoMarginRight ;
644
+ m . autoMarginBottom = options . autoMarginBottom ;
645
+ m . autoMarginLeft = options . autoMarginLeft ;
632
646
if ( m . clip === undefined ) m . clip = false ; // don’t clip axes by default
633
647
return m ;
634
648
}
@@ -709,7 +723,7 @@ function inferScaleOrder(scale) {
709
723
710
724
// Takes the scale label, and if this is not an ordinal scale and the label was
711
725
// inferred from an associated channel, adds an orientation-appropriate arrow.
712
- function formatAxisLabel ( k , scale , { anchor, label = scale . label , labelAnchor, labelArrow} = { } ) {
726
+ export function formatAxisLabel ( k , scale , { anchor, label = scale . label , labelAnchor, labelArrow} = { } ) {
713
727
if ( label == null || ( label . inferred && hasTemporalDomain ( scale ) && / ^ ( d a t e | t i m e | y e a r ) $ / i. test ( label ) ) ) return ;
714
728
label = String ( label ) ; // coerce to a string after checking if inferred
715
729
if ( labelArrow === "auto" ) labelArrow = ( ! scale . bandwidth || scale . interval ) && ! / [ ↑ ↓ → ← ] / . test ( label ) ;
0 commit comments