@@ -220,23 +220,24 @@ function createAxis(axis, scale, {ticks, tickSize, tickPadding, tickFormat}) {
220
220
. tickValues ( Array . isArray ( ticks ) ? ticks : null ) ;
221
221
}
222
222
223
+ const radians = Math . PI / 180 ;
224
+
223
225
function maybeTickRotate ( g , rotate ) {
224
226
if ( ! ( rotate = + rotate ) ) return ;
225
- const radians = Math . PI / 180 ;
226
- const labels = g . selectAll ( "text" ) . attr ( "dy" , "0.32em" ) ;
227
- const y = + labels . attr ( "y" ) ;
228
- if ( y ) {
229
- const s = Math . sign ( y ) ;
230
- labels
231
- . attr ( "y" , null )
232
- . attr ( "transform" , `translate(0, ${ y + s * 4 * Math . cos ( rotate * radians ) } ) rotate(${ rotate } )` )
233
- . attr ( "text-anchor" , Math . abs ( rotate ) < 10 ? "middle" : ( rotate < 0 ) ^ ( s > 0 ) ? "start" : "end" ) ;
234
- } else {
235
- const x = + labels . attr ( "x" ) ;
236
- const s = Math . sign ( x ) ;
237
- labels
238
- . attr ( "x" , null )
239
- . attr ( "transform" , `translate(${ x + s * 4 * Math . abs ( Math . sin ( rotate * radians ) ) } , 0) rotate(${ rotate } )` )
240
- . attr ( "text-anchor" , Math . abs ( rotate ) > 60 ? "middle" : s > 0 ? "start" : "end" ) ;
227
+ for ( const text of g . selectAll ( "text" ) ) {
228
+ const x = + text . getAttribute ( "x" ) ;
229
+ const y = + text . getAttribute ( "y" ) ;
230
+ if ( Math . abs ( y ) > Math . abs ( x ) ) {
231
+ const s = Math . sign ( y ) ;
232
+ text . setAttribute ( "transform" , `translate(0, ${ y + s * 4 * Math . cos ( rotate * radians ) } ) rotate(${ rotate } )` ) ;
233
+ text . setAttribute ( "text-anchor" , Math . abs ( rotate ) < 10 ? "middle" : ( rotate < 0 ) ^ ( s > 0 ) ? "start" : "end" ) ;
234
+ } else {
235
+ const s = Math . sign ( x ) ;
236
+ text . setAttribute ( "transform" , `translate(${ x + s * 4 * Math . abs ( Math . sin ( rotate * radians ) ) } , 0) rotate(${ rotate } )` ) ;
237
+ text . setAttribute ( "text-anchor" , Math . abs ( rotate ) > 60 ? "middle" : s > 0 ? "start" : "end" ) ;
238
+ }
239
+ text . removeAttribute ( "x" ) ;
240
+ text . removeAttribute ( "y" ) ;
241
+ text . setAttribute ( "dy" , "0.32em" ) ;
241
242
}
242
243
}
0 commit comments