@@ -413,69 +413,58 @@ defmodule EXGBoost.Plotting do
413
413
align: :center ,
414
414
baseline: :middle ,
415
415
font_size: 13 ,
416
- font: "Calibri" ,
417
- fill: :black
416
+ font: "Calibri"
418
417
]
419
418
420
419
@ default_leaf_rect [
421
420
corner_radius: 2 ,
422
- fill: :teal ,
423
421
opacity: 1
424
422
]
425
423
426
424
@ default_split_text [
427
425
align: :center ,
428
426
baseline: :middle ,
429
427
font_size: 13 ,
430
- font: "Calibri" ,
431
- fill: :black
428
+ font: "Calibri"
432
429
]
433
430
434
431
@ default_split_rect [
435
432
corner_radius: 2 ,
436
- fill: :teal ,
437
433
opacity: 1
438
434
]
439
435
440
436
@ default_split_children [
441
437
align: :right ,
442
438
baseline: :middle ,
443
- fill: :black ,
444
439
font: "Calibri" ,
445
440
font_size: 13
446
441
]
447
442
448
- @ default_yes_path [
449
- stroke: :red
450
- ]
443
+ @ default_yes_path [ ]
451
444
452
445
@ default_yes_text [
453
446
align: :center ,
454
447
baseline: :middle ,
455
448
font_size: 13 ,
456
449
font: "Calibri" ,
457
- fill: :black ,
458
450
text: "yes"
459
451
]
460
452
461
- @ default_no_path [
462
- stroke: :black
463
- ]
453
+ @ default_no_path [ ]
464
454
465
455
@ default_no_text [
466
456
align: :center ,
467
457
baseline: :middle ,
468
458
font_size: 13 ,
469
459
font: "Calibri" ,
470
- fill: :black ,
471
460
text: "no"
472
461
]
473
462
474
463
@ plotting_params [
475
464
style: [
476
465
doc:
477
466
"The style to use for the visualization. Refer to `EXGBoost.Plotting.Styles` for a list of available styles." ,
478
- default: Application . compile_env ( :exgboost , [ :plotting , :style ] , :solarized_light ) ,
467
+ default: Application . compile_env ( :exgboost , [ :plotting , :style ] , :dracula ) ,
479
468
type: { :or , [ { :in , Keyword . keys ( @ styles ) } , { :in , [ nil , false ] } , :keyword_list ] }
480
469
] ,
481
470
rankdir: [
@@ -948,12 +937,13 @@ defmodule EXGBoost.Plotting do
948
937
opts
949
938
950
939
Keyword . keyword? ( opts [ :style ] ) ->
951
- deep_merge_kw ( opts , opts [ :style ] )
940
+ deep_merge_kw ( opts [ :style ] , opts , @ defaults )
952
941
953
942
true ->
954
943
style = apply ( __MODULE__ , opts [ :style ] , [ ] )
955
- deep_merge_kw ( opts , style )
944
+ deep_merge_kw ( style , opts , @ defaults )
956
945
end
946
+ |> then ( & deep_merge_kw ( @ defaults , & 1 ) )
957
947
958
948
% {
959
949
"$schema" => "https://vega.github.io/schema/vega/v5.json" ,
@@ -1278,32 +1268,31 @@ defmodule EXGBoost.Plotting do
1278
1268
opts
1279
1269
1280
1270
Keyword . keyword? ( opts [ :style ] ) ->
1281
- deep_merge_kw ( opts , opts [ :style ] )
1271
+ deep_merge_kw ( opts [ :style ] , opts , @ defaults )
1282
1272
1283
1273
true ->
1284
1274
style = apply ( __MODULE__ , opts [ :style ] , [ ] )
1285
- deep_merge_kw ( opts , style )
1275
+ deep_merge_kw ( style , opts , @ defaults )
1286
1276
end
1287
-
1288
- defaults = get_defaults ( )
1277
+ |> then ( & deep_merge_kw ( @ defaults , & 1 ) )
1289
1278
1290
1279
# Try to account for non-default node height / width to adjust spacing
1291
1280
# between nodes and levels as a quality of life improvement
1292
1281
# If they provide their own spacing, don't adjust it
1293
1282
opts =
1294
1283
cond do
1295
1284
opts [ :rankdir ] in [ :lr , :rl ] and
1296
- opts [ :space_between ] [ :levels ] == defaults [ :space_between ] [ :levels ] ->
1285
+ opts [ :space_between ] [ :levels ] == @ defaults [ :space_between ] [ :levels ] ->
1297
1286
put_in (
1298
1287
opts [ :space_between ] [ :levels ] ,
1299
- defaults [ :space_between ] [ :levels ] + ( opts [ :node_width ] - defaults [ :node_width ] )
1288
+ @ defaults [ :space_between ] [ :levels ] + ( opts [ :node_width ] - @ defaults [ :node_width ] )
1300
1289
)
1301
1290
1302
1291
opts [ :rankdir ] in [ :tb , :bt ] and
1303
- opts [ :space_between ] [ :levels ] == defaults [ :space_between ] [ :levels ] ->
1292
+ opts [ :space_between ] [ :levels ] == @ defaults [ :space_between ] [ :levels ] ->
1304
1293
put_in (
1305
1294
opts [ :space_between ] [ :levels ] ,
1306
- defaults [ :space_between ] [ :levels ] + ( opts [ :node_height ] - defaults [ :node_height ] )
1295
+ @ defaults [ :space_between ] [ :levels ] + ( opts [ :node_height ] - @ defaults [ :node_height ] )
1307
1296
)
1308
1297
1309
1298
true ->
@@ -1313,17 +1302,17 @@ defmodule EXGBoost.Plotting do
1313
1302
opts =
1314
1303
cond do
1315
1304
opts [ :rankdir ] in [ :lr , :rl ] and
1316
- opts [ :space_between ] [ :nodes ] == defaults [ :space_between ] [ :nodes ] ->
1305
+ opts [ :space_between ] [ :nodes ] == @ defaults [ :space_between ] [ :nodes ] ->
1317
1306
put_in (
1318
1307
opts [ :space_between ] [ :nodes ] ,
1319
- defaults [ :space_between ] [ :nodes ] + ( opts [ :node_height ] - defaults [ :node_height ] )
1308
+ @ defaults [ :space_between ] [ :nodes ] + ( opts [ :node_height ] - @ defaults [ :node_height ] )
1320
1309
)
1321
1310
1322
1311
opts [ :rankdir ] in [ :tb , :bt ] and
1323
- opts [ :space_between ] [ :nodes ] == defaults [ :space_between ] [ :nodes ] ->
1312
+ opts [ :space_between ] [ :nodes ] == @ defaults [ :space_between ] [ :nodes ] ->
1324
1313
put_in (
1325
1314
opts [ :space_between ] [ :nodes ] ,
1326
- defaults [ :space_between ] [ :nodes ] + ( opts [ :node_width ] - defaults [ :node_width ] )
1315
+ @ defaults [ :space_between ] [ :nodes ] + ( opts [ :node_width ] - @ defaults [ :node_width ] )
1327
1316
)
1328
1317
1329
1318
true ->
@@ -1381,15 +1370,19 @@ defmodule EXGBoost.Plotting do
1381
1370
% {
1382
1371
"encode" => % {
1383
1372
"update" =>
1384
- Map . merge (
1373
+ deep_merge_maps (
1385
1374
% {
1386
1375
"x" => % {
1387
1376
"signal" =>
1388
- "(scale('xscale', datum.source.x+(nodeWidth/3)) + scale('xscale', datum.target.x)) / 2"
1377
+ "(scale('xscale', datum.source.x#{ cond do
1378
+ opts [ :rankdir ] in [ :tb , :bt , :lr ] -> ~c" -nodeWidth/4"
1379
+ opts [ :rankdir ] in [ :rl ] -> ~c" +nodeWidth/4"
1380
+ true -> ~c" "
1381
+ end } ) + scale('xscale', datum.target.x)) / 2"
1389
1382
} ,
1390
1383
"y" => % {
1391
1384
"signal" =>
1392
- "(scale('yscale', datum.source.y) + scale('yscale', datum.target.y)) / 2 - (scaledNodeHeight/2)"
1385
+ "(scale('yscale', datum.source.y#{ if opts [ :rankdir ] in [ :lr , :rl ] , do: ~c " -nodeWidth/3 " , else: ~c " " } ) + scale('yscale', datum.target.y)) / 2 - (scaledNodeHeight/2)"
1393
1386
}
1394
1387
} ,
1395
1388
format_mark ( opts [ :yes ] [ :text ] )
@@ -1405,7 +1398,11 @@ defmodule EXGBoost.Plotting do
1405
1398
% {
1406
1399
"x" => % {
1407
1400
"signal" =>
1408
- "(scale('xscale', datum.source.x+(nodeWidth/3)) + scale('xscale', datum.target.x)) / 2"
1401
+ "(scale('xscale', datum.source.x#{ cond do
1402
+ opts [ :rankdir ] in [ :tb , :bt , :lr ] -> ~c" -nodeWidth/4"
1403
+ opts [ :rankdir ] in [ :rl ] -> ~c" +nodeWidth/4"
1404
+ true -> ~c" "
1405
+ end } ) + scale('xscale', datum.target.x)) / 2"
1409
1406
} ,
1410
1407
"y" => % {
1411
1408
"signal" =>
0 commit comments