@@ -101,12 +101,12 @@ function axisKy(
101101 marginRight === undefined &&
102102 anchor === "right" &&
103103 x == null && { scale : k , labelAnchor, label} ;
104+ marginRight ??= margin === undefined ? ( anchor === "right" ? 40 : 0 ) : margin ;
104105 const autoMarginLeft = margin === undefined &&
105106 marginLeft === undefined &&
106107 anchor === "left" &&
107108 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 ;
110110 return marks (
111111 tickSize && ! isNoneish ( stroke )
112112 ? axisTickKy ( k , anchor , data , {
@@ -194,9 +194,9 @@ function axisKx(
194194 tickRotate,
195195 y,
196196 margin,
197- marginTop = margin === undefined ? ( anchor === "top" ? 30 : 0 ) : margin ,
197+ marginTop,
198198 marginRight = margin === undefined ? 20 : margin ,
199- marginBottom = margin === undefined ? ( anchor === "bottom" ? 30 : 0 ) : margin ,
199+ marginBottom,
200200 marginLeft = margin === undefined ? 20 : margin ,
201201 label,
202202 labelAnchor,
@@ -210,6 +210,16 @@ function axisKx(
210210 tickRotate = number ( tickRotate ) ;
211211 if ( labelAnchor !== undefined ) labelAnchor = keyword ( labelAnchor , "labelAnchor" , [ "center" , "left" , "right" ] ) ;
212212 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 ;
213223 return marks (
214224 tickSize && ! isNoneish ( stroke )
215225 ? axisTickKx ( k , anchor , data , {
@@ -239,6 +249,8 @@ function axisKx(
239249 marginRight,
240250 marginBottom,
241251 marginLeft,
252+ autoMarginTop,
253+ autoMarginBottom,
242254 ...options
243255 } )
244256 : null ,
@@ -645,7 +657,10 @@ function axisMark(mark, k, data, properties, options, initialize) {
645657 }
646658 if ( properties !== undefined ) Object . assign ( m , properties ) ;
647659 m . autoMarginLeft = options . autoMarginLeft ;
660+ m . autoMarginTop = options . autoMarginTop ;
648661 m . autoMarginRight = options . autoMarginRight ;
662+ m . autoMarginBottom = options . autoMarginBottom ;
663+ m . autoMarginLeft = options . autoMarginLeft ;
649664 if ( m . clip === undefined ) m . clip = false ; // don’t clip axes by default
650665 return m ;
651666}
@@ -719,7 +734,7 @@ function inferFontVariant(scale) {
719734
720735// Takes the scale label, and if this is not an ordinal scale and the label was
721736// 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} = { } ) {
723738 if ( label == null || ( label . inferred && hasTemporalDomain ( scale ) && / ^ ( d a t e | t i m e | y e a r ) $ / i. test ( label ) ) ) return ;
724739 label = String ( label ) ; // coerce to a string after checking if inferred
725740 if ( labelArrow === "auto" ) labelArrow = ( ! scale . bandwidth || scale . interval ) && ! / [ ↑ ↓ → ← ] / . test ( label ) ;
0 commit comments