From db1835137dc4c29ed5c6fb0e7ca85e85239dbde2 Mon Sep 17 00:00:00 2001 From: lee00678 Date: Tue, 7 May 2024 15:09:29 -0700 Subject: [PATCH 1/2] Website | Gallery: Add new section for composite chart --- .../_previews/dual-axis-chart-dark.png | Bin 0 -> 28388 bytes .../examples/_previews/dual-axis-chart.png | Bin 0 -> 27187 bytes .../shared/examples/dual-axis-chart/data.ts | 15 ++++ .../dual-axis-chart.component.html | 11 +++ .../dual-axis-chart.component.ts | 29 ++++++++ .../dual-axis-chart/dual-axis-chart.module.ts | 11 +++ .../dual-axis-chart/dual-axis-chart.svelte | 65 ++++++++++++++++++ .../dual-axis-chart/dual-axis-chart.ts | 59 ++++++++++++++++ .../dual-axis-chart/dual-axis-chart.tsx | 47 +++++++++++++ .../dual-axis-chart/dual-axis-chart.vue | 51 ++++++++++++++ .../shared/examples/dual-axis-chart/index.tsx | 32 +++++++++ .../examples/dual-axis-chart/styles.css | 7 ++ packages/shared/examples/examples-list.tsx | 7 ++ .../svelte/src-demo/svelte-gallery.svelte | 1 + packages/vue/src-demo/App.vue | 1 + 15 files changed, 336 insertions(+) create mode 100644 packages/shared/examples/_previews/dual-axis-chart-dark.png create mode 100644 packages/shared/examples/_previews/dual-axis-chart.png create mode 100644 packages/shared/examples/dual-axis-chart/data.ts create mode 100644 packages/shared/examples/dual-axis-chart/dual-axis-chart.component.html create mode 100644 packages/shared/examples/dual-axis-chart/dual-axis-chart.component.ts create mode 100644 packages/shared/examples/dual-axis-chart/dual-axis-chart.module.ts create mode 100644 packages/shared/examples/dual-axis-chart/dual-axis-chart.svelte create mode 100644 packages/shared/examples/dual-axis-chart/dual-axis-chart.ts create mode 100644 packages/shared/examples/dual-axis-chart/dual-axis-chart.tsx create mode 100644 packages/shared/examples/dual-axis-chart/dual-axis-chart.vue create mode 100644 packages/shared/examples/dual-axis-chart/index.tsx create mode 100644 packages/shared/examples/dual-axis-chart/styles.css diff --git a/packages/shared/examples/_previews/dual-axis-chart-dark.png b/packages/shared/examples/_previews/dual-axis-chart-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..61215b2c6da3b30bc521a2c95ccddb0c024df7ea GIT binary patch literal 28388 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 bZ*hBC`Dd_@#4ATi_j3yGKgg86HSqsmwd6me literal 0 HcmV?d00001 diff --git a/packages/shared/examples/dual-axis-chart/data.ts b/packages/shared/examples/dual-axis-chart/data.ts new file mode 100644 index 000000000..c2c097b98 --- /dev/null +++ b/packages/shared/examples/dual-axis-chart/data.ts @@ -0,0 +1,15 @@ +export type XYDataRecord = { + x: number; + y: number | undefined; + y1?: number; + y2?: number; +} + +export function generateXYDataRecords (n = 10): XYDataRecord[] { + return Array(n).fill(0).map((_, i) => ({ + x: i, + y: 5 + 5 * Math.random(), + y1: 1 + 3 * Math.random(), + y2: 2 * Math.random(), + })) +} diff --git a/packages/shared/examples/dual-axis-chart/dual-axis-chart.component.html b/packages/shared/examples/dual-axis-chart/dual-axis-chart.component.html new file mode 100644 index 000000000..abe8fcb68 --- /dev/null +++ b/packages/shared/examples/dual-axis-chart/dual-axis-chart.component.html @@ -0,0 +1,11 @@ + + + + + + diff --git a/packages/shared/examples/dual-axis-chart/dual-axis-chart.component.ts b/packages/shared/examples/dual-axis-chart/dual-axis-chart.component.ts new file mode 100644 index 000000000..8916133aa --- /dev/null +++ b/packages/shared/examples/dual-axis-chart/dual-axis-chart.component.ts @@ -0,0 +1,29 @@ +import { Component } from '@angular/core' +import { CurveType } from '@unovis/ts' +import { data, categories, Category, DataRecord } from './data' + +@Component({ + selector: 'dual-axis-chart', + templateUrl: './dual-axis-chart.component.html', +}) +export class DualAxisChartComponent { + data = data + legendItems = categories + sums = data.map(d => d.art.reduce((t, i) => t + i, 0)) + max: number = Math.max(...this.sums) + + // Area + x = (d: DataRecord): number => d.year + y = categories.map((c: Category) => d => d.art[c.id]) + color = categories.map((c: Category): string => c.color) + baseline = (_: DataRecord, i: number): number => (this.max - this.sums[i]) / 2 + curveType = CurveType.Basis + + // Y Axis + tickValues = Array(Math.round(this.max / 1000)).fill(0).map((_, i) => { + const dir = i % 2 === 1 ? -(i - 1) : i + return this.max / 2 + dir * 1000 + }) + + tickFormat = (i: number): string => `${Math.abs(i - this.max / 2)}` +} diff --git a/packages/shared/examples/dual-axis-chart/dual-axis-chart.module.ts b/packages/shared/examples/dual-axis-chart/dual-axis-chart.module.ts new file mode 100644 index 000000000..2ef635924 --- /dev/null +++ b/packages/shared/examples/dual-axis-chart/dual-axis-chart.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core' +import { VisXYContainerModule, VisAxisModule, VisBulletLegendModule, VisAreaModule } from '@unovis/angular' + +import { DualAxisChartComponent } from './dual-axis-chart.component' + +@NgModule({ + imports: [VisXYContainerModule, VisAreaModule, VisAxisModule, VisBulletLegendModule], + declarations: [DualAxisChartComponent], + exports: [DualAxisChartComponent], +}) +export class DualAxisChartModule { } diff --git a/packages/shared/examples/dual-axis-chart/dual-axis-chart.svelte b/packages/shared/examples/dual-axis-chart/dual-axis-chart.svelte new file mode 100644 index 000000000..29dd8f4c5 --- /dev/null +++ b/packages/shared/examples/dual-axis-chart/dual-axis-chart.svelte @@ -0,0 +1,65 @@ + + +
+ + + + + + + + + +
+ + diff --git a/packages/shared/examples/dual-axis-chart/dual-axis-chart.ts b/packages/shared/examples/dual-axis-chart/dual-axis-chart.ts new file mode 100644 index 000000000..4fe95c7c9 --- /dev/null +++ b/packages/shared/examples/dual-axis-chart/dual-axis-chart.ts @@ -0,0 +1,59 @@ +import { XYContainer, Area, Line, Axis } from '@unovis/ts' +import { XYDataRecord, generateXYDataRecords } from './data' +import './styles.css' + +const container = document.getElementById('vis-container') +const chartAContainer = document.createElement('div') +container.appendChild(chartAContainer) + +const chartBContainer = document.createElement('div') +chartBContainer.className = 'chartContainer' +container.appendChild(chartBContainer) + +const margin = { left: 100, right: 100, top: 40, bottom: 60 } + +// Area +const area = new Area({ + x: (d: XYDataRecord) => d.x, + y: (d: XYDataRecord, i: number) => i * (d.y || 0), + opacity: 0.9, + color: '#FF6B7E', +}) + +const line = new Line({ + x: (d: XYDataRecord) => d.x, + y: (d: XYDataRecord, i: number) => 20 + 10 * (d.y2 || 0), +}) + +// Container +const chartA = new XYContainer(chartAContainer, { + height: '40vh', + width: '100%', + position: 'absolute', + components: [area], + margin: margin, + autoMargin: false, + xAxis: new Axis({ label: 'Time' }), + yAxis: new Axis({ + label: 'Traffic', + tickFormat: (y: number) => `${y}bps`, + tickTextWidth: 60, + tickTextColor: '#FF6B7E', + labelColor: '#FF6B7E', + }), +}, generateXYDataRecords(150)) + +const chartB = new XYContainer(chartBContainer, { + components: [line], + yDomain: [0, 150], + margin: margin, + autoMargin: false, + yAxis: new Axis({ + position: 'right', + tickFormat: (y: number) => `${y}db`, + gridLine: false, + tickTextColor: '#4D8CFD', + labelColor: '#4D8CFD', + label: 'Signal Strength', + }), +}, generateXYDataRecords(150)) diff --git a/packages/shared/examples/dual-axis-chart/dual-axis-chart.tsx b/packages/shared/examples/dual-axis-chart/dual-axis-chart.tsx new file mode 100644 index 000000000..cbb109db2 --- /dev/null +++ b/packages/shared/examples/dual-axis-chart/dual-axis-chart.tsx @@ -0,0 +1,47 @@ +import React from 'react' +import { VisXYContainer, VisArea, VisLine, VisAxis } from '@unovis/react' + +import { XYDataRecord, generateXYDataRecords } from './data' + +export default function component (): JSX.Element { + const margin = { left: 100, right: 100, top: 40, bottom: 60 } + const style: React.CSSProperties = { position: 'absolute', top: 0, left: 0, width: '100%', height: '40vh' } + return (<> + + x={d => d.x} y={(d: XYDataRecord, i: number) => i * (d.y || 0)} opacity={0.9} color='#FF6B7E'/> + `${x}ms`} label='Time'/> + `${y}bps`} + tickTextWidth={60} + tickTextColor='#FF6B7E' + labelColor='#FF6B7E' + label='Traffic' + /> + + + x={d => d.x} y={d => 20 + 10 * (d.y2 || 0)}/> + `${y}db`} + gridLine={false} + tickTextColor='#4D8CFD' + labelColor='#4D8CFD' + label='Signal Strength' + /> + + + ) +} diff --git a/packages/shared/examples/dual-axis-chart/dual-axis-chart.vue b/packages/shared/examples/dual-axis-chart/dual-axis-chart.vue new file mode 100644 index 000000000..e41bb0eac --- /dev/null +++ b/packages/shared/examples/dual-axis-chart/dual-axis-chart.vue @@ -0,0 +1,51 @@ + + + diff --git a/packages/shared/examples/dual-axis-chart/index.tsx b/packages/shared/examples/dual-axis-chart/index.tsx new file mode 100644 index 000000000..6d190cb06 --- /dev/null +++ b/packages/shared/examples/dual-axis-chart/index.tsx @@ -0,0 +1,32 @@ +/* eslint-disable import/no-unresolved, import/no-webpack-loader-syntax, @typescript-eslint/no-var-requires */ +import React from 'react' +import type { Example } from '../types' + +const pathname = 'dual-axis-chart' +const example: Example = { + component: () => { + // eslint-disable-next-line @typescript-eslint/naming-convention + const Component = require(`./${pathname}.tsx`).default + return + }, + pathname, + title: 'Dual Axis Chart', + description:
+ Randomly Generated Data +
*This example shows how to create dual axis chart by overlapping two charts
+
, + codeReact: require(`!!raw-loader!./${pathname}.tsx`).default, + codeTs: require(`!!raw-loader!./${pathname}.ts`).default, + codeAngular: { + html: require(`!!raw-loader!./${pathname}.component.html`).default, + component: require(`!!raw-loader!./${pathname}.component.ts`).default, + module: require(`!!raw-loader!./${pathname}.module.ts`).default, + }, + codeSvelte: require(`!!raw-loader!./${pathname}.svelte`).default, + codeVue: require(`!!raw-loader!./${pathname}.vue`).default, + data: require('!!raw-loader!./data').default, + preview: require(`../_previews/${pathname}.png`).default, + previewDark: require(`../_previews/${pathname}-dark.png`).default, +} + +export default example diff --git a/packages/shared/examples/dual-axis-chart/styles.css b/packages/shared/examples/dual-axis-chart/styles.css new file mode 100644 index 000000000..e7dd4b020 --- /dev/null +++ b/packages/shared/examples/dual-axis-chart/styles.css @@ -0,0 +1,7 @@ +.chartContainer { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 40vh; +} diff --git a/packages/shared/examples/examples-list.tsx b/packages/shared/examples/examples-list.tsx index 3c1a21a79..cf380f3a1 100644 --- a/packages/shared/examples/examples-list.tsx +++ b/packages/shared/examples/examples-list.tsx @@ -75,6 +75,13 @@ export const examples: ExampleCollection[] = [ require('./sunburst-nested-donut').default, ], }, + { + title: 'Composite Charts', + description: '', + examples: [ + require('./dual-axis-chart').default, + ], + }, { title: 'Auxiliary Components', description: 'Annotations, Brushes, Tooltips and more', diff --git a/packages/svelte/src-demo/svelte-gallery.svelte b/packages/svelte/src-demo/svelte-gallery.svelte index bfba47781..f15683a2e 100644 --- a/packages/svelte/src-demo/svelte-gallery.svelte +++ b/packages/svelte/src-demo/svelte-gallery.svelte @@ -1,5 +1,6 @@