gridviz 2.1.12 → 2.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/README.md +125 -125
  2. package/dist/gridviz.js +8249 -7909
  3. package/dist/gridviz.min.js +1 -1
  4. package/package.json +77 -77
  5. package/src/App.js +758 -705
  6. package/src/BackgroundLayer.js +182 -182
  7. package/src/BackgroundLayerWMS.js +131 -131
  8. package/src/Dataset.js +76 -76
  9. package/src/DatasetComponent.js +113 -113
  10. package/src/GeoCanvas.js +420 -420
  11. package/src/LabelLayer.js +190 -190
  12. package/src/Layer.js +103 -103
  13. package/src/Legend.js +86 -86
  14. package/src/LineLayer.js +150 -150
  15. package/src/Style.js +129 -129
  16. package/src/Tooltip.js +180 -180
  17. package/src/button/Button.js +54 -0
  18. package/src/button/FullscreenButton.js +98 -0
  19. package/src/button/ZoomButtons.js +72 -0
  20. package/src/dataset/COGeo.js +24 -24
  21. package/src/dataset/CSVGrid.js +104 -104
  22. package/src/dataset/GeoTIFF.js +127 -127
  23. package/src/dataset/GridTile.js +41 -41
  24. package/src/dataset/LGrid.js +54 -54
  25. package/src/dataset/TiledGrid.js +264 -264
  26. package/src/index.js +71 -71
  27. package/src/legend/ColorCategoryLegend.js +124 -124
  28. package/src/legend/ColorDiscreteLegend.js +103 -103
  29. package/src/legend/ColorLegend.js +128 -124
  30. package/src/legend/SegmentOrientationLegend.js +87 -87
  31. package/src/legend/SegmentWidthLegend.js +101 -97
  32. package/src/legend/SizeLegend.js +141 -141
  33. package/src/style/CompositionStyle.js +300 -300
  34. package/src/style/ContourStyle.js +54 -54
  35. package/src/style/DotDensityStyle.js +156 -156
  36. package/src/style/IsoFenceStyle.js +262 -262
  37. package/src/style/JoyPlotStyle.js +135 -135
  38. package/src/style/LegoStyle.js +112 -112
  39. package/src/style/MosaicStyle.js +107 -107
  40. package/src/style/NinjaStarStyle.js +125 -125
  41. package/src/style/PillarStyle.js +230 -230
  42. package/src/style/SegmentStyle.js +142 -142
  43. package/src/style/ShapeColorSizeStyle.js +152 -152
  44. package/src/style/SideCatStyle.js +172 -172
  45. package/src/style/SideStyle.js +216 -216
  46. package/src/style/SquareColorCatWGLStyle.js +120 -120
  47. package/src/style/SquareColorWGLStyle.js +146 -146
  48. package/src/style/StrokeStyle.js +131 -131
  49. package/src/style/TanakaStyle.js +160 -160
  50. package/src/style/TextStyle.js +132 -132
  51. package/src/style/TimeSeriesStyle.js +259 -250
  52. package/src/utils/Utils.js +35 -35
  53. package/src/utils/WebGLRectangleColoring.js +106 -106
  54. package/src/utils/WebGLSquareColoring.js +118 -118
  55. package/src/utils/WebGLSquareColoringAdvanced.js +230 -230
  56. package/src/utils/WebGLSquareColoringCatAdvanced.js +133 -133
  57. package/src/utils/WebGLSquareColoringKS.js +153 -153
  58. package/src/utils/stretching.js +131 -131
  59. package/src/utils/webGLUtils.js +71 -71
  60. package/src/utils/zoomUtils.js +142 -142
package/src/index.js CHANGED
@@ -1,71 +1,71 @@
1
- //@ts-check
2
- 'use strict'
3
-
4
- // the application
5
- export { App } from './App.js'
6
- export { GeoCanvas } from './GeoCanvas.js'
7
- export { Style } from './Style.js'
8
- export { Layer } from './Layer.js'
9
- export { Dataset } from './Dataset.js'
10
- export { DatasetComponent } from './DatasetComponent.js'
11
-
12
- // export dataset types
13
- export { TiledGrid } from './dataset/TiledGrid.js'
14
- export { GridTile } from './dataset/GridTile.js'
15
- export { CSVGrid } from './dataset/CSVGrid.js'
16
- export { LGrid } from './dataset/LGrid.js'
17
- //export { GeoTIFF } from "./dataset/GeoTIFF"
18
-
19
- // export styles
20
- export { ShapeColorSizeStyle } from './style/ShapeColorSizeStyle.js'
21
- export { StrokeStyle } from './style/StrokeStyle.js'
22
- export { JoyPlotStyle } from './style/JoyPlotStyle.js'
23
- export { CompositionStyle } from './style/CompositionStyle.js'
24
- export { SegmentStyle } from './style/SegmentStyle.js'
25
- export { TextStyle } from './style/TextStyle.js'
26
- export { PillarStyle } from './style/PillarStyle.js'
27
- export { SideStyle } from './style/SideStyle.js'
28
- export { ContourStyle } from './style/ContourStyle.js'
29
- export { SideCatStyle } from './style/SideCatStyle.js'
30
- export { DotDensityStyle } from './style/DotDensityStyle.js'
31
- export { TanakaStyle } from './style/TanakaStyle.js'
32
- export { LegoStyle } from './style/LegoStyle.js'
33
- export { SquareColorWGLStyle } from './style/SquareColorWGLStyle.js'
34
- export { SquareColorCatWGLStyle } from './style/SquareColorCatWGLStyle.js'
35
- export { MosaicStyle } from './style/MosaicStyle.js'
36
- export { NinjaStarStyle } from './style/NinjaStarStyle.js'
37
- export { TimeSeriesStyle } from './style/TimeSeriesStyle.js'
38
- export { IsoFenceStyle } from './style/IsoFenceStyle.js'
39
-
40
- // export additional layers
41
- export { BackgroundLayer } from './BackgroundLayer.js'
42
- export { BackgroundLayerWMS } from './BackgroundLayerWMS.js'
43
- export { LabelLayer } from './LabelLayer.js'
44
- export { LineLayer as BoundaryLayer } from './LineLayer.js'
45
-
46
- // export legends
47
- export { ColorLegend } from './legend/ColorLegend.js'
48
- export { ColorDiscreteLegend } from './legend/ColorDiscreteLegend.js'
49
- export { ColorCategoryLegend } from './legend/ColorCategoryLegend.js'
50
- export { SizeLegend } from './legend/SizeLegend.js'
51
- export { SegmentWidthLegend } from './legend/SegmentWidthLegend.js'
52
- export { SegmentOrientationLegend } from './legend/SegmentOrientationLegend.js'
53
-
54
- // export { goToStraight, zoomTo } from "./utils/zoomUtils"
55
- export * from './utils/stretching.js'
56
-
57
- export { getClass } from './utils/Utils.js'
58
-
59
-
60
-
61
- import { GeoCanvas } from './GeoCanvas.js'
62
- export const getParameterByName = GeoCanvas.getParameterByName
63
-
64
- // set default d3 locale
65
- import { formatDefaultLocale } from 'd3-format'
66
- formatDefaultLocale({
67
- decimal: '.',
68
- thousands: ' ',
69
- grouping: [3],
70
- currency: ['', '€'],
71
- })
1
+ //@ts-check
2
+ 'use strict'
3
+
4
+ // the application
5
+ export { App } from './App.js'
6
+ export { GeoCanvas } from './GeoCanvas.js'
7
+ export { Style } from './Style.js'
8
+ export { Layer } from './Layer.js'
9
+ export { Dataset } from './Dataset.js'
10
+ export { DatasetComponent } from './DatasetComponent.js'
11
+
12
+ // export dataset types
13
+ export { TiledGrid } from './dataset/TiledGrid.js'
14
+ export { GridTile } from './dataset/GridTile.js'
15
+ export { CSVGrid } from './dataset/CSVGrid.js'
16
+ export { LGrid } from './dataset/LGrid.js'
17
+ //export { GeoTIFF } from "./dataset/GeoTIFF"
18
+
19
+ // export styles
20
+ export { ShapeColorSizeStyle } from './style/ShapeColorSizeStyle.js'
21
+ export { StrokeStyle } from './style/StrokeStyle.js'
22
+ export { JoyPlotStyle } from './style/JoyPlotStyle.js'
23
+ export { CompositionStyle } from './style/CompositionStyle.js'
24
+ export { SegmentStyle } from './style/SegmentStyle.js'
25
+ export { TextStyle } from './style/TextStyle.js'
26
+ export { PillarStyle } from './style/PillarStyle.js'
27
+ export { SideStyle } from './style/SideStyle.js'
28
+ export { ContourStyle } from './style/ContourStyle.js'
29
+ export { SideCatStyle } from './style/SideCatStyle.js'
30
+ export { DotDensityStyle } from './style/DotDensityStyle.js'
31
+ export { TanakaStyle } from './style/TanakaStyle.js'
32
+ export { LegoStyle } from './style/LegoStyle.js'
33
+ export { SquareColorWGLStyle } from './style/SquareColorWGLStyle.js'
34
+ export { SquareColorCatWGLStyle } from './style/SquareColorCatWGLStyle.js'
35
+ export { MosaicStyle } from './style/MosaicStyle.js'
36
+ export { NinjaStarStyle } from './style/NinjaStarStyle.js'
37
+ export { TimeSeriesStyle } from './style/TimeSeriesStyle.js'
38
+ export { IsoFenceStyle } from './style/IsoFenceStyle.js'
39
+
40
+ // export additional layers
41
+ export { BackgroundLayer } from './BackgroundLayer.js'
42
+ export { BackgroundLayerWMS } from './BackgroundLayerWMS.js'
43
+ export { LabelLayer } from './LabelLayer.js'
44
+ export { LineLayer as BoundaryLayer } from './LineLayer.js'
45
+
46
+ // export legends
47
+ export { ColorLegend } from './legend/ColorLegend.js'
48
+ export { ColorDiscreteLegend } from './legend/ColorDiscreteLegend.js'
49
+ export { ColorCategoryLegend } from './legend/ColorCategoryLegend.js'
50
+ export { SizeLegend } from './legend/SizeLegend.js'
51
+ export { SegmentWidthLegend } from './legend/SegmentWidthLegend.js'
52
+ export { SegmentOrientationLegend } from './legend/SegmentOrientationLegend.js'
53
+
54
+ // export { goToStraight, zoomTo } from "./utils/zoomUtils"
55
+ export * from './utils/stretching.js'
56
+
57
+ export { getClass } from './utils/Utils.js'
58
+
59
+
60
+
61
+ import { GeoCanvas } from './GeoCanvas.js'
62
+ export const getParameterByName = GeoCanvas.getParameterByName
63
+
64
+ // set default d3 locale
65
+ import { formatDefaultLocale } from 'd3-format'
66
+ formatDefaultLocale({
67
+ decimal: '.',
68
+ thousands: ' ',
69
+ grouping: [3],
70
+ currency: ['', '€'],
71
+ })
@@ -1,124 +1,124 @@
1
- //@ts-check
2
- 'use strict'
3
-
4
- import { Legend } from '../Legend.js'
5
-
6
- /**
7
- * A legend element for color categrories.
8
- *
9
- * @author Joseph Davies, Julien Gaffuri
10
- */
11
- export class ColorCategoryLegend extends Legend {
12
- /** @param {Object} opts */
13
- constructor(opts) {
14
- super(opts)
15
- opts = opts || {}
16
-
17
- //col/categories array, in display order
18
- /**
19
- * @private
20
- * @type {Array.<Array.<string>>} */
21
- this.colCat = opts.colCat || [['gray', '-']]
22
-
23
- /**
24
- * @private
25
- * @type {import("../Style").Shape} */
26
- this.shape = opts.shape || 'circle'
27
- this.dimension = opts.dimension || { r: 8 }
28
- this.strokeColor = opts.strokeColor || 'gray'
29
- this.strokeWidth = opts.strokeWidth || 1
30
-
31
- this.title = opts.title
32
- this.titleFontSize = opts.titleFontSize || '0.8em'
33
- this.titleFontWeight = opts.titleFontWeight || 'bold'
34
-
35
- //label
36
- this.labelFontSize = opts.labelFontSize || '0.8em'
37
- }
38
-
39
- /**
40
- * @param {{ style: import("../Style").Style, r: number, zf: number, sSize: import("../Style").Stat, sColor: import("../Style").Stat }} opts
41
- */
42
- update(opts) {
43
- //clear
44
- this.div.selectAll('*').remove()
45
-
46
- //build
47
-
48
- //title
49
- if (this.title)
50
- this.div
51
- .append('div')
52
- .style('font-size', this.titleFontSize)
53
- .style('font-weight', this.titleFontWeight)
54
- .style('margin-bottom', '7px')
55
- .text(this.title)
56
-
57
- //categories
58
- const nb = this.colCat.length
59
- if (nb == 0) return
60
-
61
- for (let i = 0; i < nb; i++) {
62
- const cat = this.colCat[i]
63
-
64
- //make div for category
65
- const d = this.div.append('div')
66
- //to enable vertical centering
67
- //.style("position", "relative")
68
-
69
- const sw = this.strokeWidth
70
-
71
- //draw graphic element: box / circle
72
- if (this.shape === 'square') {
73
- const h = this.dimension.h || 15
74
- const w = this.dimension.w || 20
75
- d.append('div')
76
- .style('display', 'inline')
77
-
78
- .append('svg')
79
- .attr('width', w + 2 * sw)
80
- .attr('height', h + 2 * sw)
81
-
82
- .append('rect')
83
- .attr('x', sw)
84
- .attr('y', sw)
85
- .attr('width', w)
86
- .attr('height', h)
87
- .style('fill', cat[0])
88
- .style('stroke', this.strokeColor)
89
- .style('stroke-width', this.strokeWidth)
90
- } else if (this.shape === 'circle') {
91
- const r = this.dimension.r || 8
92
- const h = 2 * r + 2 * sw
93
- d.append('div')
94
- .style('display', 'inline')
95
-
96
- .append('svg')
97
- .attr('width', h)
98
- .attr('height', h)
99
-
100
- .append('circle')
101
- .attr('cx', r + sw)
102
- .attr('cy', r + sw)
103
- .attr('r', r)
104
- .style('fill', cat[0])
105
- .style('stroke', this.strokeColor)
106
- .style('stroke-width', this.strokeWidth)
107
- } else {
108
- throw new Error('Unexpected shape:' + this.shape)
109
- }
110
-
111
- //write label text
112
- d.append('div')
113
- //show on right of graphic
114
- .style('display', 'inline')
115
-
116
- //center vertically
117
- //.style("position", "absolute").style("top", "0").style("bottom", "0")
118
-
119
- .style('padding-left', '5px')
120
- .style('font-size', this.labelFontSize)
121
- .text(cat[1])
122
- }
123
- }
124
- }
1
+ //@ts-check
2
+ 'use strict'
3
+
4
+ import { Legend } from '../Legend.js'
5
+
6
+ /**
7
+ * A legend element for color categrories.
8
+ *
9
+ * @author Joseph Davies, Julien Gaffuri
10
+ */
11
+ export class ColorCategoryLegend extends Legend {
12
+ /** @param {Object} opts */
13
+ constructor(opts) {
14
+ super(opts)
15
+ opts = opts || {}
16
+
17
+ //col/categories array, in display order
18
+ /**
19
+ * @private
20
+ * @type {Array.<Array.<string>>} */
21
+ this.colCat = opts.colCat || [['gray', '-']]
22
+
23
+ /**
24
+ * @private
25
+ * @type {import("../Style").Shape} */
26
+ this.shape = opts.shape || 'circle'
27
+ this.dimension = opts.dimension || { r: 8 }
28
+ this.strokeColor = opts.strokeColor || 'gray'
29
+ this.strokeWidth = opts.strokeWidth || 1
30
+
31
+ this.title = opts.title
32
+ this.titleFontSize = opts.titleFontSize || '0.8em'
33
+ this.titleFontWeight = opts.titleFontWeight || 'bold'
34
+
35
+ //label
36
+ this.labelFontSize = opts.labelFontSize || '0.8em'
37
+ }
38
+
39
+ /**
40
+ * @param {{ style: import("../Style").Style, r: number, zf: number, sSize: import("../Style").Stat, sColor: import("../Style").Stat }} opts
41
+ */
42
+ update(opts) {
43
+ //clear
44
+ this.div.selectAll('*').remove()
45
+
46
+ //build
47
+
48
+ //title
49
+ if (this.title)
50
+ this.div
51
+ .append('div')
52
+ .style('font-size', this.titleFontSize)
53
+ .style('font-weight', this.titleFontWeight)
54
+ .style('margin-bottom', '7px')
55
+ .text(this.title)
56
+
57
+ //categories
58
+ const nb = this.colCat.length
59
+ if (nb == 0) return
60
+
61
+ for (let i = 0; i < nb; i++) {
62
+ const cat = this.colCat[i]
63
+
64
+ //make div for category
65
+ const d = this.div.append('div')
66
+ //to enable vertical centering
67
+ //.style("position", "relative")
68
+
69
+ const sw = this.strokeWidth
70
+
71
+ //draw graphic element: box / circle
72
+ if (this.shape === 'square') {
73
+ const h = this.dimension.h || 15
74
+ const w = this.dimension.w || 20
75
+ d.append('div')
76
+ .style('display', 'inline')
77
+
78
+ .append('svg')
79
+ .attr('width', w + 2 * sw)
80
+ .attr('height', h + 2 * sw)
81
+
82
+ .append('rect')
83
+ .attr('x', sw)
84
+ .attr('y', sw)
85
+ .attr('width', w)
86
+ .attr('height', h)
87
+ .style('fill', cat[0])
88
+ .style('stroke', this.strokeColor)
89
+ .style('stroke-width', this.strokeWidth)
90
+ } else if (this.shape === 'circle') {
91
+ const r = this.dimension.r || 8
92
+ const h = 2 * r + 2 * sw
93
+ d.append('div')
94
+ .style('display', 'inline')
95
+
96
+ .append('svg')
97
+ .attr('width', h)
98
+ .attr('height', h)
99
+
100
+ .append('circle')
101
+ .attr('cx', r + sw)
102
+ .attr('cy', r + sw)
103
+ .attr('r', r)
104
+ .style('fill', cat[0])
105
+ .style('stroke', this.strokeColor)
106
+ .style('stroke-width', this.strokeWidth)
107
+ } else {
108
+ throw new Error('Unexpected shape:' + this.shape)
109
+ }
110
+
111
+ //write label text
112
+ d.append('div')
113
+ //show on right of graphic
114
+ .style('display', 'inline')
115
+
116
+ //center vertically
117
+ //.style("position", "absolute").style("top", "0").style("bottom", "0")
118
+
119
+ .style('padding-left', '5px')
120
+ .style('font-size', this.labelFontSize)
121
+ .text(cat[1])
122
+ }
123
+ }
124
+ }
@@ -1,103 +1,103 @@
1
- //@ts-check
2
- 'use strict'
3
-
4
- import { Legend } from '../Legend.js'
5
-
6
- /**
7
- * A legend element for discrete color style.
8
- * Inspiration: https://observablehq.com/@d3/color-legend
9
- *
10
- * @author Julien Gaffuri
11
- */
12
- export class ColorDiscreteLegend extends Legend {
13
- /** @param {Object} opts */
14
- constructor(opts) {
15
- super(opts)
16
- opts = opts || {}
17
-
18
- /** @private @type {Array.<Array.<string>>} */
19
- this.colors = opts.colors
20
- /** @private @type {Array.<Array.<string>>} */
21
- this.breaksText = opts.breaksText
22
-
23
- this.width = opts.width || 300
24
- this.height = opts.height || 15
25
-
26
- this.title = opts.title
27
- this.titleFontSize = opts.titleFontSize || '0.8em'
28
- this.titleFontWeight = opts.titleFontWeight || 'bold'
29
-
30
- this.tickSize = opts.tickSize || 3
31
-
32
- //label
33
- this.labelFontSize = opts.labelFontSize || '0.8em'
34
- this.invert = opts.invert
35
- }
36
-
37
- /**
38
- * @param {{ style: import("../Style").Style, r: number, zf: number, sSize: import("../Style").Stat, sColor: import("../Style").Stat }} opts
39
- */
40
- update(opts) {
41
- //clear
42
- this.div.selectAll('*').remove()
43
-
44
- //build
45
-
46
- //title
47
- if (this.title)
48
- this.div
49
- .append('div')
50
- .style('font-size', this.titleFontSize)
51
- .style('font-weight', this.titleFontWeight)
52
- .style('margin-bottom', '7px')
53
- .text(this.title)
54
-
55
- //classes
56
- const nb = this.colors.length
57
- if (nb == 0) return
58
- const w = this.width / nb
59
-
60
- //make svg element
61
- const svg = this.div
62
- .append('svg')
63
- .attr('width', this.width)
64
- .attr('height', this.height + this.tickSize + 2 + 10)
65
-
66
- //draw graphic elements
67
- for (let i = 0; i < nb; i++) {
68
- svg.append('rect')
69
- .attr('x', i * w)
70
- .attr('y', 0)
71
- .attr('width', w)
72
- .attr('height', this.height)
73
- .style('fill', this.colors[i])
74
- }
75
-
76
- //tick line
77
- for (let i = 1; i < nb; i++) {
78
- svg.append('line')
79
- .attr('x1', w * i)
80
- .attr('y1', 0)
81
- .attr('x2', w * i)
82
- .attr('y2', this.height + this.tickSize)
83
- .style('stroke', 'black')
84
- }
85
-
86
- //labels
87
- for (let i = 1; i < nb; i++) {
88
- //prepare label
89
- svg.append('text')
90
- .attr('id', 'ticklabel_' + i)
91
- .attr('x', w * i)
92
- .attr('y', this.height + this.tickSize + 2)
93
- .style('font-size', this.labelFontSize)
94
- //.style("font-weight", "bold")
95
- //.style("font-family", "Arial")
96
- .style('text-anchor', i == 0 ? 'start' : i == this.ticks - 1 ? 'end' : 'middle')
97
- .style('alignment-baseline', 'top')
98
- .style('dominant-baseline', 'hanging')
99
- .style('pointer-events', 'none')
100
- .text(this.breaksText[i - 1])
101
- }
102
- }
103
- }
1
+ //@ts-check
2
+ 'use strict'
3
+
4
+ import { Legend } from '../Legend.js'
5
+
6
+ /**
7
+ * A legend element for discrete color style.
8
+ * Inspiration: https://observablehq.com/@d3/color-legend
9
+ *
10
+ * @author Julien Gaffuri
11
+ */
12
+ export class ColorDiscreteLegend extends Legend {
13
+ /** @param {Object} opts */
14
+ constructor(opts) {
15
+ super(opts)
16
+ opts = opts || {}
17
+
18
+ /** @private @type {Array.<Array.<string>>} */
19
+ this.colors = opts.colors
20
+ /** @private @type {Array.<Array.<string>>} */
21
+ this.breaksText = opts.breaksText
22
+
23
+ this.width = opts.width || 300
24
+ this.height = opts.height || 15
25
+
26
+ this.title = opts.title
27
+ this.titleFontSize = opts.titleFontSize || '0.8em'
28
+ this.titleFontWeight = opts.titleFontWeight || 'bold'
29
+
30
+ this.tickSize = opts.tickSize || 3
31
+
32
+ //label
33
+ this.labelFontSize = opts.labelFontSize || '0.8em'
34
+ this.invert = opts.invert
35
+ }
36
+
37
+ /**
38
+ * @param {{ style: import("../Style").Style, r: number, zf: number, sSize: import("../Style").Stat, sColor: import("../Style").Stat }} opts
39
+ */
40
+ update(opts) {
41
+ //clear
42
+ this.div.selectAll('*').remove()
43
+
44
+ //build
45
+
46
+ //title
47
+ if (this.title)
48
+ this.div
49
+ .append('div')
50
+ .style('font-size', this.titleFontSize)
51
+ .style('font-weight', this.titleFontWeight)
52
+ .style('margin-bottom', '7px')
53
+ .text(this.title)
54
+
55
+ //classes
56
+ const nb = this.colors.length
57
+ if (nb == 0) return
58
+ const w = this.width / nb
59
+
60
+ //make svg element
61
+ const svg = this.div
62
+ .append('svg')
63
+ .attr('width', this.width)
64
+ .attr('height', this.height + this.tickSize + 2 + 10)
65
+
66
+ //draw graphic elements
67
+ for (let i = 0; i < nb; i++) {
68
+ svg.append('rect')
69
+ .attr('x', i * w)
70
+ .attr('y', 0)
71
+ .attr('width', w)
72
+ .attr('height', this.height)
73
+ .style('fill', this.colors[i])
74
+ }
75
+
76
+ //tick line
77
+ for (let i = 1; i < nb; i++) {
78
+ svg.append('line')
79
+ .attr('x1', w * i)
80
+ .attr('y1', 0)
81
+ .attr('x2', w * i)
82
+ .attr('y2', this.height + this.tickSize)
83
+ .style('stroke', 'black')
84
+ }
85
+
86
+ //labels
87
+ for (let i = 1; i < nb; i++) {
88
+ //prepare label
89
+ svg.append('text')
90
+ .attr('id', 'ticklabel_' + i)
91
+ .attr('x', w * i)
92
+ .attr('y', this.height + this.tickSize + 2)
93
+ .style('font-size', this.labelFontSize)
94
+ //.style("font-weight", "bold")
95
+ //.style("font-family", "Arial")
96
+ .style('text-anchor', i == 0 ? 'start' : i == this.ticks - 1 ? 'end' : 'middle')
97
+ .style('alignment-baseline', 'top')
98
+ .style('dominant-baseline', 'hanging')
99
+ .style('pointer-events', 'none')
100
+ .text(this.breaksText[i - 1])
101
+ }
102
+ }
103
+ }