@@ -100,12 +100,12 @@ function axisKy(
100100 marginRight === undefined &&
101101 anchor === "right" &&
102102 x == null && { scale : k , labelAnchor, label} ;
103+ marginRight ??= margin === undefined ? ( anchor === "right" ? 40 : 0 ) : margin ;
103104 const autoMarginLeft = margin === undefined &&
104105 marginLeft === undefined &&
105106 anchor === "left" &&
106107 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 ;
109109 return marks (
110110 tickSize && ! isNoneish ( stroke )
111111 ? axisTickKy ( k , anchor , data , {
@@ -193,9 +193,9 @@ function axisKx(
193193 tickRotate,
194194 y,
195195 margin,
196- marginTop = margin === undefined ? ( anchor === "top" ? 30 : 0 ) : margin ,
196+ marginTop,
197197 marginRight = margin === undefined ? 20 : margin ,
198- marginBottom = margin === undefined ? ( anchor === "bottom" ? 30 : 0 ) : margin ,
198+ marginBottom,
199199 marginLeft = margin === undefined ? 20 : margin ,
200200 label,
201201 labelAnchor,
@@ -209,6 +209,16 @@ function axisKx(
209209 tickRotate = number ( tickRotate ) ;
210210 if ( labelAnchor !== undefined ) labelAnchor = keyword ( labelAnchor , "labelAnchor" , [ "center" , "left" , "right" ] ) ;
211211 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 ;
212222 return marks (
213223 tickSize && ! isNoneish ( stroke )
214224 ? axisTickKx ( k , anchor , data , {
@@ -238,6 +248,8 @@ function axisKx(
238248 marginRight,
239249 marginBottom,
240250 marginLeft,
251+ autoMarginTop,
252+ autoMarginBottom,
241253 ...options
242254 } )
243255 : null ,
@@ -627,8 +639,10 @@ function axisMark(mark, k, anchor, ariaLabel, data, options, initialize) {
627639 channels = { } ;
628640 }
629641 m . ariaLabel = ariaLabel ;
630- m . autoMarginLeft = options . autoMarginLeft ;
642+ m . autoMarginTop = options . autoMarginTop ;
631643 m . autoMarginRight = options . autoMarginRight ;
644+ m . autoMarginBottom = options . autoMarginBottom ;
645+ m . autoMarginLeft = options . autoMarginLeft ;
632646 if ( m . clip === undefined ) m . clip = false ; // don’t clip axes by default
633647 return m ;
634648}
@@ -709,7 +723,7 @@ function inferScaleOrder(scale) {
709723
710724// Takes the scale label, and if this is not an ordinal scale and the label was
711725// 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} = { } ) {
713727 if ( label == null || ( label . inferred && hasTemporalDomain ( scale ) && / ^ ( d a t e | t i m e | y e a r ) $ / i. test ( label ) ) ) return ;
714728 label = String ( label ) ; // coerce to a string after checking if inferred
715729 if ( labelArrow === "auto" ) labelArrow = ( ! scale . bandwidth || scale . interval ) && ! / [ ↑ ↓ → ← ] / . test ( label ) ;
0 commit comments