@carbon/charts 1.2.1 → 1.3.0
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.
- package/CHANGELOG.md +11 -0
- package/build/demo/data/bar.d.ts +46 -0
- package/build/demo/data/zoom-bar.d.ts +6 -0
- package/build/src/components/graphs/bar-grouped.d.ts +2 -0
- package/bundle.js +1 -1
- package/components/graphs/bar-grouped.d.ts +2 -0
- package/components/graphs/bar-grouped.js +28 -8
- package/components/graphs/bar-grouped.js.map +1 -1
- package/demo/data/bar.d.ts +46 -0
- package/demo/data/bar.js +111 -0
- package/demo/data/bar.js.map +1 -1
- package/demo/data/bundle.js +1 -1
- package/demo/data/index.js +20 -0
- package/demo/data/index.js.map +1 -1
- package/demo/data/zoom-bar.d.ts +6 -0
- package/demo/data/zoom-bar.js +2 -0
- package/demo/data/zoom-bar.js.map +1 -1
- package/demo/tsconfig.tsbuildinfo +5 -5
- package/package.json +1 -1
- package/tsconfig.tsbuildinfo +2 -2
|
@@ -6,6 +6,7 @@ export declare class GroupedBar extends Bar {
|
|
|
6
6
|
renderType: RenderTypes;
|
|
7
7
|
groupScale: ScaleBand<any>;
|
|
8
8
|
padding: number;
|
|
9
|
+
readonly defaultStepFactor = 70;
|
|
9
10
|
init(): void;
|
|
10
11
|
render(animate: boolean): void;
|
|
11
12
|
handleLegendOnHover: (event: CustomEvent<any>) => void;
|
|
@@ -14,6 +15,7 @@ export declare class GroupedBar extends Bar {
|
|
|
14
15
|
destroy(): void;
|
|
15
16
|
protected getDataCorrespondingToLabel(label: string): any;
|
|
16
17
|
protected getGroupWidth(): number;
|
|
18
|
+
protected getDomainScaleStep(): number;
|
|
17
19
|
protected getTotalGroupPadding(): number;
|
|
18
20
|
protected getBarWidth(): any;
|
|
19
21
|
protected setGroupScale(): void;
|
|
@@ -25,6 +25,8 @@ var GroupedBar = /** @class */ (function (_super) {
|
|
|
25
25
|
_this.type = 'grouped-bar';
|
|
26
26
|
_this.renderType = RenderTypes.SVG;
|
|
27
27
|
_this.padding = 5;
|
|
28
|
+
// A factor to normalize padding between bars regardless of bar group density.
|
|
29
|
+
_this.defaultStepFactor = 70;
|
|
28
30
|
// Highlight elements that match the hovered legend item
|
|
29
31
|
_this.handleLegendOnHover = function (event) {
|
|
30
32
|
var hoveredElement = event.detail.hoveredElement;
|
|
@@ -144,7 +146,7 @@ var GroupedBar = /** @class */ (function (_super) {
|
|
|
144
146
|
});
|
|
145
147
|
})
|
|
146
148
|
.style('fill', function (d) { return _this.model.getFillColor(d[groupMapsTo]); })
|
|
147
|
-
.attr('d', function (d) {
|
|
149
|
+
.attr('d', function (d, i) {
|
|
148
150
|
/*
|
|
149
151
|
* Orientation support for horizontal/vertical bar charts
|
|
150
152
|
* Determine coordinates needed for a vertical set of paths
|
|
@@ -158,8 +160,11 @@ var GroupedBar = /** @class */ (function (_super) {
|
|
|
158
160
|
var rangeAxis = _this.services.cartesianScales.getRangeAxisPosition({ datum: d });
|
|
159
161
|
var y0 = _this.services.cartesianScales.getValueThroughAxisPosition(rangeAxis, 0);
|
|
160
162
|
var y1 = _this.services.cartesianScales.getRangeValue(d);
|
|
161
|
-
// don't show if part of bar is out of zoom domain
|
|
162
|
-
|
|
163
|
+
// don't show if part of bar is out of zoom domain - test zoom on bar pos, not group
|
|
164
|
+
var zoomx0 = _this.services.cartesianScales.getDomainValue(d, i) -
|
|
165
|
+
barWidth / 2;
|
|
166
|
+
var zoomx1 = zoomx0 + barWidth;
|
|
167
|
+
if (_this.isOutsideZoomedDomain(zoomx0, zoomx1)) {
|
|
163
168
|
return;
|
|
164
169
|
}
|
|
165
170
|
return Tools.generateSVGPathString({ x0: x0, x1: x1, y0: y0, y1: y1 }, _this.services.cartesianScales.getOrientation());
|
|
@@ -244,7 +249,7 @@ var GroupedBar = /** @class */ (function (_super) {
|
|
|
244
249
|
var displayData = this.model.getDisplayData(this.configs.groups);
|
|
245
250
|
return displayData.filter(function (datum) {
|
|
246
251
|
var domainIdentifier = _this.services.cartesianScales.getDomainIdentifier(datum);
|
|
247
|
-
return datum[domainIdentifier] === label;
|
|
252
|
+
return datum[domainIdentifier].toString() === label;
|
|
248
253
|
});
|
|
249
254
|
};
|
|
250
255
|
GroupedBar.prototype.getGroupWidth = function () {
|
|
@@ -252,13 +257,29 @@ var GroupedBar = /** @class */ (function (_super) {
|
|
|
252
257
|
var totalGroupPadding = this.getTotalGroupPadding();
|
|
253
258
|
return this.getBarWidth() * activeData.length + totalGroupPadding;
|
|
254
259
|
};
|
|
260
|
+
GroupedBar.prototype.getDomainScaleStep = function () {
|
|
261
|
+
var domainScale = this.services.cartesianScales.getDomainScale();
|
|
262
|
+
var activeData = this.model.getGroupedData(this.configs.groups);
|
|
263
|
+
var step = this.defaultStepFactor;
|
|
264
|
+
if (typeof domainScale.step === 'function') {
|
|
265
|
+
step = domainScale.step();
|
|
266
|
+
}
|
|
267
|
+
else if (activeData.length > 0) {
|
|
268
|
+
// as a fallback use distance between first bars of adjacent bar groups
|
|
269
|
+
var ref = activeData.find(function (d) { var _a; return ((_a = d.data) === null || _a === void 0 ? void 0 : _a.length) > 1; });
|
|
270
|
+
if (ref) {
|
|
271
|
+
var domainIdentifier = this.services.cartesianScales.getDomainIdentifier(ref.data[0]);
|
|
272
|
+
step = Math.abs(domainScale(ref.data[1][domainIdentifier]) - domainScale(ref.data[0][domainIdentifier]));
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
return step;
|
|
276
|
+
};
|
|
255
277
|
GroupedBar.prototype.getTotalGroupPadding = function () {
|
|
256
278
|
var activeData = this.model.getGroupedData(this.configs.groups);
|
|
257
279
|
if (activeData.length === 1) {
|
|
258
280
|
return 0;
|
|
259
281
|
}
|
|
260
|
-
var
|
|
261
|
-
var padding = Math.min(5, 5 * (domainScale.step() / 70));
|
|
282
|
+
var padding = Math.min(5, 5 * (this.getDomainScaleStep() / this.defaultStepFactor));
|
|
262
283
|
return padding * (activeData.length - 1);
|
|
263
284
|
};
|
|
264
285
|
// Gets the correct width for bars based on options & configurations
|
|
@@ -277,8 +298,7 @@ var GroupedBar = /** @class */ (function (_super) {
|
|
|
277
298
|
var activeData = this.model.getGroupedData(this.configs.groups);
|
|
278
299
|
var numOfActiveDataGroups = activeData.length;
|
|
279
300
|
var totalGroupPadding = this.getTotalGroupPadding();
|
|
280
|
-
|
|
281
|
-
return Math.min(providedMaxWidth, (domainScale.step() - totalGroupPadding) / numOfActiveDataGroups);
|
|
301
|
+
return Math.min(providedMaxWidth, (this.getDomainScaleStep() - totalGroupPadding) / numOfActiveDataGroups);
|
|
282
302
|
};
|
|
283
303
|
GroupedBar.prototype.setGroupScale = function () {
|
|
284
304
|
var activeData = this.model.getActiveDataGroupNames(this.configs.groups);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bar-grouped.js","sourceRoot":"","sources":["bar-grouped.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Bar } from './bar';\nimport { Tools } from '../../tools';\nimport {\n\tCartesianOrientations,\n\tColorClassNameTypes,\n\tEvents,\n\tRenderTypes,\n\tRoles,\n} from '../../interfaces';\n\n// D3 Imports\nimport { select } from 'd3-selection';\nimport { ScaleBand, scaleBand } from 'd3-scale';\n\nexport class GroupedBar extends Bar {\n\ttype = 'grouped-bar';\n\trenderType = RenderTypes.SVG;\n\n\tgroupScale: ScaleBand<any>;\n\n\tpadding = 5;\n\n\tinit() {\n\t\tconst eventsFragment = this.services.events;\n\n\t\t// Highlight correct circle on legend item hovers\n\t\teventsFragment.addEventListener(\n\t\t\tEvents.Legend.ITEM_HOVER,\n\t\t\tthis.handleLegendOnHover\n\t\t);\n\n\t\t// Un-highlight circles on legend item mouseouts\n\t\teventsFragment.addEventListener(\n\t\t\tEvents.Legend.ITEM_MOUSEOUT,\n\t\t\tthis.handleLegendMouseOut\n\t\t);\n\t}\n\n\trender(animate: boolean) {\n\t\t// Chart options mixed with the internal configurations\n\t\tconst displayData = this.model.getDisplayData(this.configs.groups);\n\t\tconst options = this.getOptions();\n\t\tconst { groupMapsTo } = options.data;\n\n\t\t// Get unique labels\n\t\tthis.setGroupScale();\n\n\t\t// Grab container SVG\n\t\tconst svg = this.getComponentContainer({ withinChartClip: true });\n\n\t\tconst allDataLabels = Tools.removeArrayDuplicates(\n\t\t\tdisplayData.map((datum) => {\n\t\t\t\tconst domainIdentifier = this.services.cartesianScales.getDomainIdentifier(\n\t\t\t\t\tdatum\n\t\t\t\t);\n\n\t\t\t\treturn datum[domainIdentifier] &&\n\t\t\t\t\ttypeof datum[domainIdentifier].toString === 'function'\n\t\t\t\t\t? datum[domainIdentifier].toString()\n\t\t\t\t\t: datum[domainIdentifier];\n\t\t\t})\n\t\t);\n\n\t\t// Update data on bar groups\n\t\tconst barGroups = svg\n\t\t\t.selectAll('g.bars')\n\t\t\t.data(allDataLabels, (label) => label);\n\n\t\t// Remove dot groups that need to be removed\n\t\tbarGroups.exit().attr('opacity', 0).remove();\n\n\t\t// Add the bar groups that need to be introduced\n\t\tconst barGroupsEnter = barGroups\n\t\t\t.enter()\n\t\t\t.append('g')\n\t\t\t.classed('bars', true)\n\t\t\t.attr('role', Roles.GROUP)\n\t\t\t.attr('data-name', 'bars');\n\n\t\t// Update data on all bars\n\t\tconst allBarGroups = barGroupsEnter.merge(barGroups);\n\n\t\tallBarGroups\n\t\t\t// Transition\n\t\t\t.transition()\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'bar-group-update-enter',\n\t\t\t\t\tanimate,\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('transform', (label, i) => {\n\t\t\t\tconst scaleValue = this.services.cartesianScales.getDomainValue(\n\t\t\t\t\tlabel,\n\t\t\t\t\ti\n\t\t\t\t);\n\t\t\t\tconst translateBy = scaleValue - this.getGroupWidth() / 2;\n\t\t\t\t// const translateBy = scaleValue - this.getGroupWidth(null) / 2 + this.getBarWidth(null);\n\n\t\t\t\tif (\n\t\t\t\t\tthis.services.cartesianScales.getOrientation() ===\n\t\t\t\t\tCartesianOrientations.VERTICAL\n\t\t\t\t) {\n\t\t\t\t\treturn `translate(${translateBy}, 0)`;\n\t\t\t\t} else {\n\t\t\t\t\t// translate in the y direction for horizontal groups\n\t\t\t\t\treturn `translate(0, ${translateBy})`;\n\t\t\t\t}\n\t\t\t});\n\n\t\tconst bars = allBarGroups.selectAll('path.bar').data(\n\t\t\t(label) => this.getDataCorrespondingToLabel(label),\n\t\t\t(d) => d[groupMapsTo]\n\t\t);\n\n\t\t// Remove bars that are no longer needed\n\t\tbars.exit().attr('opacity', 0).remove();\n\n\t\t// Add the bars that need to be introduced\n\t\tconst barsEnter = bars.enter().append('path').attr('opacity', 0);\n\n\t\t// code for vertical grouped bar charts\n\t\tbarsEnter\n\t\t\t.merge(bars)\n\t\t\t.classed('bar', true)\n\t\t\t.transition()\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'bar-update-enter',\n\t\t\t\t\tanimate,\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('class', (d) =>\n\t\t\t\tthis.model.getColorClassName({\n\t\t\t\t\tclassNameTypes: [ColorClassNameTypes.FILL],\n\t\t\t\t\tdataGroupName: d[groupMapsTo],\n\t\t\t\t\toriginalClassName: 'bar',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.style('fill', (d) => this.model.getFillColor(d[groupMapsTo]))\n\t\t\t.attr('d', (d) => {\n\t\t\t\t/*\n\t\t\t\t * Orientation support for horizontal/vertical bar charts\n\t\t\t\t * Determine coordinates needed for a vertical set of paths\n\t\t\t\t * to draw the bars needed, and pass those coordinates down to\n\t\t\t\t * generateSVGPathString() to decide whether it needs to flip them\n\t\t\t\t */\n\t\t\t\tconst startX = this.groupScale(d[groupMapsTo]);\n\t\t\t\tconst barWidth = this.getBarWidth();\n\n\t\t\t\tconst x0 = startX;\n\t\t\t\tconst x1 = startX + barWidth;\n\t\t\t\tconst rangeAxis = this.services.cartesianScales.getRangeAxisPosition(\n\t\t\t\t\t{ datum: d }\n\t\t\t\t);\n\t\t\t\tconst y0 = this.services.cartesianScales.getValueThroughAxisPosition(\n\t\t\t\t\trangeAxis,\n\t\t\t\t\t0\n\t\t\t\t);\n\t\t\t\tconst y1 = this.services.cartesianScales.getRangeValue(d);\n\n\t\t\t\t// don't show if part of bar is out of zoom domain\n\t\t\t\tif (this.isOutsideZoomedDomain(x0, x1)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn Tools.generateSVGPathString(\n\t\t\t\t\t{ x0, x1, y0, y1 },\n\t\t\t\t\tthis.services.cartesianScales.getOrientation()\n\t\t\t\t);\n\t\t\t})\n\t\t\t.attr('opacity', 1)\n\t\t\t// a11y\n\t\t\t.attr('role', Roles.GRAPHICS_SYMBOL)\n\t\t\t.attr('aria-roledescription', 'bar')\n\t\t\t.attr('aria-label', (d) => d.value);\n\n\t\t// Add event listeners to elements drawn\n\t\tthis.addEventListeners();\n\t}\n\n\t// Highlight elements that match the hovered legend item\n\thandleLegendOnHover = (event: CustomEvent) => {\n\t\tconst { hoveredElement } = event.detail;\n\n\t\tconst { groupMapsTo } = this.getOptions().data;\n\n\t\tthis.parent\n\t\t\t.selectAll('path.bar')\n\t\t\t.transition('legend-hover-bar')\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'legend-hover-bar',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('opacity', (d) =>\n\t\t\t\td[groupMapsTo] !== hoveredElement.datum()['name'] ? 0.3 : 1\n\t\t\t);\n\t};\n\n\t// Un-highlight all elements\n\thandleLegendMouseOut = (event: CustomEvent) => {\n\t\tthis.parent\n\t\t\t.selectAll('path.bar')\n\t\t\t.transition('legend-mouseout-bar')\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'legend-mouseout-bar',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('opacity', 1);\n\t};\n\n\taddEventListeners() {\n\t\tconst self = this;\n\n\t\tthis.parent\n\t\t\t.selectAll('path.bar')\n\t\t\t.on('mouseover', function (event, datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\thoveredElement.classed('hovered', true);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOVER, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\n\t\t\t\t// Show tooltip\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\tevent,\n\t\t\t\t\thoveredElement,\n\t\t\t\t\tdata: [datum],\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mousemove', function (event, datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEMOVE, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.MOVE, {\n\t\t\t\t\tevent,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('click', function (event, datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_CLICK, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mouseout', function (event, datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\thoveredElement.classed('hovered', false);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOUT, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\n\t\t\t\t// Hide tooltip\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE, {\n\t\t\t\t\thoveredElement,\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\tdestroy() {\n\t\t// Remove event listeners\n\t\tthis.parent\n\t\t\t.selectAll('path.bar')\n\t\t\t.on('mouseover', null)\n\t\t\t.on('mousemove', null)\n\t\t\t.on('mouseout', null);\n\n\t\t// Remove legend listeners\n\t\tconst eventsFragment = this.services.events;\n\t\teventsFragment.removeEventListener(\n\t\t\tEvents.Legend.ITEM_HOVER,\n\t\t\tthis.handleLegendOnHover\n\t\t);\n\t\teventsFragment.removeEventListener(\n\t\t\tEvents.Legend.ITEM_MOUSEOUT,\n\t\t\tthis.handleLegendMouseOut\n\t\t);\n\t}\n\n\tprotected getDataCorrespondingToLabel(label: string) {\n\t\tconst displayData = this.model.getDisplayData(this.configs.groups);\n\n\t\treturn displayData.filter((datum) => {\n\t\t\tconst domainIdentifier = this.services.cartesianScales.getDomainIdentifier(\n\t\t\t\tdatum\n\t\t\t);\n\t\t\treturn datum[domainIdentifier] === label;\n\t\t});\n\t}\n\n\tprotected getGroupWidth() {\n\t\tconst activeData = this.model.getGroupedData(this.configs.groups);\n\t\tconst totalGroupPadding = this.getTotalGroupPadding();\n\n\t\treturn this.getBarWidth() * activeData.length + totalGroupPadding;\n\t}\n\n\tprotected getTotalGroupPadding() {\n\t\tconst activeData = this.model.getGroupedData(this.configs.groups);\n\n\t\tif (activeData.length === 1) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst domainScale = this.services.cartesianScales.getDomainScale();\n\t\tconst padding = Math.min(5, 5 * (domainScale.step() / 70));\n\n\t\treturn padding * (activeData.length - 1);\n\t}\n\n\t// Gets the correct width for bars based on options & configurations\n\tprotected getBarWidth() {\n\t\tconst options = this.getOptions();\n\t\tconst providedWidth = Tools.getProperty(options, 'bars', 'width');\n\t\tconst providedMaxWidth = Tools.getProperty(options, 'bars', 'maxWidth');\n\n\t\t// If there's a provided width, compare with maxWidth and\n\t\t// Determine which to return\n\t\tif (providedWidth !== null) {\n\t\t\tif (\n\t\t\t\tprovidedMaxWidth === null ||\n\t\t\t\tprovidedWidth <= providedMaxWidth\n\t\t\t) {\n\t\t\t\treturn providedWidth;\n\t\t\t}\n\t\t}\n\n\t\tconst activeData = this.model.getGroupedData(this.configs.groups);\n\t\tconst numOfActiveDataGroups = activeData.length;\n\t\tconst totalGroupPadding = this.getTotalGroupPadding();\n\n\t\tconst domainScale = this.services.cartesianScales.getDomainScale();\n\t\treturn Math.min(\n\t\t\tprovidedMaxWidth,\n\t\t\t(domainScale.step() - totalGroupPadding) / numOfActiveDataGroups\n\t\t);\n\t}\n\n\tprotected setGroupScale() {\n\t\tconst activeData = this.model.getActiveDataGroupNames(\n\t\t\tthis.configs.groups\n\t\t);\n\n\t\tthis.groupScale = scaleBand()\n\t\t\t.domain(activeData)\n\t\t\t.rangeRound([0, this.getGroupWidth()]);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"bar-grouped.js","sourceRoot":"","sources":["bar-grouped.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Bar } from './bar';\nimport { Tools } from '../../tools';\nimport {\n\tCartesianOrientations,\n\tColorClassNameTypes,\n\tEvents,\n\tRenderTypes,\n\tRoles,\n} from '../../interfaces';\n\n// D3 Imports\nimport { select } from 'd3-selection';\nimport { ScaleBand, scaleBand } from 'd3-scale';\n\nexport class GroupedBar extends Bar {\n\ttype = 'grouped-bar';\n\trenderType = RenderTypes.SVG;\n\n\tgroupScale: ScaleBand<any>;\n\n\tpadding = 5;\n\n\t// A factor to normalize padding between bars regardless of bar group density.\n\treadonly defaultStepFactor = 70;\n\n\tinit() {\n\t\tconst eventsFragment = this.services.events;\n\n\t\t// Highlight correct circle on legend item hovers\n\t\teventsFragment.addEventListener(\n\t\t\tEvents.Legend.ITEM_HOVER,\n\t\t\tthis.handleLegendOnHover\n\t\t);\n\n\t\t// Un-highlight circles on legend item mouseouts\n\t\teventsFragment.addEventListener(\n\t\t\tEvents.Legend.ITEM_MOUSEOUT,\n\t\t\tthis.handleLegendMouseOut\n\t\t);\n\t}\n\n\trender(animate: boolean) {\n\t\t// Chart options mixed with the internal configurations\n\t\tconst displayData = this.model.getDisplayData(this.configs.groups);\n\t\tconst options = this.getOptions();\n\t\tconst { groupMapsTo } = options.data;\n\n\t\t// Get unique labels\n\t\tthis.setGroupScale();\n\n\t\t// Grab container SVG\n\t\tconst svg = this.getComponentContainer({ withinChartClip: true });\n\n\t\tconst allDataLabels = Tools.removeArrayDuplicates(\n\t\t\tdisplayData.map((datum) => {\n\t\t\t\tconst domainIdentifier = this.services.cartesianScales.getDomainIdentifier(\n\t\t\t\t\tdatum\n\t\t\t\t);\n\n\t\t\t\treturn datum[domainIdentifier] &&\n\t\t\t\t\ttypeof datum[domainIdentifier].toString === 'function'\n\t\t\t\t\t? datum[domainIdentifier].toString()\n\t\t\t\t\t: datum[domainIdentifier];\n\t\t\t})\n\t\t);\n\n\t\t// Update data on bar groups\n\t\tconst barGroups = svg\n\t\t\t.selectAll('g.bars')\n\t\t\t.data(allDataLabels, (label) => label);\n\n\t\t// Remove dot groups that need to be removed\n\t\tbarGroups.exit().attr('opacity', 0).remove();\n\n\t\t// Add the bar groups that need to be introduced\n\t\tconst barGroupsEnter = barGroups\n\t\t\t.enter()\n\t\t\t.append('g')\n\t\t\t.classed('bars', true)\n\t\t\t.attr('role', Roles.GROUP)\n\t\t\t.attr('data-name', 'bars');\n\n\t\t// Update data on all bars\n\t\tconst allBarGroups = barGroupsEnter.merge(barGroups);\n\n\t\tallBarGroups\n\t\t\t// Transition\n\t\t\t.transition()\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'bar-group-update-enter',\n\t\t\t\t\tanimate,\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('transform', (label, i) => {\n\t\t\t\tconst scaleValue = this.services.cartesianScales.getDomainValue(\n\t\t\t\t\tlabel,\n\t\t\t\t\ti\n\t\t\t\t);\n\t\t\t\tconst translateBy = scaleValue - this.getGroupWidth() / 2;\n\t\t\t\t// const translateBy = scaleValue - this.getGroupWidth(null) / 2 + this.getBarWidth(null);\n\n\t\t\t\tif (\n\t\t\t\t\tthis.services.cartesianScales.getOrientation() ===\n\t\t\t\t\tCartesianOrientations.VERTICAL\n\t\t\t\t) {\n\t\t\t\t\treturn `translate(${translateBy}, 0)`;\n\t\t\t\t} else {\n\t\t\t\t\t// translate in the y direction for horizontal groups\n\t\t\t\t\treturn `translate(0, ${translateBy})`;\n\t\t\t\t}\n\t\t\t});\n\n\t\tconst bars = allBarGroups.selectAll('path.bar').data(\n\t\t\t(label) => this.getDataCorrespondingToLabel(label),\n\t\t\t(d) => d[groupMapsTo]\n\t\t);\n\n\t\t// Remove bars that are no longer needed\n\t\tbars.exit().attr('opacity', 0).remove();\n\n\t\t// Add the bars that need to be introduced\n\t\tconst barsEnter = bars.enter().append('path').attr('opacity', 0);\n\n\t\t// code for vertical grouped bar charts\n\t\tbarsEnter\n\t\t\t.merge(bars)\n\t\t\t.classed('bar', true)\n\t\t\t.transition()\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'bar-update-enter',\n\t\t\t\t\tanimate,\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('class', (d) =>\n\t\t\t\tthis.model.getColorClassName({\n\t\t\t\t\tclassNameTypes: [ColorClassNameTypes.FILL],\n\t\t\t\t\tdataGroupName: d[groupMapsTo],\n\t\t\t\t\toriginalClassName: 'bar',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.style('fill', (d) => this.model.getFillColor(d[groupMapsTo]))\n\t\t\t.attr('d', (d, i) => {\n\t\t\t\t/*\n\t\t\t\t * Orientation support for horizontal/vertical bar charts\n\t\t\t\t * Determine coordinates needed for a vertical set of paths\n\t\t\t\t * to draw the bars needed, and pass those coordinates down to\n\t\t\t\t * generateSVGPathString() to decide whether it needs to flip them\n\t\t\t\t */\n\t\t\t\tconst startX = this.groupScale(d[groupMapsTo]);\n\t\t\t\tconst barWidth = this.getBarWidth();\n\n\t\t\t\tconst x0 = startX;\n\t\t\t\tconst x1 = startX + barWidth;\n\t\t\t\tconst rangeAxis = this.services.cartesianScales.getRangeAxisPosition(\n\t\t\t\t\t{ datum: d }\n\t\t\t\t);\n\t\t\t\tconst y0 = this.services.cartesianScales.getValueThroughAxisPosition(\n\t\t\t\t\trangeAxis,\n\t\t\t\t\t0\n\t\t\t\t);\n\t\t\t\tconst y1 = this.services.cartesianScales.getRangeValue(d);\n\n\t\t\t\t// don't show if part of bar is out of zoom domain - test zoom on bar pos, not group\n\t\t\t\tconst zoomx0 =\n\t\t\t\t\tthis.services.cartesianScales.getDomainValue(d, i) -\n\t\t\t\t\tbarWidth / 2;\n\t\t\t\tconst zoomx1 = zoomx0 + barWidth;\n\t\t\t\tif (this.isOutsideZoomedDomain(zoomx0, zoomx1)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn Tools.generateSVGPathString(\n\t\t\t\t\t{ x0, x1, y0, y1 },\n\t\t\t\t\tthis.services.cartesianScales.getOrientation()\n\t\t\t\t);\n\t\t\t})\n\t\t\t.attr('opacity', 1)\n\t\t\t// a11y\n\t\t\t.attr('role', Roles.GRAPHICS_SYMBOL)\n\t\t\t.attr('aria-roledescription', 'bar')\n\t\t\t.attr('aria-label', (d) => d.value);\n\n\t\t// Add event listeners to elements drawn\n\t\tthis.addEventListeners();\n\t}\n\n\t// Highlight elements that match the hovered legend item\n\thandleLegendOnHover = (event: CustomEvent) => {\n\t\tconst { hoveredElement } = event.detail;\n\n\t\tconst { groupMapsTo } = this.getOptions().data;\n\n\t\tthis.parent\n\t\t\t.selectAll('path.bar')\n\t\t\t.transition('legend-hover-bar')\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'legend-hover-bar',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('opacity', (d) =>\n\t\t\t\td[groupMapsTo] !== hoveredElement.datum()['name'] ? 0.3 : 1\n\t\t\t);\n\t};\n\n\t// Un-highlight all elements\n\thandleLegendMouseOut = (event: CustomEvent) => {\n\t\tthis.parent\n\t\t\t.selectAll('path.bar')\n\t\t\t.transition('legend-mouseout-bar')\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'legend-mouseout-bar',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('opacity', 1);\n\t};\n\n\taddEventListeners() {\n\t\tconst self = this;\n\n\t\tthis.parent\n\t\t\t.selectAll('path.bar')\n\t\t\t.on('mouseover', function (event, datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\thoveredElement.classed('hovered', true);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOVER, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\n\t\t\t\t// Show tooltip\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\tevent,\n\t\t\t\t\thoveredElement,\n\t\t\t\t\tdata: [datum],\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mousemove', function (event, datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEMOVE, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.MOVE, {\n\t\t\t\t\tevent,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('click', function (event, datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_CLICK, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mouseout', function (event, datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\thoveredElement.classed('hovered', false);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOUT, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\n\t\t\t\t// Hide tooltip\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE, {\n\t\t\t\t\thoveredElement,\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\tdestroy() {\n\t\t// Remove event listeners\n\t\tthis.parent\n\t\t\t.selectAll('path.bar')\n\t\t\t.on('mouseover', null)\n\t\t\t.on('mousemove', null)\n\t\t\t.on('mouseout', null);\n\n\t\t// Remove legend listeners\n\t\tconst eventsFragment = this.services.events;\n\t\teventsFragment.removeEventListener(\n\t\t\tEvents.Legend.ITEM_HOVER,\n\t\t\tthis.handleLegendOnHover\n\t\t);\n\t\teventsFragment.removeEventListener(\n\t\t\tEvents.Legend.ITEM_MOUSEOUT,\n\t\t\tthis.handleLegendMouseOut\n\t\t);\n\t}\n\n\tprotected getDataCorrespondingToLabel(label: string) {\n\t\tconst displayData = this.model.getDisplayData(this.configs.groups);\n\n\t\treturn displayData.filter((datum) => {\n\t\t\tconst domainIdentifier = this.services.cartesianScales.getDomainIdentifier(\n\t\t\t\tdatum\n\t\t\t);\n\t\t\treturn datum[domainIdentifier].toString() === label;\n\t\t});\n\t}\n\n\tprotected getGroupWidth() {\n\t\tconst activeData = this.model.getGroupedData(this.configs.groups);\n\t\tconst totalGroupPadding = this.getTotalGroupPadding();\n\n\t\treturn this.getBarWidth() * activeData.length + totalGroupPadding;\n\t}\n\n\tprotected getDomainScaleStep() {\n\t\tconst domainScale = this.services.cartesianScales.getDomainScale();\n\t\tconst activeData = this.model.getGroupedData(this.configs.groups);\n\n\t\tlet step = this.defaultStepFactor;\n\t\tif (typeof domainScale.step === 'function') {\n\t\t\tstep = domainScale.step();\n\t\t} else if (activeData.length > 0) {\n\t\t\t// as a fallback use distance between first bars of adjacent bar groups\n\t\t\tconst ref = activeData.find(d => d.data?.length > 1);\n\t\t\tif (ref) {\n\t\t\t\tconst domainIdentifier = this.services.cartesianScales.getDomainIdentifier(\n\t\t\t\t\tref.data[0]\n\t\t\t\t);\n\t\t\t\tstep = Math.abs(domainScale(ref.data[1][domainIdentifier]) - domainScale(ref.data[0][domainIdentifier]));\n\t\t\t}\n\t\t}\n\t\treturn step;\n\t} \n\n\tprotected getTotalGroupPadding() {\n\t\tconst activeData = this.model.getGroupedData(this.configs.groups);\n\n\t\tif (activeData.length === 1) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst padding = Math.min(5, 5 * (this.getDomainScaleStep() / this.defaultStepFactor));\n\n\t\treturn padding * (activeData.length - 1);\n\t}\n\n\t// Gets the correct width for bars based on options & configurations\n\tprotected getBarWidth() {\n\t\tconst options = this.getOptions();\n\t\tconst providedWidth = Tools.getProperty(options, 'bars', 'width');\n\t\tconst providedMaxWidth = Tools.getProperty(options, 'bars', 'maxWidth');\n\n\t\t// If there's a provided width, compare with maxWidth and\n\t\t// Determine which to return\n\t\tif (providedWidth !== null) {\n\t\t\tif (\n\t\t\t\tprovidedMaxWidth === null ||\n\t\t\t\tprovidedWidth <= providedMaxWidth\n\t\t\t) {\n\t\t\t\treturn providedWidth;\n\t\t\t}\n\t\t}\n\n\t\tconst activeData = this.model.getGroupedData(this.configs.groups);\n\t\tconst numOfActiveDataGroups = activeData.length;\n\t\tconst totalGroupPadding = this.getTotalGroupPadding();\n\n\t\treturn Math.min(\n\t\t\tprovidedMaxWidth,\n\t\t\t(this.getDomainScaleStep() - totalGroupPadding) / numOfActiveDataGroups\n\t\t);\n\t}\n\n\tprotected setGroupScale() {\n\t\tconst activeData = this.model.getActiveDataGroupNames(\n\t\t\tthis.configs.groups\n\t\t);\n\n\t\tthis.groupScale = scaleBand()\n\t\t\t.domain(activeData)\n\t\t\t.rangeRound([0, this.getGroupWidth()]);\n\t}\n}\n"]}
|
package/demo/data/bar.d.ts
CHANGED
|
@@ -3,6 +3,16 @@ export declare const groupedBarData: {
|
|
|
3
3
|
key: string;
|
|
4
4
|
value: number;
|
|
5
5
|
}[];
|
|
6
|
+
export declare const groupedBarTimeSeriesData: {
|
|
7
|
+
group: string;
|
|
8
|
+
date: Date;
|
|
9
|
+
value: number;
|
|
10
|
+
}[];
|
|
11
|
+
export declare const groupedBarTimeSeriesDenseData: {
|
|
12
|
+
group: string;
|
|
13
|
+
date: Date;
|
|
14
|
+
value: number;
|
|
15
|
+
}[];
|
|
6
16
|
export declare const groupedBarOptions: {
|
|
7
17
|
title: string;
|
|
8
18
|
axes: {
|
|
@@ -52,6 +62,42 @@ export declare const groupedHorizontalBarOptions: {
|
|
|
52
62
|
};
|
|
53
63
|
};
|
|
54
64
|
};
|
|
65
|
+
export declare const groupedBarTimeSeriesOptions: {
|
|
66
|
+
title: string;
|
|
67
|
+
axes: {
|
|
68
|
+
left: {
|
|
69
|
+
mapsTo: string;
|
|
70
|
+
};
|
|
71
|
+
bottom: {
|
|
72
|
+
mapsTo: string;
|
|
73
|
+
scaleType: string;
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
export declare const groupedBarHorizontalTimeSeriesOptions: {
|
|
78
|
+
title: string;
|
|
79
|
+
axes: {
|
|
80
|
+
left: {
|
|
81
|
+
mapsTo: string;
|
|
82
|
+
scaleType: string;
|
|
83
|
+
};
|
|
84
|
+
bottom: {
|
|
85
|
+
mapsTo: string;
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
export declare const groupedBarTimeSeriesDenseOptions: {
|
|
90
|
+
title: string;
|
|
91
|
+
axes: {
|
|
92
|
+
left: {
|
|
93
|
+
mapsTo: string;
|
|
94
|
+
};
|
|
95
|
+
bottom: {
|
|
96
|
+
mapsTo: string;
|
|
97
|
+
scaleType: string;
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
};
|
|
55
101
|
export declare const simpleBarData: {
|
|
56
102
|
group: string;
|
|
57
103
|
value: number;
|
package/demo/data/bar.js
CHANGED
|
@@ -21,6 +21,78 @@ export var groupedBarData = [
|
|
|
21
21
|
{ group: 'Dataset 4', key: 'Restocking', value: 24134 },
|
|
22
22
|
{ group: 'Dataset 4', key: 'Misc', value: 24134 },
|
|
23
23
|
];
|
|
24
|
+
export var groupedBarTimeSeriesData = [
|
|
25
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 1), value: 10000 },
|
|
26
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 2), value: 65000 },
|
|
27
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 3), value: 30000 },
|
|
28
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 6), value: 49213 },
|
|
29
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 7), value: 51213 },
|
|
30
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 1), value: 8000 },
|
|
31
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 2), value: 67000 },
|
|
32
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 3), value: 15000 },
|
|
33
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 6), value: 51213 },
|
|
34
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 7), value: 45213 },
|
|
35
|
+
];
|
|
36
|
+
export var groupedBarTimeSeriesDenseData = [
|
|
37
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 1), value: 10000 },
|
|
38
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 2), value: 65000 },
|
|
39
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 3), value: 30000 },
|
|
40
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 6), value: 49213 },
|
|
41
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 7), value: 51213 },
|
|
42
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 8), value: 51213 },
|
|
43
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 9), value: 51213 },
|
|
44
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 10), value: 51213 },
|
|
45
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 11), value: 51213 },
|
|
46
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 12), value: 51213 },
|
|
47
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 13), value: 51213 },
|
|
48
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 14), value: 51213 },
|
|
49
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 15), value: 51213 },
|
|
50
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 16), value: 51213 },
|
|
51
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 17), value: 51213 },
|
|
52
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 18), value: 51213 },
|
|
53
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 19), value: 51213 },
|
|
54
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 20), value: 51213 },
|
|
55
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 21), value: 51213 },
|
|
56
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 22), value: 51213 },
|
|
57
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 23), value: 51213 },
|
|
58
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 24), value: 51213 },
|
|
59
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 25), value: 51213 },
|
|
60
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 26), value: 51213 },
|
|
61
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 27), value: 51213 },
|
|
62
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 28), value: 51213 },
|
|
63
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 29), value: 51213 },
|
|
64
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 30), value: 51213 },
|
|
65
|
+
{ group: 'Dataset 1', date: new Date(2019, 0, 31), value: 51213 },
|
|
66
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 1), value: 8000 },
|
|
67
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 2), value: 67000 },
|
|
68
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 3), value: 15000 },
|
|
69
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 6), value: 51213 },
|
|
70
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 7), value: 45213 },
|
|
71
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 8), value: 51213 },
|
|
72
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 9), value: 51213 },
|
|
73
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 10), value: 51213 },
|
|
74
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 11), value: 51213 },
|
|
75
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 12), value: 51213 },
|
|
76
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 13), value: 51213 },
|
|
77
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 14), value: 51213 },
|
|
78
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 15), value: 51213 },
|
|
79
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 16), value: 51213 },
|
|
80
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 17), value: 51213 },
|
|
81
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 18), value: 51213 },
|
|
82
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 19), value: 51213 },
|
|
83
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 20), value: 51213 },
|
|
84
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 21), value: 51213 },
|
|
85
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 22), value: 51213 },
|
|
86
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 23), value: 51213 },
|
|
87
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 24), value: 51213 },
|
|
88
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 25), value: 51213 },
|
|
89
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 26), value: 51213 },
|
|
90
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 27), value: 51213 },
|
|
91
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 28), value: 51213 },
|
|
92
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 29), value: 51213 },
|
|
93
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 30), value: 51213 },
|
|
94
|
+
{ group: 'Dataset 2', date: new Date(2019, 0, 31), value: 51213 },
|
|
95
|
+
];
|
|
24
96
|
export var groupedBarOptions = {
|
|
25
97
|
title: 'Vertical grouped bar (discrete)',
|
|
26
98
|
axes: {
|
|
@@ -64,6 +136,45 @@ export var groupedHorizontalBarOptions = {
|
|
|
64
136
|
},
|
|
65
137
|
},
|
|
66
138
|
};
|
|
139
|
+
// Vertical Grouped Time Series
|
|
140
|
+
export var groupedBarTimeSeriesOptions = {
|
|
141
|
+
title: 'Vertical grouped bar (time series)',
|
|
142
|
+
axes: {
|
|
143
|
+
left: {
|
|
144
|
+
mapsTo: 'value',
|
|
145
|
+
},
|
|
146
|
+
bottom: {
|
|
147
|
+
mapsTo: 'date',
|
|
148
|
+
scaleType: 'time',
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
// Horizontal Grouped Time Series
|
|
153
|
+
export var groupedBarHorizontalTimeSeriesOptions = {
|
|
154
|
+
title: 'Horizontal grouped bar (time series)',
|
|
155
|
+
axes: {
|
|
156
|
+
left: {
|
|
157
|
+
mapsTo: 'date',
|
|
158
|
+
scaleType: 'time',
|
|
159
|
+
},
|
|
160
|
+
bottom: {
|
|
161
|
+
mapsTo: 'value',
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
// Vertical Grouped time series with dense data
|
|
166
|
+
export var groupedBarTimeSeriesDenseOptions = {
|
|
167
|
+
title: 'Vertical grouped bar (time series - dense data)',
|
|
168
|
+
axes: {
|
|
169
|
+
left: {
|
|
170
|
+
mapsTo: 'value',
|
|
171
|
+
},
|
|
172
|
+
bottom: {
|
|
173
|
+
mapsTo: 'date',
|
|
174
|
+
scaleType: 'time',
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
};
|
|
67
178
|
// Simple bar
|
|
68
179
|
export var simpleBarData = [
|
|
69
180
|
{ group: 'Qty', value: 65000 },
|