md-line-chart spec card
Identity · when to use / when NOT · decision cues · behavioural contract · do/don't · anti-patterns · full API. Paste into your agent when you're implementing with this component.
A trend over a continuous axis. One or many series, six curve types, category / time / value / log scales, multiple y-axes, mark lines, drag-zoom and a slider band, plus a built-in loading state. Series colours resolve to MD3 colour roles, so dark theme and brand-token overrides re-tint automatically.
<md-line-chart label="Revenue" legend="top-end"></md-line-chart>
<script type="module">
const series = [
{
label: "2024",
data: [12, 18, 14, 22, 28, 24, 30, 35, 32, 38, 42, 47]
},
{
label: "2025",
data: [16, 24, 21, 30, 38, 34, 42, 49, 47, 56, 62, 71]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
};
const yAxis = {
label: "USD (M)"
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis, yAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "2024",
data: [12, 18, 14, 22, 28, 24, 30, 35, 32, 38, 42, 47]
},
{
label: "2025",
data: [16, 24, 21, 30, 38, 34, 42, 49, 47, 56, 62, 71]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
};
const yAxis = {
label: "USD (M)"
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
yAxis={yAxis}
label="Revenue"
legend="top-end"
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
[yAxis]="yAxis"
label="Revenue"
legend="top-end"
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "2024",
data: [12, 18, 14, 22, 28, 24, 30, 35, 32, 38, 42, 47]
},
{
label: "2025",
data: [16, 24, 21, 30, 38, 34, 42, 49, 47, 56, 62, 71]
}
];
xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
};
yAxis = {
label: "USD (M)"
};
}<script setup lang="ts">
const series = [
{
label: "2024",
data: [12, 18, 14, 22, 28, 24, 30, 35, 32, 38, 42, 47]
},
{
label: "2025",
data: [16, 24, 21, 30, 38, 34, 42, 49, 47, 56, 62, 71]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
};
const yAxis = {
label: "USD (M)"
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
:yAxis="yAxis"
label="Revenue"
legend="top-end"
/>
</template><script lang="ts">
const series = [
{
label: "2024",
data: [12, 18, 14, 22, 28, 24, 30, 35, 32, 38, 42, 47]
},
{
label: "2025",
data: [16, 24, 21, 30, 38, 34, 42, 49, 47, 56, 62, 71]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
};
const yAxis = {
label: "USD (M)"
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
yAxis={yAxis}
label="Revenue"
legend="top-end"
/>
Already installed? See the
Installation guide for one-time package setup
(core + tokens, fonts). Each tab below shows two patterns for using
md-line-chart in your project: Option A registers every AWC UI
component at once (simplest), Option B imports only this component for
tree-shake-friendly bundles.
<!-- ─── Option A: global registration (all components) ─── -->
<script type="module">
import '@awc-ui/core/define';
</script>
<!-- ─── Option B: single import (tree-shake only md-line-chart) ─── -->
<script type="module">
import '@awc-ui/core/components/md-line-chart';
</script>
<md-line-chart></md-line-chart>// ─── Option A: typed React wrapper (registers all components) ───
// Importing from '@awc-ui/react' calls defineCustomElements() as a
// side effect, so every md-* element becomes available in the browser.
import { MdLineChart } from '@awc-ui/react';
export function Example() {
return <MdLineChart></MdLineChart>;
}
// ─── Option B: single import (tree-shake to only md-line-chart) ───
// Skip the wrapper and use the raw custom element. Smallest bundle,
// but you lose typed props/events on JSX.
import '@awc-ui/core/components/md-line-chart';
export function ExampleTreeShaken() {
return <md-line-chart></md-line-chart>;
}// ─── Option A: schema module (any md-* element accepted) ───
// Pair with `defineCustomElements(window)` in main.ts.
import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@Component({
standalone: true,
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
template: `<md-line-chart></md-line-chart>`,
})
export class ExampleComponent {}
// ─── Option B: typed directive (tree-shake friendly) ───
// Pair with `import '@awc-ui/core/components/md-line-chart'` in main.ts.
import { Component } from '@angular/core';
import { MdLineChart } from '@awc-ui/angular';
@Component({
standalone: true,
imports: [MdLineChart],
template: `<md-line-chart></md-line-chart>`,
})
export class ExampleTreeShakenComponent {}<!-- ─── Option A: typed Vue wrapper (registers all components) ─── -->
<script setup lang="ts">
import { MdLineChart } from '@awc-ui/vue';
</script>
<template>
<MdLineChart></MdLineChart>
</template>
<!-- ─── Option B: single import (tree-shake to only md-line-chart) ─── -->
<script setup lang="ts">
import '@awc-ui/core/components/md-line-chart';
</script>
<template>
<md-line-chart></md-line-chart>
</template><!-- ─── Option A: global registration (done once in main entry) ─── -->
<!-- main.ts: -->
<!-- import { defineCustomElements } from '@awc-ui/svelte'; -->
<!-- defineCustomElements(window); -->
<md-line-chart></md-line-chart>
<!-- ─── Option B: single import (tree-shake to only md-line-chart) ─── -->
<script lang="ts">
import '@awc-ui/core/components/md-line-chart';
</script>
<md-line-chart></md-line-chart>| Situation | Use instead |
|---|---|
| Comparing discrete categories | md-bar-chart |
| Emphasising cumulative volume | md-area-chart |
| Parts of a whole | md-pie-chart |
| An inline micro-trend in a cell | md-sparkline |
| Exact values users must read | md-table |
| Very few points (2–3) | Plain text, or a bar chart |
| Unordered categories | md-bar-chart — lines imply continuity |
| Need | Setting |
|---|---|
| Curve style | curve="linear | smooth | monotone | step | step-before | step-middle" |
| Stack the series | stack="normal | percentage | silhouette | wiggle" |
| Fill under the line | area (or use md-area-chart) |
| Points visible | show-marks |
| Bridge gaps in data | connect-nulls |
| A second scale | yAxes (array property) |
| Thresholds and dividers | markLines (array property) |
| Zoom | zoom="inside | slider | both" |
| Async data | loading (plus loading-label) |
| Swap the axes | inverted |
smooth (the default) feels MD3 Expressive. linear and monotone suit
financial and scientific precision — monotone won’t overshoot. The step
variants encode “value holds, then jumps”, which is what finance and DevOps
dashboards usually mean.
| Curve | Behaviour |
|---|---|
linear | Straight segments |
smooth | Catmull-Rom spline — default |
monotone | Monotone cubic — won’t overshoot |
step | Step-after (value holds, then jumps) |
step-before | Step-before (value jumps, then holds) |
step-middle | Step-middle (value jumps at the midpoint between points) |
<md-line-chart curve="smooth" show-marks></md-line-chart>
<script type="module">
const series = [
{
label: "value",
data: [5, 12, 8, 18, 14, 22, 28]
}
];
const xAxis = {
data: ["A", "B", "C", "D", "E", "F", "G"]
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "value",
data: [5, 12, 8, 18, 14, 22, 28]
}
];
const xAxis = {
data: ["A", "B", "C", "D", "E", "F", "G"]
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
curve="smooth"
show-marks
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
curve="smooth"
show-marks
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "value",
data: [5, 12, 8, 18, 14, 22, 28]
}
];
xAxis = {
data: ["A", "B", "C", "D", "E", "F", "G"]
};
}<script setup lang="ts">
const series = [
{
label: "value",
data: [5, 12, 8, 18, 14, 22, 28]
}
];
const xAxis = {
data: ["A", "B", "C", "D", "E", "F", "G"]
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
curve="smooth"
show-marks
/>
</template><script lang="ts">
const series = [
{
label: "value",
data: [5, 12, 8, 18, 14, 22, 28]
}
];
const xAxis = {
data: ["A", "B", "C", "D", "E", "F", "G"]
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
curve="smooth"
show-marks
/><md-line-chart curve="step" show-marks></md-line-chart>
<script type="module">
const series = [
{
label: "value",
data: [5, 12, 8, 18, 14, 22, 28]
}
];
const xAxis = {
data: ["A", "B", "C", "D", "E", "F", "G"]
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "value",
data: [5, 12, 8, 18, 14, 22, 28]
}
];
const xAxis = {
data: ["A", "B", "C", "D", "E", "F", "G"]
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
curve="step"
show-marks
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
curve="step"
show-marks
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "value",
data: [5, 12, 8, 18, 14, 22, 28]
}
];
xAxis = {
data: ["A", "B", "C", "D", "E", "F", "G"]
};
}<script setup lang="ts">
const series = [
{
label: "value",
data: [5, 12, 8, 18, 14, 22, 28]
}
];
const xAxis = {
data: ["A", "B", "C", "D", "E", "F", "G"]
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
curve="step"
show-marks
/>
</template><script lang="ts">
const series = [
{
label: "value",
data: [5, 12, 8, 18, 14, 22, 28]
}
];
const xAxis = {
data: ["A", "B", "C", "D", "E", "F", "G"]
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
curve="step"
show-marks
/>Keep the count to about five. Beyond that it becomes a plate of spaghetti — split the chart, or highlight one series and mute the rest.
<md-line-chart label="Sales by region" legend="top-end" grid="horizontal"></md-line-chart>
<script type="module">
const series = [
{
label: "EMEA",
data: [400, 320, 510, 480, 600, 690]
},
{
label: "AMER",
data: [320, 410, 380, 450, 580, 640]
},
{
label: "APAC",
data: [180, 240, 290, 320, 410, 470]
}
];
const xAxis = {
data: ["Q1", "Q2", "Q3", "Q4", "Q1", "Q2"]
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "EMEA",
data: [400, 320, 510, 480, 600, 690]
},
{
label: "AMER",
data: [320, 410, 380, 450, 580, 640]
},
{
label: "APAC",
data: [180, 240, 290, 320, 410, 470]
}
];
const xAxis = {
data: ["Q1", "Q2", "Q3", "Q4", "Q1", "Q2"]
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
label="Sales by region"
legend="top-end"
grid="horizontal"
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
label="Sales by region"
legend="top-end"
grid="horizontal"
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "EMEA",
data: [400, 320, 510, 480, 600, 690]
},
{
label: "AMER",
data: [320, 410, 380, 450, 580, 640]
},
{
label: "APAC",
data: [180, 240, 290, 320, 410, 470]
}
];
xAxis = {
data: ["Q1", "Q2", "Q3", "Q4", "Q1", "Q2"]
};
}<script setup lang="ts">
const series = [
{
label: "EMEA",
data: [400, 320, 510, 480, 600, 690]
},
{
label: "AMER",
data: [320, 410, 380, 450, 580, 640]
},
{
label: "APAC",
data: [180, 240, 290, 320, 410, 470]
}
];
const xAxis = {
data: ["Q1", "Q2", "Q3", "Q4", "Q1", "Q2"]
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
label="Sales by region"
legend="top-end"
grid="horizontal"
/>
</template><script lang="ts">
const series = [
{
label: "EMEA",
data: [400, 320, 510, 480, 600, 690]
},
{
label: "AMER",
data: [320, 410, 380, 450, 580, 640]
},
{
label: "APAC",
data: [180, 240, 290, 320, 410, 470]
}
];
const xAxis = {
data: ["Q1", "Q2", "Q3", "Q4", "Q1", "Q2"]
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
label="Sales by region"
legend="top-end"
grid="horizontal"
/>area fills under the line for a one-off emphasis on volume. When the fill is
the point, use md-area-chart — the same family,
with stacking defaults tuned for it.
<md-line-chart area label="Server load"></md-line-chart>
<script type="module">
const series = [
{
label: "CPU %",
data: [40, 52, 48, 60, 65, 72, 68, 80, 74, 82],
color: "tertiary"
}
];
const xAxis = {
data: ["t1", "t2", "t3", "t4", "t5", "t6", "t7", "t8", "t9", "t10"],
hideTicks: true
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "CPU %",
data: [40, 52, 48, 60, 65, 72, 68, 80, 74, 82],
color: "tertiary"
}
];
const xAxis = {
data: ["t1", "t2", "t3", "t4", "t5", "t6", "t7", "t8", "t9", "t10"],
hideTicks: true
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
area
label="Server load"
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
area
label="Server load"
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "CPU %",
data: [40, 52, 48, 60, 65, 72, 68, 80, 74, 82],
color: "tertiary"
}
];
xAxis = {
data: ["t1", "t2", "t3", "t4", "t5", "t6", "t7", "t8", "t9", "t10"],
hideTicks: true
};
}<script setup lang="ts">
const series = [
{
label: "CPU %",
data: [40, 52, 48, 60, 65, 72, 68, 80, 74, 82],
color: "tertiary"
}
];
const xAxis = {
data: ["t1", "t2", "t3", "t4", "t5", "t6", "t7", "t8", "t9", "t10"],
hideTicks: true
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
area
label="Server load"
/>
</template><script lang="ts">
const series = [
{
label: "CPU %",
data: [40, 52, 48, 60, 65, 72, 68, 80, 74, 82],
color: "tertiary"
}
];
const xAxis = {
data: ["t1", "t2", "t3", "t4", "t5", "t6", "t7", "t8", "t9", "t10"],
hideTicks: true
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
area
label="Server load"
/>stack adds the series together instead of overlaying them. Five modes:
| Mode | Behaviour |
|---|---|
none | Series overlay one another — default |
normal | Additive stacking |
percentage | Each x-tick rescaled to total 100% |
silhouette | Symmetric around zero (streamgraph) |
wiggle | Slope changes minimised (streamgraph) |
Stacking only reads as stacking when the bands are filled, so pair it with
area.
<md-line-chart area stack="percentage" label="Device share" legend="bottom"></md-line-chart>
<script type="module">
const series = [
{
label: "Mobile",
data: [40, 45, 48, 55, 62, 64]
},
{
label: "Desktop",
data: [45, 40, 35, 30, 25, 20]
},
{
label: "Tablet",
data: [15, 15, 17, 15, 13, 16]
}
];
const xAxis = {
data: ["2020", "2021", "2022", "2023", "2024", "2025"]
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "Mobile",
data: [40, 45, 48, 55, 62, 64]
},
{
label: "Desktop",
data: [45, 40, 35, 30, 25, 20]
},
{
label: "Tablet",
data: [15, 15, 17, 15, 13, 16]
}
];
const xAxis = {
data: ["2020", "2021", "2022", "2023", "2024", "2025"]
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
area
stack="percentage"
label="Device share"
legend="bottom"
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
area
stack="percentage"
label="Device share"
legend="bottom"
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "Mobile",
data: [40, 45, 48, 55, 62, 64]
},
{
label: "Desktop",
data: [45, 40, 35, 30, 25, 20]
},
{
label: "Tablet",
data: [15, 15, 17, 15, 13, 16]
}
];
xAxis = {
data: ["2020", "2021", "2022", "2023", "2024", "2025"]
};
}<script setup lang="ts">
const series = [
{
label: "Mobile",
data: [40, 45, 48, 55, 62, 64]
},
{
label: "Desktop",
data: [45, 40, 35, 30, 25, 20]
},
{
label: "Tablet",
data: [15, 15, 17, 15, 13, 16]
}
];
const xAxis = {
data: ["2020", "2021", "2022", "2023", "2024", "2025"]
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
area
stack="percentage"
label="Device share"
legend="bottom"
/>
</template><script lang="ts">
const series = [
{
label: "Mobile",
data: [40, 45, 48, 55, 62, 64]
},
{
label: "Desktop",
data: [45, 40, 35, 30, 25, 20]
},
{
label: "Tablet",
data: [15, 15, 17, 15, 13, 16]
}
];
const xAxis = {
data: ["2020", "2021", "2022", "2023", "2024", "2025"]
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
area
stack="percentage"
label="Device share"
legend="bottom"
/>show-line="false" combined with show-marks gives a scatter-like plot. Note
the quoted string: showLine defaults to true, so the attribute has to be
present and set to "false" to switch the line off.
<md-line-chart show-line="false" show-marks grid="both" legend="top-end"></md-line-chart>
<script type="module">
const series = [
{
label: "Cohort A",
data: [12, 30, 18, 42, 25, 51, 33, 47],
symbol: "circle"
},
{
label: "Cohort B",
data: [40, 22, 35, 15, 48, 28, 55, 20],
symbol: "diamond"
}
];
const xAxis = {
data: ["1", "2", "3", "4", "5", "6", "7", "8"]
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "Cohort A",
data: [12, 30, 18, 42, 25, 51, 33, 47],
symbol: "circle"
},
{
label: "Cohort B",
data: [40, 22, 35, 15, 48, 28, 55, 20],
symbol: "diamond"
}
];
const xAxis = {
data: ["1", "2", "3", "4", "5", "6", "7", "8"]
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
show-line="false"
show-marks
grid="both"
legend="top-end"
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
show-line="false"
show-marks
grid="both"
legend="top-end"
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "Cohort A",
data: [12, 30, 18, 42, 25, 51, 33, 47],
symbol: "circle"
},
{
label: "Cohort B",
data: [40, 22, 35, 15, 48, 28, 55, 20],
symbol: "diamond"
}
];
xAxis = {
data: ["1", "2", "3", "4", "5", "6", "7", "8"]
};
}<script setup lang="ts">
const series = [
{
label: "Cohort A",
data: [12, 30, 18, 42, 25, 51, 33, 47],
symbol: "circle"
},
{
label: "Cohort B",
data: [40, 22, 35, 15, 48, 28, 55, 20],
symbol: "diamond"
}
];
const xAxis = {
data: ["1", "2", "3", "4", "5", "6", "7", "8"]
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
show-line="false"
show-marks
grid="both"
legend="top-end"
/>
</template><script lang="ts">
const series = [
{
label: "Cohort A",
data: [12, 30, 18, 42, 25, 51, 33, 47],
symbol: "circle"
},
{
label: "Cohort B",
data: [40, 22, 35, 15, 48, 28, 55, 20],
symbol: "diamond"
}
];
const xAxis = {
data: ["1", "2", "3", "4", "5", "6", "7", "8"]
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
show-line="false"
show-marks
grid="both"
legend="top-end"
/>markLines draws labelled vertical dividers at an x position — a release
date, “now”, a policy change. Each entry is
{ value, label?, color?, dash? }, where value is an axis value or a
(possibly fractional) category index. Use them instead of free-floating
annotation text.
<md-line-chart curve="smooth" show-marks legend="none"></md-line-chart>
<script type="module">
const series = [
{
label: "Temperature",
data: [8, 9, 11, 14, 16, 15, 13, 11]
}
];
const xAxis = {
data: ["06", "08", "10", "12", "14", "16", "18", "20"]
};
const markLines = [
{
value: 4,
label: "Now",
color: "secondary",
dash: "dashed"
}
];
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis, markLines });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "Temperature",
data: [8, 9, 11, 14, 16, 15, 13, 11]
}
];
const xAxis = {
data: ["06", "08", "10", "12", "14", "16", "18", "20"]
};
const markLines = [
{
value: 4,
label: "Now",
color: "secondary",
dash: "dashed"
}
];
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
markLines={markLines}
curve="smooth"
show-marks
legend="none"
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
[markLines]="markLines"
curve="smooth"
show-marks
legend="none"
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "Temperature",
data: [8, 9, 11, 14, 16, 15, 13, 11]
}
];
xAxis = {
data: ["06", "08", "10", "12", "14", "16", "18", "20"]
};
markLines = [
{
value: 4,
label: "Now",
color: "secondary",
dash: "dashed"
}
];
}<script setup lang="ts">
const series = [
{
label: "Temperature",
data: [8, 9, 11, 14, 16, 15, 13, 11]
}
];
const xAxis = {
data: ["06", "08", "10", "12", "14", "16", "18", "20"]
};
const markLines = [
{
value: 4,
label: "Now",
color: "secondary",
dash: "dashed"
}
];
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
:markLines="markLines"
curve="smooth"
show-marks
legend="none"
/>
</template><script lang="ts">
const series = [
{
label: "Temperature",
data: [8, 9, 11, 14, 16, 15, 13, 11]
}
];
const xAxis = {
data: ["06", "08", "10", "12", "14", "16", "18", "20"]
};
const markLines = [
{
value: 4,
label: "Now",
color: "secondary",
dash: "dashed"
}
];
</script>
<md-line-chart
series={series}
xAxis={xAxis}
markLines={markLines}
curve="smooth"
show-marks
legend="none"
/>const yAxes = [ { label: 'Sessions', position: 'left' }, { label: 'Revenue', position: 'right', valueFormatter: (v) => '$' + v },];const series = [ { label: 'Sessions', yAxisIndex: 0, data: sessions }, { label: 'Revenue', yAxisIndex: 1, data: revenue },];<md-line-chart curve="smooth" legend="bottom" grid="horizontal"></md-line-chart>
<script type="module">
const series = [
{
label: "Sessions",
yAxisIndex: 0,
data: [400, 460, 520, 610, 580, 700]
},
{
label: "Revenue",
yAxisIndex: 1,
data: [12, 15, 14, 21, 19, 26],
color: "tertiary"
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
const yAxes = [
{
position: "left",
label: "Sessions"
},
{
position: "right",
label: "Revenue (k)"
}
];
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis, yAxes });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "Sessions",
yAxisIndex: 0,
data: [400, 460, 520, 610, 580, 700]
},
{
label: "Revenue",
yAxisIndex: 1,
data: [12, 15, 14, 21, 19, 26],
color: "tertiary"
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
const yAxes = [
{
position: "left",
label: "Sessions"
},
{
position: "right",
label: "Revenue (k)"
}
];
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
yAxes={yAxes}
curve="smooth"
legend="bottom"
grid="horizontal"
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
[yAxes]="yAxes"
curve="smooth"
legend="bottom"
grid="horizontal"
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "Sessions",
yAxisIndex: 0,
data: [400, 460, 520, 610, 580, 700]
},
{
label: "Revenue",
yAxisIndex: 1,
data: [12, 15, 14, 21, 19, 26],
color: "tertiary"
}
];
xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
yAxes = [
{
position: "left",
label: "Sessions"
},
{
position: "right",
label: "Revenue (k)"
}
];
}<script setup lang="ts">
const series = [
{
label: "Sessions",
yAxisIndex: 0,
data: [400, 460, 520, 610, 580, 700]
},
{
label: "Revenue",
yAxisIndex: 1,
data: [12, 15, 14, 21, 19, 26],
color: "tertiary"
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
const yAxes = [
{
position: "left",
label: "Sessions"
},
{
position: "right",
label: "Revenue (k)"
}
];
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
:yAxes="yAxes"
curve="smooth"
legend="bottom"
grid="horizontal"
/>
</template><script lang="ts">
const series = [
{
label: "Sessions",
yAxisIndex: 0,
data: [400, 460, 520, 610, 580, 700]
},
{
label: "Revenue",
yAxisIndex: 1,
data: [12, 15, 14, 21, 19, 26],
color: "tertiary"
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
const yAxes = [
{
position: "left",
label: "Sessions"
},
{
position: "right",
label: "Revenue (k)"
}
];
</script>
<md-line-chart
series={series}
xAxis={xAxis}
yAxes={yAxes}
curve="smooth"
legend="bottom"
grid="horizontal"
/>By default a null is a gap, not a zero: the line breaks at it, so a hole in
the record reads as a hole. connect-nulls bridges it with a straight segment —
right for a dropped sensor reading, wrong for a period a series genuinely did
not exist, where bridging fabricates data.
<md-line-chart connect-nulls show-marks label="Bridged gaps"></md-line-chart>
<script type="module">
const series = [
{
label: "value",
data: [10, 18, null, null, 22, 28, null, 36]
}
];
const xAxis = {
data: ["A", "B", "C", "D", "E", "F", "G", "H"]
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "value",
data: [10, 18, null, null, 22, 28, null, 36]
}
];
const xAxis = {
data: ["A", "B", "C", "D", "E", "F", "G", "H"]
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
connect-nulls
show-marks
label="Bridged gaps"
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
connect-nulls
show-marks
label="Bridged gaps"
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "value",
data: [10, 18, null, null, 22, 28, null, 36]
}
];
xAxis = {
data: ["A", "B", "C", "D", "E", "F", "G", "H"]
};
}<script setup lang="ts">
const series = [
{
label: "value",
data: [10, 18, null, null, 22, 28, null, 36]
}
];
const xAxis = {
data: ["A", "B", "C", "D", "E", "F", "G", "H"]
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
connect-nulls
show-marks
label="Bridged gaps"
/>
</template><script lang="ts">
const series = [
{
label: "value",
data: [10, 18, null, null, 22, 28, null, 36]
}
];
const xAxis = {
data: ["A", "B", "C", "D", "E", "F", "G", "H"]
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
connect-nulls
show-marks
label="Bridged gaps"
/>Zoom has two independent mechanisms: drag-to-zoom inside the plot
(zoom="inside") and the slider band below it (zoom="slider"). both enables
each. setZoom() / resetZoom() drive it programmatically.
Zoom is a view. The window slices what the engine draws and leaves your
series array untouched, so every event still reports absolute indices into
the data you supplied.
<md-line-chart zoom="both" label="Dense series"></md-line-chart>
<script type="module">
const series = [
{
label: "value",
data: [80, 87.97338661590122, 95.788366846173, 91.29284946790071, 98.34712181799046, 104.82941969615793, 98.64078171934452, 103.7089945997692, 107.9914720608301, 99.47695261756391, 102.18594853651364, 104.1699280763918, 93.50926361102302, 94.31002743642928, 94.69976300311811, 82.82240016119735, 82.8325171314484, 82.88917795946338, 71.14959113410295, 71.76284218114563, 72.86395009384144, 62.56848455172823, 64.96795852220967, 68.12617992733071, 60.076707823283186, 64.82151450673723, 70.33090688559693, 64.54471024888025, 71.37466724255357, 78.70795641172485, 74.41169003602148, 82.33821194365007, 90.33098409700987, 86.23082727026755, 93.88226702277217, 101.13973197437578, 95.87335727698306, 101.97416191623253, 107.35839344062973, 99.9708669074921, 103.78716493246763, 106.81461113359546, 97.09197816176561, 98.68794195748227, 99.69834385783523, 88.24236970483513, 88.45779828200496, 88.49550850906715, 76.51346437554041, 76.67041741496143]
}
];
const xAxis = {
data: ["T1", "T2", "T3", "T4", "T5", "T6", "T7", "T8", "T9", "T10", "T11", "T12", "T13", "T14", "T15", "T16", "T17", "T18", "T19", "T20", "T21", "T22", "T23", "T24", "T25", "T26", "T27", "T28", "T29", "T30", "T31", "T32", "T33", "T34", "T35", "T36", "T37", "T38", "T39", "T40", "T41", "T42", "T43", "T44", "T45", "T46", "T47", "T48", "T49", "T50"]
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "value",
data: [80, 87.97338661590122, 95.788366846173, 91.29284946790071, 98.34712181799046, 104.82941969615793, 98.64078171934452, 103.7089945997692, 107.9914720608301, 99.47695261756391, 102.18594853651364, 104.1699280763918, 93.50926361102302, 94.31002743642928, 94.69976300311811, 82.82240016119735, 82.8325171314484, 82.88917795946338, 71.14959113410295, 71.76284218114563, 72.86395009384144, 62.56848455172823, 64.96795852220967, 68.12617992733071, 60.076707823283186, 64.82151450673723, 70.33090688559693, 64.54471024888025, 71.37466724255357, 78.70795641172485, 74.41169003602148, 82.33821194365007, 90.33098409700987, 86.23082727026755, 93.88226702277217, 101.13973197437578, 95.87335727698306, 101.97416191623253, 107.35839344062973, 99.9708669074921, 103.78716493246763, 106.81461113359546, 97.09197816176561, 98.68794195748227, 99.69834385783523, 88.24236970483513, 88.45779828200496, 88.49550850906715, 76.51346437554041, 76.67041741496143]
}
];
const xAxis = {
data: ["T1", "T2", "T3", "T4", "T5", "T6", "T7", "T8", "T9", "T10", "T11", "T12", "T13", "T14", "T15", "T16", "T17", "T18", "T19", "T20", "T21", "T22", "T23", "T24", "T25", "T26", "T27", "T28", "T29", "T30", "T31", "T32", "T33", "T34", "T35", "T36", "T37", "T38", "T39", "T40", "T41", "T42", "T43", "T44", "T45", "T46", "T47", "T48", "T49", "T50"]
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
zoom="both"
label="Dense series"
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
zoom="both"
label="Dense series"
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "value",
data: [80, 87.97338661590122, 95.788366846173, 91.29284946790071, 98.34712181799046, 104.82941969615793, 98.64078171934452, 103.7089945997692, 107.9914720608301, 99.47695261756391, 102.18594853651364, 104.1699280763918, 93.50926361102302, 94.31002743642928, 94.69976300311811, 82.82240016119735, 82.8325171314484, 82.88917795946338, 71.14959113410295, 71.76284218114563, 72.86395009384144, 62.56848455172823, 64.96795852220967, 68.12617992733071, 60.076707823283186, 64.82151450673723, 70.33090688559693, 64.54471024888025, 71.37466724255357, 78.70795641172485, 74.41169003602148, 82.33821194365007, 90.33098409700987, 86.23082727026755, 93.88226702277217, 101.13973197437578, 95.87335727698306, 101.97416191623253, 107.35839344062973, 99.9708669074921, 103.78716493246763, 106.81461113359546, 97.09197816176561, 98.68794195748227, 99.69834385783523, 88.24236970483513, 88.45779828200496, 88.49550850906715, 76.51346437554041, 76.67041741496143]
}
];
xAxis = {
data: ["T1", "T2", "T3", "T4", "T5", "T6", "T7", "T8", "T9", "T10", "T11", "T12", "T13", "T14", "T15", "T16", "T17", "T18", "T19", "T20", "T21", "T22", "T23", "T24", "T25", "T26", "T27", "T28", "T29", "T30", "T31", "T32", "T33", "T34", "T35", "T36", "T37", "T38", "T39", "T40", "T41", "T42", "T43", "T44", "T45", "T46", "T47", "T48", "T49", "T50"]
};
}<script setup lang="ts">
const series = [
{
label: "value",
data: [80, 87.97338661590122, 95.788366846173, 91.29284946790071, 98.34712181799046, 104.82941969615793, 98.64078171934452, 103.7089945997692, 107.9914720608301, 99.47695261756391, 102.18594853651364, 104.1699280763918, 93.50926361102302, 94.31002743642928, 94.69976300311811, 82.82240016119735, 82.8325171314484, 82.88917795946338, 71.14959113410295, 71.76284218114563, 72.86395009384144, 62.56848455172823, 64.96795852220967, 68.12617992733071, 60.076707823283186, 64.82151450673723, 70.33090688559693, 64.54471024888025, 71.37466724255357, 78.70795641172485, 74.41169003602148, 82.33821194365007, 90.33098409700987, 86.23082727026755, 93.88226702277217, 101.13973197437578, 95.87335727698306, 101.97416191623253, 107.35839344062973, 99.9708669074921, 103.78716493246763, 106.81461113359546, 97.09197816176561, 98.68794195748227, 99.69834385783523, 88.24236970483513, 88.45779828200496, 88.49550850906715, 76.51346437554041, 76.67041741496143]
}
];
const xAxis = {
data: ["T1", "T2", "T3", "T4", "T5", "T6", "T7", "T8", "T9", "T10", "T11", "T12", "T13", "T14", "T15", "T16", "T17", "T18", "T19", "T20", "T21", "T22", "T23", "T24", "T25", "T26", "T27", "T28", "T29", "T30", "T31", "T32", "T33", "T34", "T35", "T36", "T37", "T38", "T39", "T40", "T41", "T42", "T43", "T44", "T45", "T46", "T47", "T48", "T49", "T50"]
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
zoom="both"
label="Dense series"
/>
</template><script lang="ts">
const series = [
{
label: "value",
data: [80, 87.97338661590122, 95.788366846173, 91.29284946790071, 98.34712181799046, 104.82941969615793, 98.64078171934452, 103.7089945997692, 107.9914720608301, 99.47695261756391, 102.18594853651364, 104.1699280763918, 93.50926361102302, 94.31002743642928, 94.69976300311811, 82.82240016119735, 82.8325171314484, 82.88917795946338, 71.14959113410295, 71.76284218114563, 72.86395009384144, 62.56848455172823, 64.96795852220967, 68.12617992733071, 60.076707823283186, 64.82151450673723, 70.33090688559693, 64.54471024888025, 71.37466724255357, 78.70795641172485, 74.41169003602148, 82.33821194365007, 90.33098409700987, 86.23082727026755, 93.88226702277217, 101.13973197437578, 95.87335727698306, 101.97416191623253, 107.35839344062973, 99.9708669074921, 103.78716493246763, 106.81461113359546, 97.09197816176561, 98.68794195748227, 99.69834385783523, 88.24236970483513, 88.45779828200496, 88.49550850906715, 76.51346437554041, 76.67041741496143]
}
];
const xAxis = {
data: ["T1", "T2", "T3", "T4", "T5", "T6", "T7", "T8", "T9", "T10", "T11", "T12", "T13", "T14", "T15", "T16", "T17", "T18", "T19", "T20", "T21", "T22", "T23", "T24", "T25", "T26", "T27", "T28", "T29", "T30", "T31", "T32", "T33", "T34", "T35", "T36", "T37", "T38", "T39", "T40", "T41", "T42", "T43", "T44", "T45", "T46", "T47", "T48", "T49", "T50"]
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
zoom="both"
label="Dense series"
/>await chart.setZoom(10, 40); // absolute indicesawait chart.resetZoom();loading shows an opaque overlay with a progress indicator over the plot — it
has to be opaque, because the engine still draws a placeholder axis when there
is no data. An empty series shows label-empty instead. The two never stack:
“no data” is the wrong answer to “where is my data?” mid-load. Both accept
slotted content (slot="loading", slot="empty") when text is not enough.
<md-line-chart label-empty="No sessions recorded yet"></md-line-chart>
<script type="module">
const series = [];
const el = document.querySelector("md-line-chart");
Object.assign(el, { series });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [];
export function Chart() {
return (
<MdLineChart
series={series}
label-empty="No sessions recorded yet"
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
label-empty="No sessions recorded yet"
></md-line-chart>
`,
})
export class ChartComponent {
series = [];
}<script setup lang="ts">
const series = [];
</script>
<template>
<md-line-chart
:series="series"
label-empty="No sessions recorded yet"
/>
</template><script lang="ts">
const series = [];
</script>
<md-line-chart
series={series}
label-empty="No sessions recorded yet"
/>loading shows a circular indicator and the loading-label text. When that is
not the right shape — a wide dashboard tile, a skeleton that mirrors the chart’s
own layout, a branded mark — slot your own into loader (the older name
loading still works); it replaces the default entirely.
<md-line-chart label="Monthly revenue" loading loading-label="Fetching revenue…"></md-line-chart>
<script type="module">
const series = [];
const xAxis = {
data: []
};
const yAxis = {
label: "EUR"
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis, yAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [];
const xAxis = {
data: []
};
const yAxis = {
label: "EUR"
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
yAxis={yAxis}
label="Monthly revenue"
loading
loading-label="Fetching revenue…"
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
[yAxis]="yAxis"
label="Monthly revenue"
loading
loading-label="Fetching revenue…"
></md-line-chart>
`,
})
export class ChartComponent {
series = [];
xAxis = {
data: []
};
yAxis = {
label: "EUR"
};
}<script setup lang="ts">
const series = [];
const xAxis = {
data: []
};
const yAxis = {
label: "EUR"
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
:yAxis="yAxis"
label="Monthly revenue"
loading
loading-label="Fetching revenue…"
/>
</template><script lang="ts">
const series = [];
const xAxis = {
data: []
};
const yAxis = {
label: "EUR"
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
yAxis={yAxis}
label="Monthly revenue"
loading
loading-label="Fetching revenue…"
/><md-line-chart label="Monthly revenue" loading><div slot="loading" style="inline-size: min(320px, 70%); display: grid; gap: 12px; justify-items: center;">
<md-progress-indicator variant="linear" indeterminate label="Fetching revenue" style="inline-size: 100%;"></md-progress-indicator>
<span>Fetching revenue…</span>
</div></md-line-chart>
<script type="module">
const series = [];
const xAxis = {
data: []
};
const yAxis = {
label: "EUR"
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis, yAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [];
const xAxis = {
data: []
};
const yAxis = {
label: "EUR"
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
yAxis={yAxis}
label="Monthly revenue"
loading
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
[yAxis]="yAxis"
label="Monthly revenue"
loading
></md-line-chart>
`,
})
export class ChartComponent {
series = [];
xAxis = {
data: []
};
yAxis = {
label: "EUR"
};
}<script setup lang="ts">
const series = [];
const xAxis = {
data: []
};
const yAxis = {
label: "EUR"
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
:yAxis="yAxis"
label="Monthly revenue"
loading
/>
</template><script lang="ts">
const series = [];
const xAxis = {
data: []
};
const yAxis = {
label: "EUR"
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
yAxis={yAxis}
label="Monthly revenue"
loading
/>A circular md-progress-indicator in the
loader slot keeps the default’s shape while letting you set its size and
label.
<md-line-chart label="Sessions" loading loading-label="Fetching sessions…"><md-progress-indicator slot="loader" variant="circular" indeterminate size="40" label="Loading"></md-progress-indicator></md-line-chart>
<script type="module">
const series = [];
const xAxis = {
data: []
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [];
const xAxis = {
data: []
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
label="Sessions"
loading
loading-label="Fetching sessions…"
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
label="Sessions"
loading
loading-label="Fetching sessions…"
></md-line-chart>
`,
})
export class ChartComponent {
series = [];
xAxis = {
data: []
};
}<script setup lang="ts">
const series = [];
const xAxis = {
data: []
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
label="Sessions"
loading
loading-label="Fetching sessions…"
/>
</template><script lang="ts">
const series = [];
const xAxis = {
data: []
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
label="Sessions"
loading
loading-label="Fetching sessions…"
/>legend takes an anchor — top, bottom, left, right, top-start,
top-end, bottom-start, bottom-end — or none. The side anchors (left /
right) reserve a gutter beside the plot; the top/bottom anchors reserve a row
above or below it. Pick the edge the reader arrives from, and drop it entirely
when the series are labelled on the plot.
<md-line-chart legend="top-end" label="Revenue"></md-line-chart>
<script type="module">
const series = [
{
label: "EMEA",
data: [400, 320, 510, 480, 600, 690]
},
{
label: "AMER",
data: [320, 410, 380, 450, 580, 640]
}
];
const xAxis = {
data: ["Q1", "Q2", "Q3", "Q4", "Q1", "Q2"]
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "EMEA",
data: [400, 320, 510, 480, 600, 690]
},
{
label: "AMER",
data: [320, 410, 380, 450, 580, 640]
}
];
const xAxis = {
data: ["Q1", "Q2", "Q3", "Q4", "Q1", "Q2"]
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
legend="top-end"
label="Revenue"
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
legend="top-end"
label="Revenue"
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "EMEA",
data: [400, 320, 510, 480, 600, 690]
},
{
label: "AMER",
data: [320, 410, 380, 450, 580, 640]
}
];
xAxis = {
data: ["Q1", "Q2", "Q3", "Q4", "Q1", "Q2"]
};
}<script setup lang="ts">
const series = [
{
label: "EMEA",
data: [400, 320, 510, 480, 600, 690]
},
{
label: "AMER",
data: [320, 410, 380, 450, 580, 640]
}
];
const xAxis = {
data: ["Q1", "Q2", "Q3", "Q4", "Q1", "Q2"]
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
legend="top-end"
label="Revenue"
/>
</template><script lang="ts">
const series = [
{
label: "EMEA",
data: [400, 320, 510, 480, 600, 690]
},
{
label: "AMER",
data: [320, 410, 380, 450, 580, 640]
}
];
const xAxis = {
data: ["Q1", "Q2", "Q3", "Q4", "Q1", "Q2"]
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
legend="top-end"
label="Revenue"
/>color takes an MD3 role name or any CSS colour. Prefer the role: it
follows the theme and stays legible in dark mode, where a hardcoded hex will not.
On a filled chart the same colour drives the gradient under the line.
<md-line-chart legend="bottom" show-marks></md-line-chart>
<script type="module">
const series = [
{
label: "primary",
color: "primary",
data: [12, 18, 14, 22, 28, 24]
},
{
label: "tertiary",
color: "tertiary",
data: [8, 12, 10, 16, 20, 18]
},
{
label: "hex",
color: "#e0b400",
data: [4, 7, 6, 10, 13, 12]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "primary",
color: "primary",
data: [12, 18, 14, 22, 28, 24]
},
{
label: "tertiary",
color: "tertiary",
data: [8, 12, 10, 16, 20, 18]
},
{
label: "hex",
color: "#e0b400",
data: [4, 7, 6, 10, 13, 12]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
legend="bottom"
show-marks
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
legend="bottom"
show-marks
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "primary",
color: "primary",
data: [12, 18, 14, 22, 28, 24]
},
{
label: "tertiary",
color: "tertiary",
data: [8, 12, 10, 16, 20, 18]
},
{
label: "hex",
color: "#e0b400",
data: [4, 7, 6, 10, 13, 12]
}
];
xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
}<script setup lang="ts">
const series = [
{
label: "primary",
color: "primary",
data: [12, 18, 14, 22, 28, 24]
},
{
label: "tertiary",
color: "tertiary",
data: [8, 12, 10, 16, 20, 18]
},
{
label: "hex",
color: "#e0b400",
data: [4, 7, 6, 10, 13, 12]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
legend="bottom"
show-marks
/>
</template><script lang="ts">
const series = [
{
label: "primary",
color: "primary",
data: [12, 18, 14, 22, 28, 24]
},
{
label: "tertiary",
color: "tertiary",
data: [8, 12, 10, 16, 20, 18]
},
{
label: "hex",
color: "#e0b400",
data: [4, 7, 6, 10, 13, 12]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
legend="bottom"
show-marks
/><md-line-chart area legend="bottom"></md-line-chart>
<script type="module">
const series = [
{
label: "rgb",
color: "rgb(125, 82, 96)",
data: [20, 28, 24, 34, 41, 38]
},
{
label: "named",
color: "teal",
data: [10, 14, 12, 19, 24, 22]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "rgb",
color: "rgb(125, 82, 96)",
data: [20, 28, 24, 34, 41, 38]
},
{
label: "named",
color: "teal",
data: [10, 14, 12, 19, 24, 22]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
area
legend="bottom"
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
area
legend="bottom"
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "rgb",
color: "rgb(125, 82, 96)",
data: [20, 28, 24, 34, 41, 38]
},
{
label: "named",
color: "teal",
data: [10, 14, 12, 19, 24, 22]
}
];
xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
}<script setup lang="ts">
const series = [
{
label: "rgb",
color: "rgb(125, 82, 96)",
data: [20, 28, 24, 34, 41, 38]
},
{
label: "named",
color: "teal",
data: [10, 14, 12, 19, 24, 22]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
area
legend="bottom"
/>
</template><script lang="ts">
const series = [
{
label: "rgb",
color: "rgb(125, 82, 96)",
data: [20, 28, 24, 34, 41, 38]
},
{
label: "named",
color: "teal",
data: [10, 14, 12, 19, 24, 22]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
area
legend="bottom"
/>valueFormatter owns the value text — axis ticks, tooltip rows and the
screen-reader table. Set locale for the default Intl formatting; once you
pass a formatter, it wins outright, so localise inside it.
const valueFormatter = (v) => new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(v ?? 0);<md-line-chart label="Revenue" legend="none" show-marks></md-line-chart>
<script type="module">
const series = [
{
label: "Revenue",
data: [1200, 1850, 1640, 2310, 2780, 2450]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
const yAxis = {
label: "EUR"
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis, yAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "Revenue",
data: [1200, 1850, 1640, 2310, 2780, 2450]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
const yAxis = {
label: "EUR"
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
yAxis={yAxis}
label="Revenue"
legend="none"
show-marks
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
[yAxis]="yAxis"
label="Revenue"
legend="none"
show-marks
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "Revenue",
data: [1200, 1850, 1640, 2310, 2780, 2450]
}
];
xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
yAxis = {
label: "EUR"
};
}<script setup lang="ts">
const series = [
{
label: "Revenue",
data: [1200, 1850, 1640, 2310, 2780, 2450]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
const yAxis = {
label: "EUR"
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
:yAxis="yAxis"
label="Revenue"
legend="none"
show-marks
/>
</template><script lang="ts">
const series = [
{
label: "Revenue",
data: [1200, 1850, 1640, 2310, 2780, 2450]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
const yAxis = {
label: "EUR"
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
yAxis={yAxis}
label="Revenue"
legend="none"
show-marks
/>show-labels prints each point’s value on the plot. Use it for a handful of
points; on a dense series the numbers collide and the line stops being readable.
A label with no room above it flips below the point rather than overflowing the
plot.
<md-line-chart show-labels show-marks legend="none" label="Weekly signups"></md-line-chart>
<script type="module">
const series = [
{
label: "Signups",
color: "primary",
data: [42, 61, 55, 78, 96, 88]
}
];
const xAxis = {
data: ["W1", "W2", "W3", "W4", "W5", "W6"]
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "Signups",
color: "primary",
data: [42, 61, 55, 78, 96, 88]
}
];
const xAxis = {
data: ["W1", "W2", "W3", "W4", "W5", "W6"]
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
show-labels
show-marks
legend="none"
label="Weekly signups"
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
show-labels
show-marks
legend="none"
label="Weekly signups"
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "Signups",
color: "primary",
data: [42, 61, 55, 78, 96, 88]
}
];
xAxis = {
data: ["W1", "W2", "W3", "W4", "W5", "W6"]
};
}<script setup lang="ts">
const series = [
{
label: "Signups",
color: "primary",
data: [42, 61, 55, 78, 96, 88]
}
];
const xAxis = {
data: ["W1", "W2", "W3", "W4", "W5", "W6"]
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
show-labels
show-marks
legend="none"
label="Weekly signups"
/>
</template><script lang="ts">
const series = [
{
label: "Signups",
color: "primary",
data: [42, 61, 55, 78, 96, 88]
}
];
const xAxis = {
data: ["W1", "W2", "W3", "W4", "W5", "W6"]
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
show-labels
show-marks
legend="none"
label="Weekly signups"
/>symbol on a series picks the point marker. Five shapes are drawn on the
canvas — circle (default), square, diamond, triangle, triangle-down —
and none suppresses that series’ markers even when marks are on.
Any other string is not an error: it is drawn as a text glyph at every
point. That is the emoji case below — but it also means a typo (cross, say)
silently prints the word rather than falling back to a shape.
<md-line-chart show-marks curve="smooth" legend="bottom" grid="horizontal"></md-line-chart>
<script type="module">
const series = [
{
label: "Sunny",
symbol: "☀️",
color: "tertiary",
data: [12, 16, 21, 25, 28, 24]
},
{
label: "Rain",
symbol: "🌧️",
color: "primary",
data: [8, 6, 9, 5, 3, 7]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "Sunny",
symbol: "☀️",
color: "tertiary",
data: [12, 16, 21, 25, 28, 24]
},
{
label: "Rain",
symbol: "🌧️",
color: "primary",
data: [8, 6, 9, 5, 3, 7]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
show-marks
curve="smooth"
legend="bottom"
grid="horizontal"
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
show-marks
curve="smooth"
legend="bottom"
grid="horizontal"
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "Sunny",
symbol: "☀️",
color: "tertiary",
data: [12, 16, 21, 25, 28, 24]
},
{
label: "Rain",
symbol: "🌧️",
color: "primary",
data: [8, 6, 9, 5, 3, 7]
}
];
xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
}<script setup lang="ts">
const series = [
{
label: "Sunny",
symbol: "☀️",
color: "tertiary",
data: [12, 16, 21, 25, 28, 24]
},
{
label: "Rain",
symbol: "🌧️",
color: "primary",
data: [8, 6, 9, 5, 3, 7]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
show-marks
curve="smooth"
legend="bottom"
grid="horizontal"
/>
</template><script lang="ts">
const series = [
{
label: "Sunny",
symbol: "☀️",
color: "tertiary",
data: [12, 16, 21, 25, 28, 24]
},
{
label: "Rain",
symbol: "🌧️",
color: "primary",
data: [8, 6, 9, 5, 3, 7]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
show-marks
curve="smooth"
legend="bottom"
grid="horizontal"
/>scale: 'log' on the value axis turns equal ratios into equal distances, so a
series spanning orders of magnitude stays readable instead of flattening into
the baseline. Ticks snap to powers of ten.
<md-line-chart curve="linear" legend="bottom" grid="horizontal" show-marks></md-line-chart>
<script type="module">
const series = [
{
label: "Requests",
color: "primary",
data: [12, 140, 1800, 24000, 310000, 4200000]
},
{
label: "Errors",
color: "error",
data: [2, 9, 40, 180, 900, 4100]
}
];
const xAxis = {
data: ["2019", "2020", "2021", "2022", "2023", "2024"]
};
const yAxis = {
scale: "log",
label: "Count"
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis, yAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "Requests",
color: "primary",
data: [12, 140, 1800, 24000, 310000, 4200000]
},
{
label: "Errors",
color: "error",
data: [2, 9, 40, 180, 900, 4100]
}
];
const xAxis = {
data: ["2019", "2020", "2021", "2022", "2023", "2024"]
};
const yAxis = {
scale: "log",
label: "Count"
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
yAxis={yAxis}
curve="linear"
legend="bottom"
grid="horizontal"
show-marks
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
[yAxis]="yAxis"
curve="linear"
legend="bottom"
grid="horizontal"
show-marks
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "Requests",
color: "primary",
data: [12, 140, 1800, 24000, 310000, 4200000]
},
{
label: "Errors",
color: "error",
data: [2, 9, 40, 180, 900, 4100]
}
];
xAxis = {
data: ["2019", "2020", "2021", "2022", "2023", "2024"]
};
yAxis = {
scale: "log",
label: "Count"
};
}<script setup lang="ts">
const series = [
{
label: "Requests",
color: "primary",
data: [12, 140, 1800, 24000, 310000, 4200000]
},
{
label: "Errors",
color: "error",
data: [2, 9, 40, 180, 900, 4100]
}
];
const xAxis = {
data: ["2019", "2020", "2021", "2022", "2023", "2024"]
};
const yAxis = {
scale: "log",
label: "Count"
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
:yAxis="yAxis"
curve="linear"
legend="bottom"
grid="horizontal"
show-marks
/>
</template><script lang="ts">
const series = [
{
label: "Requests",
color: "primary",
data: [12, 140, 1800, 24000, 310000, 4200000]
},
{
label: "Errors",
color: "error",
data: [2, 9, 40, 180, 900, 4100]
}
];
const xAxis = {
data: ["2019", "2020", "2021", "2022", "2023", "2024"]
};
const yAxis = {
scale: "log",
label: "Count"
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
yAxis={yAxis}
curve="linear"
legend="bottom"
grid="horizontal"
show-marks
/>inverted transposes the plot: the category axis runs down the side and values
run across the bottom. Reach for it when the independent variable reads as depth
— altitude, a drill core — or when the category names are too long to sit under
a horizontal axis.
<md-line-chart inverted curve="smooth" grid="both" legend="bottom" show-marks></md-line-chart>
<script type="module">
const series = [
{
label: "Temperature (°C)",
color: "primary",
data: [15, 9, 2, -6, -18, -35]
}
];
const xAxis = {
data: ["0 km", "2 km", "4 km", "6 km", "8 km", "10 km"],
label: "Altitude"
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "Temperature (°C)",
color: "primary",
data: [15, 9, 2, -6, -18, -35]
}
];
const xAxis = {
data: ["0 km", "2 km", "4 km", "6 km", "8 km", "10 km"],
label: "Altitude"
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
inverted
curve="smooth"
grid="both"
legend="bottom"
show-marks
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
inverted
curve="smooth"
grid="both"
legend="bottom"
show-marks
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "Temperature (°C)",
color: "primary",
data: [15, 9, 2, -6, -18, -35]
}
];
xAxis = {
data: ["0 km", "2 km", "4 km", "6 km", "8 km", "10 km"],
label: "Altitude"
};
}<script setup lang="ts">
const series = [
{
label: "Temperature (°C)",
color: "primary",
data: [15, 9, 2, -6, -18, -35]
}
];
const xAxis = {
data: ["0 km", "2 km", "4 km", "6 km", "8 km", "10 km"],
label: "Altitude"
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
inverted
curve="smooth"
grid="both"
legend="bottom"
show-marks
/>
</template><script lang="ts">
const series = [
{
label: "Temperature (°C)",
color: "primary",
data: [15, 9, 2, -6, -18, -35]
}
];
const xAxis = {
data: ["0 km", "2 km", "4 km", "6 km", "8 km", "10 km"],
label: "Altitude"
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
inverted
curve="smooth"
grid="both"
legend="bottom"
show-marks
/>bands on an axis shades a range and labels it — a forecast half, a weekend, an
outage window, a target zone. It reads as context behind the data rather than
another series competing with it, so keep the fill faint.
<md-line-chart curve="smooth" grid="horizontal" legend="none" label="Daily active users"></md-line-chart>
<script type="module">
const series = [
{
label: "DAU",
color: "primary",
data: [820, 910, 880, 940, 1010, 520, 480]
}
];
const xAxis = {
data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
bands: [
{
from: 5,
to: 6,
color: "color-mix(in srgb, var(--md-sys-color-primary) 8%, transparent)",
label: "Weekend"
}
]
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "DAU",
color: "primary",
data: [820, 910, 880, 940, 1010, 520, 480]
}
];
const xAxis = {
data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
bands: [
{
from: 5,
to: 6,
color: "color-mix(in srgb, var(--md-sys-color-primary) 8%, transparent)",
label: "Weekend"
}
]
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
curve="smooth"
grid="horizontal"
legend="none"
label="Daily active users"
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
curve="smooth"
grid="horizontal"
legend="none"
label="Daily active users"
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "DAU",
color: "primary",
data: [820, 910, 880, 940, 1010, 520, 480]
}
];
xAxis = {
data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
bands: [
{
from: 5,
to: 6,
color: "color-mix(in srgb, var(--md-sys-color-primary) 8%, transparent)",
label: "Weekend"
}
]
};
}<script setup lang="ts">
const series = [
{
label: "DAU",
color: "primary",
data: [820, 910, 880, 940, 1010, 520, 480]
}
];
const xAxis = {
data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
bands: [
{
from: 5,
to: 6,
color: "color-mix(in srgb, var(--md-sys-color-primary) 8%, transparent)",
label: "Weekend"
}
]
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
curve="smooth"
grid="horizontal"
legend="none"
label="Daily active users"
/>
</template><script lang="ts">
const series = [
{
label: "DAU",
color: "primary",
data: [820, 910, 880, 940, 1010, 520, 480]
}
];
const xAxis = {
data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
bands: [
{
from: 5,
to: 6,
color: "color-mix(in srgb, var(--md-sys-color-primary) 8%, transparent)",
label: "Weekend"
}
]
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
curve="smooth"
grid="horizontal"
legend="none"
label="Daily active users"
/>One outlier flattens everything else. breaks: 'auto' on the value axis detects
the gap and folds it away, so the small values get their range back while the
outlier stays honestly larger. The cut is drawn on the axis — the reader can
see the scale was interrupted.
<md-line-chart curve="linear" legend="none" show-marks label="Monthly active users"></md-line-chart>
<script type="module">
const series = [
{
label: "MAU (k)",
color: "primary",
data: [8, 12, 18, 25, 1150, 1320, 1280, 1400]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug"]
};
const yAxis = {
label: "MAU (k)",
breaks: "auto"
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis, yAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "MAU (k)",
color: "primary",
data: [8, 12, 18, 25, 1150, 1320, 1280, 1400]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug"]
};
const yAxis = {
label: "MAU (k)",
breaks: "auto"
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
yAxis={yAxis}
curve="linear"
legend="none"
show-marks
label="Monthly active users"
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
[yAxis]="yAxis"
curve="linear"
legend="none"
show-marks
label="Monthly active users"
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "MAU (k)",
color: "primary",
data: [8, 12, 18, 25, 1150, 1320, 1280, 1400]
}
];
xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug"]
};
yAxis = {
label: "MAU (k)",
breaks: "auto"
};
}<script setup lang="ts">
const series = [
{
label: "MAU (k)",
color: "primary",
data: [8, 12, 18, 25, 1150, 1320, 1280, 1400]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug"]
};
const yAxis = {
label: "MAU (k)",
breaks: "auto"
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
:yAxis="yAxis"
curve="linear"
legend="none"
show-marks
label="Monthly active users"
/>
</template><script lang="ts">
const series = [
{
label: "MAU (k)",
color: "primary",
data: [8, 12, 18, 25, 1150, 1320, 1280, 1400]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug"]
};
const yAxis = {
label: "MAU (k)",
breaks: "auto"
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
yAxis={yAxis}
curve="linear"
legend="none"
show-marks
label="Monthly active users"
/>Series need not share a length or a sampling rhythm. A series that starts later
simply has no point before its first sample — that is different from a null,
which is a measured gap. On a time scale the x positions come from the values
themselves, so irregular intervals are spaced truthfully rather than evenly.
<md-line-chart curve="smooth" grid="horizontal" legend="bottom" area></md-line-chart>
<script type="module">
const series = [
{
label: "Legacy",
color: "tertiary",
data: [40, 38, 35, 30, 24, 18]
},
{
label: "Rewrite",
color: "primary",
data: [null, null, 5, 14, 28, 46]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "Legacy",
color: "tertiary",
data: [40, 38, 35, 30, 24, 18]
},
{
label: "Rewrite",
color: "primary",
data: [null, null, 5, 14, 28, 46]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
curve="smooth"
grid="horizontal"
legend="bottom"
area
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
curve="smooth"
grid="horizontal"
legend="bottom"
area
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "Legacy",
color: "tertiary",
data: [40, 38, 35, 30, 24, 18]
},
{
label: "Rewrite",
color: "primary",
data: [null, null, 5, 14, 28, 46]
}
];
xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
}<script setup lang="ts">
const series = [
{
label: "Legacy",
color: "tertiary",
data: [40, 38, 35, 30, 24, 18]
},
{
label: "Rewrite",
color: "primary",
data: [null, null, 5, 14, 28, 46]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
curve="smooth"
grid="horizontal"
legend="bottom"
area
/>
</template><script lang="ts">
const series = [
{
label: "Legacy",
color: "tertiary",
data: [40, 38, 35, 30, 24, 18]
},
{
label: "Rewrite",
color: "primary",
data: [null, null, 5, 14, 28, 46]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
curve="smooth"
grid="horizontal"
legend="bottom"
area
/>Three separate dash settings, easy to confuse:
| Where | Field | Styles |
|---|---|---|
| On a series | dash | that series’ own drawn line |
| On an axis | dash | the axis line and its tick marks |
| On an axis | gridDash | the gridlines that axis draws across the plot |
A dotted series is the conventional way to mark a line that isn’t a measurement — a target, an average, a forecast — so it reads as a reference without needing a legend entry to explain it.
<md-line-chart curve="smooth" grid="horizontal" legend="bottom" show-marks label="Response time"></md-line-chart>
<script type="module">
const series = [
{
label: "p50",
color: "primary",
data: [120, 138, 129, 152, 141, 133, 147]
},
{
label: "p95",
color: "tertiary",
data: [280, 310, 295, 360, 332, 318, 351]
},
{
label: "Target",
color: "error",
dash: "dotted",
data: [300, 300, 300, 300, 300, 300, 300]
}
];
const xAxis = {
data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
};
const yAxis = {
label: "ms"
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis, yAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "p50",
color: "primary",
data: [120, 138, 129, 152, 141, 133, 147]
},
{
label: "p95",
color: "tertiary",
data: [280, 310, 295, 360, 332, 318, 351]
},
{
label: "Target",
color: "error",
dash: "dotted",
data: [300, 300, 300, 300, 300, 300, 300]
}
];
const xAxis = {
data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
};
const yAxis = {
label: "ms"
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
yAxis={yAxis}
curve="smooth"
grid="horizontal"
legend="bottom"
show-marks
label="Response time"
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
[yAxis]="yAxis"
curve="smooth"
grid="horizontal"
legend="bottom"
show-marks
label="Response time"
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "p50",
color: "primary",
data: [120, 138, 129, 152, 141, 133, 147]
},
{
label: "p95",
color: "tertiary",
data: [280, 310, 295, 360, 332, 318, 351]
},
{
label: "Target",
color: "error",
dash: "dotted",
data: [300, 300, 300, 300, 300, 300, 300]
}
];
xAxis = {
data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
};
yAxis = {
label: "ms"
};
}<script setup lang="ts">
const series = [
{
label: "p50",
color: "primary",
data: [120, 138, 129, 152, 141, 133, 147]
},
{
label: "p95",
color: "tertiary",
data: [280, 310, 295, 360, 332, 318, 351]
},
{
label: "Target",
color: "error",
dash: "dotted",
data: [300, 300, 300, 300, 300, 300, 300]
}
];
const xAxis = {
data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
};
const yAxis = {
label: "ms"
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
:yAxis="yAxis"
curve="smooth"
grid="horizontal"
legend="bottom"
show-marks
label="Response time"
/>
</template><script lang="ts">
const series = [
{
label: "p50",
color: "primary",
data: [120, 138, 129, 152, 141, 133, 147]
},
{
label: "p95",
color: "tertiary",
data: [280, 310, 295, 360, 332, 318, 351]
},
{
label: "Target",
color: "error",
dash: "dotted",
data: [300, 300, 300, 300, 300, 300, 300]
}
];
const xAxis = {
data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
};
const yAxis = {
label: "ms"
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
yAxis={yAxis}
curve="smooth"
grid="horizontal"
legend="bottom"
show-marks
label="Response time"
/>Dotted or dashed gridlines let the grid recede behind the data instead of competing with it.
<md-line-chart curve="smooth" grid="both" legend="none" show-marks></md-line-chart>
<script type="module">
const series = [
{
label: "Load",
color: "primary",
data: [40, 52, 48, 60, 65, 72, 68]
}
];
const xAxis = {
data: ["t1", "t2", "t3", "t4", "t5", "t6", "t7"],
gridDash: "dotted"
};
const yAxis = {
gridDash: "dashed",
label: "CPU %"
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis, yAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "Load",
color: "primary",
data: [40, 52, 48, 60, 65, 72, 68]
}
];
const xAxis = {
data: ["t1", "t2", "t3", "t4", "t5", "t6", "t7"],
gridDash: "dotted"
};
const yAxis = {
gridDash: "dashed",
label: "CPU %"
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
yAxis={yAxis}
curve="smooth"
grid="both"
legend="none"
show-marks
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
[yAxis]="yAxis"
curve="smooth"
grid="both"
legend="none"
show-marks
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "Load",
color: "primary",
data: [40, 52, 48, 60, 65, 72, 68]
}
];
xAxis = {
data: ["t1", "t2", "t3", "t4", "t5", "t6", "t7"],
gridDash: "dotted"
};
yAxis = {
gridDash: "dashed",
label: "CPU %"
};
}<script setup lang="ts">
const series = [
{
label: "Load",
color: "primary",
data: [40, 52, 48, 60, 65, 72, 68]
}
];
const xAxis = {
data: ["t1", "t2", "t3", "t4", "t5", "t6", "t7"],
gridDash: "dotted"
};
const yAxis = {
gridDash: "dashed",
label: "CPU %"
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
:yAxis="yAxis"
curve="smooth"
grid="both"
legend="none"
show-marks
/>
</template><script lang="ts">
const series = [
{
label: "Load",
color: "primary",
data: [40, 52, 48, 60, 65, 72, 68]
}
];
const xAxis = {
data: ["t1", "t2", "t3", "t4", "t5", "t6", "t7"],
gridDash: "dotted"
};
const yAxis = {
gridDash: "dashed",
label: "CPU %"
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
yAxis={yAxis}
curve="smooth"
grid="both"
legend="none"
show-marks
/>animation picks the entrance: expressive (default), grow, fade, draw
(a left-to-right reveal, the line drawing itself), stagger (the same, one
series at a time) or none. animation-duration overrides the timing, and
every variant honours prefers-reduced-motion.
Picking a variant is declarative — animation is a plain string attribute and
animation-duration overrides the timing in milliseconds.
<md-line-chart id="trend" animation="draw" animation-duration="900"
curve="smooth" grid="both" legend="none"></md-line-chart>
<script type="module">
const chart = document.getElementById('trend');
chart.series = [{ label: 'Users', color: 'primary', data: [40, 62, 55, 78, 70, 96, 88, 110, 102, 128] }];
chart.xAxis = { data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct'] };
</script>import { MdLineChart } from '@awc-ui/react';
const SERIES = [{ label: 'Users', color: 'primary', data: [40, 62, 55, 78, 70, 96, 88, 110, 102, 128] }];
const X_AXIS = { data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct'] };
export function Trend() {
return (
<MdLineChart
animation="draw"
animationDuration={900}
curve="smooth"
grid="both"
legend="none"
series={SERIES}
xAxis={X_AXIS}
/>
);
}import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
@Component({
selector: 'app-trend',
schemas: [CUSTOM_ELEMENTS_SCHEMA],
template: `
<md-line-chart
animation="draw"
animation-duration="900"
curve="smooth"
grid="both"
legend="none"
[series]="series"
[xAxis]="xAxis"
></md-line-chart>
`,
})
export class TrendComponent {
series = [{ label: 'Users', color: 'primary', data: [40, 62, 55, 78, 70, 96, 88, 110, 102, 128] }];
xAxis = { data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct'] };
}<script setup lang="ts">
const series = [{ label: 'Users', color: 'primary', data: [40, 62, 55, 78, 70, 96, 88, 110, 102, 128] }];
const xAxis = { data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct'] };
</script>
<template>
<md-line-chart
animation="draw"
animation-duration="900"
curve="smooth"
grid="both"
legend="none"
.series="series"
.xAxis="xAxis"
/>
</template><script lang="ts">
const series = [{ label: 'Users', color: 'primary', data: [40, 62, 55, 78, 70, 96, 88, 110, 102, 128] }];
const xAxis = { data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct'] };
</script>
<md-line-chart
animation="draw"
animation-duration="900"
curve="smooth"
grid="both"
legend="none"
{series}
{xAxis}
/>stagger is draw run one series at a time — line 1 completes, then line 2
starts — so the chart reads as a sequence rather than a race. animation-duration
is the time for each series, not the total, so four lines at 700ms take about
2.8 seconds end to end. Keep it for a handful of lines; past that the last one
arrives long after the reader has moved on.
The entry animation plays once on first render, so watching it again means
calling the replay() method — which needs a handle on the element rather than
a prop.
<md-line-chart id="stagger" animation="stagger" animation-duration="700"
curve="smooth" grid="horizontal" legend="bottom"
label="Units sold by region"></md-line-chart>
<md-button id="replay" variant="filled" trailing-icon="replay">Replay</md-button>
<script type="module">
const chart = document.getElementById('stagger');
chart.xAxis = { data: [0, 1, 2, 3, 4, 5, 6, 7], scale: 'value', label: 'Quarter' };
chart.yAxis = { label: 'Units (k)', min: 0 };
chart.series = [
{ label: 'North', color: 'primary', data: [12, 20, 18, 32, 28, 44, 40, 56] },
{ label: 'South', color: 'tertiary', data: [30, 26, 34, 28, 40, 36, 48, 44] },
{ label: 'East', color: 'secondary', data: [8, 14, 22, 18, 30, 34, 42, 52] },
{ label: 'West', color: 'error', data: [40, 44, 38, 46, 42, 50, 46, 58] },
];
// replay() re-runs the entrance without touching the data.
document.getElementById('replay').addEventListener('click', () => chart.replay());
</script>import { useRef } from 'react';
import { MdLineChart, MdButton } from '@awc-ui/react';
const X_AXIS = { data: [0, 1, 2, 3, 4, 5, 6, 7], scale: 'value', label: 'Quarter' };
const Y_AXIS = { label: 'Units (k)', min: 0 };
const SERIES = [
{ label: 'North', color: 'primary', data: [12, 20, 18, 32, 28, 44, 40, 56] },
{ label: 'South', color: 'tertiary', data: [30, 26, 34, 28, 40, 36, 48, 44] },
{ label: 'East', color: 'secondary', data: [8, 14, 22, 18, 30, 34, 42, 52] },
{ label: 'West', color: 'error', data: [40, 44, 38, 46, 42, 50, 46, 58] },
];
export function StaggeredChart() {
// A ref, not a prop: replay() is an @Method on the element, so it is called
// on the DOM node the wrapper renders.
const chart = useRef(null);
return (
<>
<MdLineChart
ref={chart}
animation="stagger"
animationDuration={700}
curve="smooth"
grid="horizontal"
legend="bottom"
label="Units sold by region"
series={SERIES}
xAxis={X_AXIS}
yAxis={Y_AXIS}
/>
<MdButton variant="filled" trailingIcon="replay" onClick={() => chart.current?.replay()}>
Replay
</MdButton>
</>
);
}import { Component, CUSTOM_ELEMENTS_SCHEMA, ElementRef, ViewChild } from '@angular/core';
@Component({
selector: 'app-staggered-chart',
schemas: [CUSTOM_ELEMENTS_SCHEMA],
template: `
<md-line-chart
#chart
animation="stagger"
animation-duration="700"
curve="smooth"
grid="horizontal"
legend="bottom"
label="Units sold by region"
[series]="series"
[xAxis]="xAxis"
[yAxis]="yAxis"
></md-line-chart>
<md-button variant="filled" trailing-icon="replay" (click)="replay()">Replay</md-button>
`,
})
export class StaggeredChartComponent {
@ViewChild('chart') chart!: ElementRef<HTMLElement & { replay(): Promise<void> }>;
xAxis = { data: [0, 1, 2, 3, 4, 5, 6, 7], scale: 'value', label: 'Quarter' };
yAxis = { label: 'Units (k)', min: 0 };
series = [
{ label: 'North', color: 'primary', data: [12, 20, 18, 32, 28, 44, 40, 56] },
{ label: 'South', color: 'tertiary', data: [30, 26, 34, 28, 40, 36, 48, 44] },
{ label: 'East', color: 'secondary', data: [8, 14, 22, 18, 30, 34, 42, 52] },
{ label: 'West', color: 'error', data: [40, 44, 38, 46, 42, 50, 46, 58] },
];
replay() { this.chart.nativeElement.replay(); }
}<script setup lang="ts">
import { ref } from 'vue';
const chart = ref();
const xAxis = { data: [0, 1, 2, 3, 4, 5, 6, 7], scale: 'value', label: 'Quarter' };
const yAxis = { label: 'Units (k)', min: 0 };
const series = [
{ label: 'North', color: 'primary', data: [12, 20, 18, 32, 28, 44, 40, 56] },
{ label: 'South', color: 'tertiary', data: [30, 26, 34, 28, 40, 36, 48, 44] },
{ label: 'East', color: 'secondary', data: [8, 14, 22, 18, 30, 34, 42, 52] },
{ label: 'West', color: 'error', data: [40, 44, 38, 46, 42, 50, 46, 58] },
];
</script>
<template>
<md-line-chart
ref="chart"
animation="stagger"
animation-duration="700"
curve="smooth"
grid="horizontal"
legend="bottom"
label="Units sold by region"
.series="series"
.xAxis="xAxis"
.yAxis="yAxis"
/>
<md-button variant="filled" trailing-icon="replay" @click="chart.replay()">Replay</md-button>
</template><script lang="ts">
let chart;
const xAxis = { data: [0, 1, 2, 3, 4, 5, 6, 7], scale: 'value', label: 'Quarter' };
const yAxis = { label: 'Units (k)', min: 0 };
const series = [
{ label: 'North', color: 'primary', data: [12, 20, 18, 32, 28, 44, 40, 56] },
{ label: 'South', color: 'tertiary', data: [30, 26, 34, 28, 40, 36, 48, 44] },
{ label: 'East', color: 'secondary', data: [8, 14, 22, 18, 30, 34, 42, 52] },
{ label: 'West', color: 'error', data: [40, 44, 38, 46, 42, 50, 46, 58] },
];
</script>
<md-line-chart
bind:this={chart}
animation="stagger"
animation-duration="700"
curve="smooth"
grid="horizontal"
legend="bottom"
label="Units sold by region"
{series}
{xAxis}
{yAxis}
/>
<md-button variant="filled" trailing-icon="replay" on:click={() => chart.replay()}>Replay</md-button>The engine decimates before it draws: at more points than the plot has pixels it keeps the min and max of each column, so spikes survive but the path stays cheap. You do not opt in — hand it the whole series.
<md-line-chart curve="linear" legend="none" zoom="both" label="Sensor trace"></md-line-chart>
<script type="module">
const series = [
{
label: "Signal",
color: "primary",
data: [50, 51.9, 53.8, 55.6, 57.3, 59, 60.5, 62, 63.2, 64.4, 65.3, 66.1, 66.8, 67.3, 67.6, 67.7, 67.7, 67.6, 67.4, 67, 66.6, 66.2, 65.7, 65.2, 64.7, 64.2, 63.8, 63.5, 63.3, 63.2, 63.2, 63.3, 63.6, 64, 64.6, 65.4, 66.2, 67.2, 68.4, 69.6, 70.9, 72.3, 73.8, 75.3, 76.8, 78.2, 79.7, 81, 82.3, 83.5, 84.5, 85.4, 86.2, 86.8, 87.2, 87.4, 87.5, 87.4, 87, 86.6, 86, 85.2, 84.3, 83.3, 82.2, 81.1, 79.9, 78.7, 77.5, 76.3, 75.2, 74.1, 73.1, 72.3, 71.5, 70.9, 70.5, 70.1, 70, 69.9, 70, 70.2, 70.6, 71.1, 71.6, 72.2, 72.9, 73.6, 74.3, 75, 75.6, 76.2, 76.7, 77.1, 77.4, 77.6, 77.6, 77.4, 77.1, 76.5, 75.9, 75, 74, 72.8, 71.5, 70, 68.4, 66.8, 65, 63.2, 61.4, 59.6, 57.7, 56, 54.3, 52.6, 51.1, 49.7, 48.4, 47.3, 46.3, 45.5, 44.8, 44.3, 44, 43.8, 43.7, 43.8, 44, 44.2, 44.6, 44.9, 45.3, 45.7, 46.1, 46.4, 46.7, 46.9, 47, 46.9, 46.8, 46.5, 46, 45.4, 44.6, 43.7, 42.6, 41.4, 40.1, 38.7, 37.1, 35.5, 33.8, 32.1, 30.4, 28.7, 27, 25.4, 23.9, 22.5, 21.2, 20, 19, 18.2, 17.5, 17, 16.7, 16.6, 16.6, 16.8, 17.2, 17.6, 18.3, 19, 19.8, 20.6, 21.5, 22.4, 23.4, 24.2, 25.1, 25.8, 26.5, 27.1, 27.5, 27.8, 28, 28, 27.9, 27.7, 27.3, 26.7, 26.1, 25.4, 24.5, 23.6, 22.7, 21.7, 20.8, 19.8, 18.9, 18, 17.3, 16.6, 16.1, 15.7, 15.5, 15.5, 15.6, 15.9, 16.3, 17, 17.8, 18.8, 19.9, 21.2, 22.6, 24.1, 25.6, 27.3, 28.9, 30.6, 32.3, 33.9, 35.5, 37, 38.4, 39.6, 40.8, 41.8, 42.7, 43.4, 44, 44.4, 44.6, 44.8, 44.8, 44.6, 44.4, 44.1, 43.8, 43.4, 43, 42.6, 42.2, 41.8, 41.6, 41.4, 41.4, 41.5, 41.7, 42, 42.6, 43.3, 44.1, 45.1, 46.3, 47.6, 49, 50.6, 52.2, 54, 55.8, 57.6, 59.5, 61.3, 63.1, 64.9, 66.6, 68.2, 69.6, 71, 72.2, 73.2, 74, 74.7, 75.3, 75.6, 75.8, 75.8, 75.7, 75.4, 75, 74.6, 74, 73.4, 72.7, 72.1, 71.4, 70.8, 70.3, 69.8, 69.4, 69.1, 68.9, 68.9, 69, 69.3, 69.7, 70.2, 70.9, 71.7, 72.7, 73.7, 74.8, 76, 77.3, 78.5, 79.8, 81, 82.2, 83.4, 84.4, 85.3, 86.1, 86.8, 87.3, 87.6, 87.8, 87.8, 87.6, 87.2, 86.6, 85.9, 85, 84, 82.9, 81.7, 80.3, 78.9, 77.5, 76.1, 74.7, 73.3, 71.9, 70.7, 69.5, 68.4, 67.5, 66.7, 66, 65.5, 65.1, 64.9, 64.8, 64.9, 65, 65.3, 65.7, 66.1, 66.6, 67.2, 67.7, 68.2, 68.7, 69.1, 69.5, 69.7, 69.9, 69.9, 69.7, 69.4, 68.9, 68.3, 67.5, 66.5, 65.3, 64.1, 62.6, 61.1, 59.4, 57.6, 55.8, 54, 52.1, 50.2, 48.3, 46.5, 44.8, 43.1, 41.6, 40.2, 38.9, 37.8, 36.8, 36, 35.4, 34.9, 34.6, 34.5, 34.5, 34.6, 34.8, 35.2, 35.5, 36, 36.5, 36.9, 37.4, 37.8, 38.2, 38.4, 38.6, 38.7, 38.6, 38.4, 38, 37.5, 36.9, 36.1, 35.2, 34.1, 32.9, 31.6, 30.2, 28.7, 27.2, 25.7, 24.2, 22.6, 21.2, 19.8, 18.4, 17.2, 16.1, 15.2, 14.4, 13.8, 13.4, 13.1, 13, 13.1, 13.4, 13.8, 14.4, 15.1, 16, 16.9, 18, 19.1, 20.2, 21.4, 22.5, 23.6, 24.7, 25.6, 26.5, 27.3, 28, 28.5, 28.9, 29.2, 29.3, 29.2, 29.1, 28.7, 28.3, 27.8, 27.2, 26.5, 25.8, 25, 24.3, 23.5, 22.9, 22.2, 21.7, 21.3, 21, 20.8, 20.8, 20.9, 21.2, 21.7, 22.4, 23.3, 24.3, 25.4, 26.8, 28.2, 29.8, 31.4, 33.1, 34.9, 36.7, 38.5, 40.3, 42.1, 43.8, 45.4, 46.9, 48.2, 49.5, 50.6, 51.5, 52.3, 52.9, 53.4, 53.7, 53.9, 53.9, 53.8, 53.6, 53.4, 53, 52.7, 52.3, 51.9, 51.5, 51.2, 51, 50.8, 50.7, 50.8, 51, 51.4, 51.9, 52.5, 53.3, 54.3, 55.4, 56.7, 58.1, 59.6, 61.1, 62.8, 64.5, 66.3, 68, 69.7, 71.4, 73.1, 74.6, 76.1, 77.4, 78.6, 79.6, 80.5, 81.1, 81.7, 82, 82.2, 82.1, 82, 81.7, 81.2, 80.6, 79.9, 79.2, 78.4, 77.5, 76.7, 75.8, 75, 74.2, 73.5, 72.9, 72.5, 72.1, 71.9, 71.8, 71.8, 72, 72.3, 72.8, 73.4, 74.1, 74.9, 75.8, 76.8, 77.8, 78.8, 79.9, 80.9, 81.8, 82.7, 83.5, 84.2, 84.8, 85.2, 85.4, 85.5, 85.4, 85.2, 84.7, 84.1, 83.3, 82.3, 81.2, 80, 78.6, 77.2, 75.6, 74, 72.4, 70.8, 69.2, 67.6, 66.1, 64.6, 63.3, 62.1, 61, 60, 59.2, 58.5, 58, 57.6, 57.4, 57.4, 57.4, 57.6, 57.8, 58.1, 58.5, 58.9, 59.4, 59.8, 60.2, 60.5, 60.8, 60.9, 60.9, 60.9, 60.6, 60.2, 59.7, 59, 58.1, 57.1, 55.9, 54.6, 53.1, 51.5, 49.8, 48.1, 46.2, 44.4, 42.5, 40.7, 38.8, 37.1, 35.4, 33.8, 32.3, 31, 29.8, 28.7, 27.9, 27.2, 26.7, 26.3, 26.1, 26.1, 26.2, 26.4, 26.8, 27.2, 27.8, 28.3, 28.9, 29.6, 30.2, 30.7, 31.2, 31.7, 32, 32.2, 32.3, 32.2, 32.1, 31.7, 31.2, 30.6, 29.9, 29, 28, 26.9, 25.7, 24.4, 23.1, 21.8, 20.5, 19.2, 17.9, 16.7, 15.7, 14.7, 13.8, 13.1, 12.6, 12.2, 12, 12, 12.2, 12.6, 13.1, 13.8, 14.6, 15.6, 16.7, 17.9, 19.2, 20.5, 21.9, 23.2, 24.6, 25.9, 27.2, 28.4, 29.5, 30.5, 31.4, 32.1, 32.7, 33.2, 33.5, 33.6, 33.6, 33.5, 33.3, 33, 32.5, 32, 31.5, 30.9, 30.3, 29.8, 29.3, 28.8, 28.5, 28.2, 28.1, 28.1, 28.2, 28.5, 29, 29.6, 30.5, 31.5, 32.6, 33.9, 35.3, 36.9, 38.6, 40.3, 42.1, 44, 45.9, 47.8, 49.6, 51.4, 53.1, 54.8, 56.3, 57.7, 58.9, 60, 61, 61.7, 62.4, 62.8, 63.1, 63.2, 63.2, 63.1, 62.9, 62.6, 62.2, 61.8, 61.3, 60.9, 60.5, 60.1, 59.8, 59.5, 59.4, 59.4, 59.5, 59.8, 60.2, 60.8, 61.5, 62.3, 63.3, 64.5, 65.7, 67.1, 68.5, 70, 71.6, 73.2, 74.8, 76.3, 77.9, 79.3, 80.7, 81.9, 83, 84, 84.8, 85.5, 85.9, 86.2, 86.3, 86.3, 86, 85.6, 85.1, 84.4, 83.6, 82.7, 81.7, 80.6, 79.6, 78.5, 77.4, 76.3, 75.4, 74.4, 73.6, 72.9, 72.3, 71.9, 71.6, 71.4, 71.4, 71.5, 71.7, 72.1, 72.6, 73.2, 73.9, 74.6, 75.4, 76.2, 77, 77.8, 78.5, 79.2, 79.7, 80.2, 80.5, 80.7, 80.8, 80.6, 80.3, 79.8, 79.2, 78.4, 77.4, 76.2, 74.9, 73.5, 71.9, 70.3, 68.6, 66.8, 65.1, 63.3, 61.5, 59.8, 58.2, 56.6, 55.1, 53.8, 52.6, 51.5, 50.6, 49.9, 49.3, 48.9, 48.6, 48.5, 48.4, 48.5, 48.7, 49, 49.4, 49.7, 50.1, 50.5, 50.9, 51.2, 51.4, 51.5, 51.6, 51.5, 51.2, 50.8, 50.3, 49.6, 48.7, 47.7, 46.6, 45.3, 43.8, 42.3, 40.7, 39, 37.2, 35.5, 33.7, 31.9, 30.2, 28.5, 27, 25.5, 24.2, 23, 21.9, 21, 20.3, 19.8, 19.4, 19.3, 19.2, 19.4, 19.7, 20.1, 20.7, 21.3, 22, 22.8, 23.6, 24.4, 25.2, 25.9, 26.6, 27.2, 27.8, 28.2, 28.5, 28.6, 28.6, 28.5, 28.2, 27.8, 27.3, 26.6, 25.8, 24.9, 24, 22.9, 21.9, 20.8, 19.7, 18.6, 17.6, 16.7, 15.8, 15.1, 14.5, 14.1, 13.8, 13.7, 13.7, 14, 14.4, 15, 15.7, 16.7, 17.8, 19, 20.3, 21.7, 23.2, 24.8, 26.3, 27.9, 29.5, 31, 32.5, 33.9, 35.2, 36.3, 37.4, 38.3, 39, 39.6, 40.1, 40.4, 40.6, 40.6, 40.5, 40.3, 40, 39.6, 39.2, 38.8, 38.3, 37.9, 37.5, 37.2, 36.9, 36.8, 36.7, 36.8, 37.1, 37.5, 38.1, 38.8, 39.7, 40.7, 41.9, 43.3, 44.8, 46.4, 48.1, 49.9, 51.7, 53.6, 55.5, 57.3, 59.2, 60.9, 62.6, 64.2, 65.7, 67, 68.2, 69.3, 70.1, 70.8, 71.4, 71.7, 71.9, 71.9, 71.8, 71.6, 71.3, 70.9, 70.4, 69.8, 69.2, 68.7, 68.1, 67.6, 67.2, 66.8, 66.5, 66.4, 66.4, 66.5, 66.7, 67.1, 67.7, 68.4, 69.2, 70.2, 71.2, 72.4, 73.7, 75, 76.4, 77.7, 79.1, 80.5, 81.8, 83, 84.1, 85.1, 86, 86.7, 87.3, 87.7, 87.9, 88, 87.8, 87.5, 87, 86.4, 85.6, 84.6, 83.6, 82.4, 81.2, 79.9, 78.6, 77.3, 76, 74.7, 73.5, 72.3, 71.3, 70.4, 69.6, 68.9, 68.4, 68, 67.8, 67.7, 67.8, 67.9, 68.2, 68.6, 69.1, 69.7, 70.3, 70.9, 71.5, 72.1, 72.6, 73.1, 73.5, 73.8, 73.9, 73.9, 73.8, 73.5, 73, 72.3, 71.5, 70.5, 69.4, 68.1, 66.7, 65.1, 63.4, 61.7, 59.9, 58, 56.2, 54.3, 52.5, 50.7, 49, 47.4, 45.9, 44.5, 43.3, 42.2, 41.3, 40.5, 39.9, 39.5, 39.2, 39.1, 39.1, 39.2, 39.4, 39.7, 40.1, 40.5, 40.9, 41.4, 41.7, 42.1, 42.4, 42.6, 42.6, 42.6, 42.4, 42.1, 41.6, 41, 40.3, 39.3, 38.3, 37.1, 35.8, 34.4, 32.9, 31.3, 29.7, 28.1, 26.4, 24.8, 23.3, 21.8, 20.4, 19.1, 18, 17, 16.1, 15.4, 14.9, 14.6, 14.5, 14.5, 14.7, 15.1, 15.6, 16.3, 17, 17.9, 18.8, 19.8, 20.9, 21.9, 22.9, 23.9, 24.8, 25.6, 26.4, 27, 27.5, 27.9, 28.1, 28.2, 28.2, 28, 27.7, 27.2, 26.6, 26, 25.2, 24.4, 23.6, 22.7, 21.9, 21, 20.3, 19.6, 19, 18.5, 18.1, 17.9, 17.8, 17.9, 18.2, 18.7, 19.3, 20.1, 21.1, 22.3, 23.5, 25, 26.5, 28.1, 29.8, 31.5, 33.2, 35, 36.7, 38.4, 40, 41.5, 42.9, 44.2, 45.4, 46.4, 47.2, 47.9, 48.5, 48.9, 49.1, 49.2, 49.2, 49.1, 48.9, 48.6, 48.2, 47.8, 47.4, 47.1, 46.7, 46.4, 46.2, 46.1, 46.1, 46.2, 46.5, 46.9, 47.5, 48.2, 49.1, 50.2, 51.4, 52.7, 54.2, 55.8, 57.4, 59.2, 60.9, 62.7, 64.5, 66.3, 68.1, 69.8, 71.4, 72.8, 74.2, 75.4, 76.5, 77.4, 78.1, 78.6, 79, 79.2, 79.2, 79.1, 78.8, 78.4, 77.9, 77.3, 76.7, 75.9, 75.2, 74.4, 73.7, 73, 72.4, 71.8, 71.4, 71, 70.8, 70.7, 70.8, 71, 71.4, 71.8, 72.5, 73.2, 74.1, 75, 76.1, 77.2, 78.3, 79.5, 80.6, 81.7, 82.8, 83.7, 84.6, 85.4, 86, 86.5, 86.8, 87, 86.9, 86.7, 86.3, 85.8, 85, 84.1, 83.1, 81.9, 80.6, 79.2, 77.8, 76.3, 74.7, 73.2, 71.7, 70.2, 68.8, 67.5, 66.3, 65.1, 64.2, 63.3, 62.6, 62.1, 61.7, 61.4, 61.3, 61.4, 61.5, 61.8, 62.1, 62.5, 62.9, 63.4, 63.9, 64.3, 64.7, 65.1, 65.3, 65.5, 65.5, 65.4, 65.2, 64.7, 64.2, 63.4, 62.5, 61.4, 60.2, 58.8, 57.3, 55.7, 54, 52.2, 50.4, 48.5, 46.6, 44.7, 42.9, 41.1, 39.4, 37.8, 36.4, 35, 33.8, 32.8, 31.9, 31.2, 30.7, 30.4, 30.2, 30.1, 30.2, 30.4, 30.7, 31.1, 31.6, 32.1, 32.7, 33.2, 33.7, 34.2, 34.6, 34.9, 35.1, 35.2, 35.1, 35, 34.6, 34.2, 33.5, 32.8, 31.9, 30.8, 29.7, 28.4, 27.1, 25.7, 24.3, 22.9, 21.5, 20.1, 18.7, 17.5, 16.3, 15.2, 14.3, 13.6, 12.9, 12.5, 12.3, 12.2, 12.3, 12.6, 13, 13.7, 14.4, 15.3, 16.3, 17.4, 18.6, 19.8, 21.1, 22.4, 23.6, 24.8, 26, 27, 28, 28.9, 29.6, 30.2, 30.6, 30.9, 31.1, 31.1, 31, 30.7, 30.4, 29.9, 29.4, 28.8, 28.1, 27.5, 26.8, 26.2, 25.6, 25.1, 24.7, 24.4, 24.2, 24.2, 24.3, 24.6, 25.1, 25.7, 26.5, 27.5, 28.7, 30, 31.4, 33, 34.6, 36.3, 38.2, 40, 41.8, 43.7, 45.5, 47.3, 49, 50.5, 52, 53.4, 54.6, 55.6, 56.5, 57.2, 57.8, 58.2, 58.5, 58.6, 58.6, 58.5, 58.2, 57.9, 57.6, 57.2, 56.8, 56.3, 56, 55.7, 55.4, 55.3, 55.2, 55.3, 55.5, 55.9, 56.4, 57.1, 57.9, 58.9, 60, 61.3, 62.6, 64.1, 65.6, 67.2, 68.9, 70.6, 72.2, 73.9, 75.5, 77, 78.4, 79.7, 80.9, 81.9, 82.8, 83.5, 84, 84.4, 84.5, 84.5, 84.3, 84, 83.5, 82.9, 82.2, 81.4, 80.5, 79.5, 78.6, 77.6, 76.6, 75.7, 74.9, 74.1, 73.4, 72.9, 72.4, 72.2, 72, 72, 72.1, 72.4, 72.8, 73.3, 74, 74.7, 75.5, 76.4, 77.3, 78.2, 79.1, 80, 80.8, 81.5, 82.2, 82.7, 83.1, 83.4, 83.4, 83.3, 83.1, 82.6, 82, 81.2, 80.3, 79.2, 77.9, 76.5, 75, 73.4, 71.8, 70.1, 68.4, 66.7, 65, 63.3, 61.8, 60.3, 58.9, 57.7, 56.6, 55.6, 54.8, 54.1, 53.6, 53.3, 53.1, 53, 53.1, 53.2, 53.5, 53.8, 54.2, 54.6, 55, 55.3, 55.7, 56, 56.2, 56.3, 56.2, 56.1, 55.8, 55.3, 54.7, 53.9, 53, 51.9, 50.7, 49.3, 47.8, 46.2, 44.5, 42.8, 41, 39.1, 37.3, 35.5, 33.7, 32, 30.4, 28.9, 27.6, 26.3, 25.3, 24.4, 23.6, 23.1, 22.7, 22.5, 22.4, 22.5, 22.8, 23.1, 23.6, 24.2, 24.8, 25.5, 26.2, 26.9, 27.6, 28.2, 28.8, 29.3, 29.7, 29.9, 30.1, 30.1, 29.9, 29.6, 29.2, 28.6, 27.9, 27.1, 26.2, 25.1, 24, 22.9, 21.7, 20.5, 19.3, 18.1, 17, 16, 15.1, 14.3, 13.6, 13.1, 12.7, 12.5, 12.5, 12.7, 13.1, 13.6, 14.3, 15.2, 16.2, 17.3, 18.6, 19.9, 21.4, 22.8, 24.3, 25.8, 27.2, 28.7, 30, 31.3, 32.4, 33.5, 34.4, 35.2, 35.8, 36.3, 36.6, 36.8, 36.9, 36.8, 36.6, 36.3, 35.9, 35.5, 35, 34.5, 34, 33.5, 33.1, 32.7, 32.5, 32.3, 32.3, 32.4, 32.6, 33.1, 33.7, 34.4, 35.3, 36.4, 37.7, 39, 40.6, 42.2, 43.9, 45.7, 47.6, 49.4, 51.3, 53.2, 55, 56.8, 58.5, 60.1, 61.6, 62.9, 64.1, 65.1, 65.9, 66.6, 67.1, 67.5, 67.7, 67.7, 67.7, 67.4, 67.1, 66.8, 66.3, 65.8, 65.3, 64.8, 64.3, 63.9, 63.6, 63.3, 63.2, 63.2, 63.3, 63.5, 63.9, 64.4, 65.1, 66, 66.9, 68, 69.2, 70.5, 71.9, 73.4, 74.8, 76.3, 77.8, 79.2, 80.6, 81.9, 83.1, 84.2, 85.2, 86, 86.6, 87.1, 87.4, 87.5, 87.4, 87.2, 86.7, 86.2, 85.4, 84.6, 83.6, 82.5, 81.4, 80.2, 79, 77.8, 76.6, 75.5, 74.4, 73.4, 72.5, 71.8, 71.1, 70.6, 70.2, 70, 69.9, 70, 70.2, 70.5, 70.9, 71.4, 72, 72.7, 73.4, 74.1, 74.8, 75.5, 76.1, 76.6, 77, 77.3, 77.5, 77.6, 77.5, 77.2, 76.7, 76.1, 75.3, 74.3, 73.2, 71.9, 70.5, 68.9, 67.3, 65.5, 63.8, 61.9, 60.1, 58.3, 56.5, 54.7, 53.1, 51.5, 50.1, 48.8, 47.6, 46.6, 45.7, 45, 44.5, 44.1, 43.8, 43.7, 43.8, 43.9, 44.1, 44.5, 44.8, 45.2, 45.6, 46, 46.3, 46.6, 46.9, 47, 47, 46.8, 46.6, 46.2, 45.6, 44.9, 44, 43, 41.8, 40.5, 39.1, 37.6, 36, 34.3, 32.6, 30.9, 29.2, 27.5, 25.9, 24.4, 22.9, 21.6, 20.4, 19.3, 18.4, 17.7, 17.2, 16.8, 16.6, 16.6, 16.7, 17, 17.5, 18.1, 18.8, 19.5, 20.4, 21.3, 22.2, 23.1, 24, 24.8, 25.6, 26.3, 26.9, 27.4, 27.7, 28, 28, 28, 27.7, 27.4, 26.9, 26.3, 25.6, 24.8, 23.9, 23, 22, 21, 20.1, 19.1, 18.3, 17.5, 16.8, 16.3, 15.8, 15.6, 15.5, 15.5, 15.8, 16.2, 16.8, 17.5, 18.5, 19.6, 20.8, 22.2, 23.6, 25.2, 26.8, 28.4, 30.1, 31.8, 33.4, 35, 36.5, 38, 39.3, 40.5, 41.5, 42.4, 43.2, 43.8, 44.3, 44.6, 44.7, 44.8, 44.7, 44.5, 44.2, 43.9]
}
];
const xAxis = {
data: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "100", "101", "102", "103", "104", "105", "106", "107", "108", "109", "110", "111", "112", "113", "114", "115", "116", "117", "118", "119", "120", "121", "122", "123", "124", "125", "126", "127", "128", "129", "130", "131", "132", "133", "134", "135", "136", "137", "138", "139", "140", "141", "142", "143", "144", "145", "146", "147", "148", "149", "150", "151", "152", "153", "154", "155", "156", "157", "158", "159", "160", "161", "162", "163", "164", "165", "166", "167", "168", "169", "170", "171", "172", "173", "174", "175", "176", "177", "178", "179", "180", "181", "182", "183", "184", "185", "186", "187", "188", "189", "190", "191", "192", "193", "194", "195", "196", "197", "198", "199", "200", "201", "202", "203", "204", "205", "206", "207", "208", "209", "210", "211", "212", "213", "214", "215", "216", "217", "218", "219", "220", "221", "222", "223", "224", "225", "226", "227", "228", "229", "230", "231", "232", "233", "234", "235", "236", "237", "238", "239", "240", "241", "242", "243", "244", "245", "246", "247", "248", "249", "250", "251", "252", "253", "254", "255", "256", "257", "258", "259", "260", "261", "262", "263", "264", "265", "266", "267", "268", "269", "270", "271", "272", "273", "274", "275", "276", "277", "278", "279", "280", "281", "282", "283", "284", "285", "286", "287", "288", "289", "290", "291", "292", "293", "294", "295", "296", "297", "298", "299", "300", "301", "302", "303", "304", "305", "306", "307", "308", "309", "310", "311", "312", "313", "314", "315", "316", "317", "318", "319", "320", "321", "322", "323", "324", "325", "326", "327", "328", "329", "330", "331", "332", "333", "334", "335", "336", "337", "338", "339", "340", "341", "342", "343", "344", "345", "346", "347", "348", "349", "350", "351", "352", "353", "354", "355", "356", "357", "358", "359", "360", "361", "362", "363", "364", "365", "366", "367", "368", "369", "370", "371", "372", "373", "374", "375", "376", "377", "378", "379", "380", "381", "382", "383", "384", "385", "386", "387", "388", "389", "390", "391", "392", "393", "394", "395", "396", "397", "398", "399", "400", "401", "402", "403", "404", "405", "406", "407", "408", "409", "410", "411", "412", "413", "414", "415", "416", "417", "418", "419", "420", "421", "422", "423", "424", "425", "426", "427", "428", "429", "430", "431", "432", "433", "434", "435", "436", "437", "438", "439", "440", "441", "442", "443", "444", "445", "446", "447", "448", "449", "450", "451", "452", "453", "454", "455", "456", "457", "458", "459", "460", "461", "462", "463", "464", "465", "466", "467", "468", "469", "470", "471", "472", "473", "474", "475", "476", "477", "478", "479", "480", "481", "482", "483", "484", "485", "486", "487", "488", "489", "490", "491", "492", "493", "494", "495", "496", "497", "498", "499", "500", "501", "502", "503", "504", "505", "506", "507", "508", "509", "510", "511", "512", "513", "514", "515", "516", "517", "518", "519", "520", "521", "522", "523", "524", "525", "526", "527", "528", "529", "530", "531", "532", "533", "534", "535", "536", "537", "538", "539", "540", "541", "542", "543", "544", "545", "546", "547", "548", "549", "550", "551", "552", "553", "554", "555", "556", "557", "558", "559", "560", "561", "562", "563", "564", "565", "566", "567", "568", "569", "570", "571", "572", "573", "574", "575", "576", "577", "578", "579", "580", "581", "582", "583", "584", "585", "586", "587", "588", "589", "590", "591", "592", "593", "594", "595", "596", "597", "598", "599", "600", "601", "602", "603", "604", "605", "606", "607", "608", "609", "610", "611", "612", "613", "614", "615", "616", "617", "618", "619", "620", "621", "622", "623", "624", "625", "626", "627", "628", "629", "630", "631", "632", "633", "634", "635", "636", "637", "638", "639", "640", "641", "642", "643", "644", "645", "646", "647", "648", "649", "650", "651", "652", "653", "654", "655", "656", "657", "658", "659", "660", "661", "662", "663", "664", "665", "666", "667", "668", "669", "670", "671", "672", "673", "674", "675", "676", "677", "678", "679", "680", "681", "682", "683", "684", "685", "686", "687", "688", "689", "690", "691", "692", "693", "694", "695", "696", "697", "698", "699", "700", "701", "702", "703", "704", "705", "706", "707", "708", "709", "710", "711", "712", "713", "714", "715", "716", "717", "718", "719", "720", "721", "722", "723", "724", "725", "726", "727", "728", "729", "730", "731", "732", "733", "734", "735", "736", "737", "738", "739", "740", "741", "742", "743", "744", "745", "746", "747", "748", "749", "750", "751", "752", "753", "754", "755", "756", "757", "758", "759", "760", "761", "762", "763", "764", "765", "766", "767", "768", "769", "770", "771", "772", "773", "774", "775", "776", "777", "778", "779", "780", "781", "782", "783", "784", "785", "786", "787", "788", "789", "790", "791", "792", "793", "794", "795", "796", "797", "798", "799", "800", "801", "802", "803", "804", "805", "806", "807", "808", "809", "810", "811", "812", "813", "814", "815", "816", "817", "818", "819", "820", "821", "822", "823", "824", "825", "826", "827", "828", "829", "830", "831", "832", "833", "834", "835", "836", "837", "838", "839", "840", "841", "842", "843", "844", "845", "846", "847", "848", "849", "850", "851", "852", "853", "854", "855", "856", "857", "858", "859", "860", "861", "862", "863", "864", "865", "866", "867", "868", "869", "870", "871", "872", "873", "874", "875", "876", "877", "878", "879", "880", "881", "882", "883", "884", "885", "886", "887", "888", "889", "890", "891", "892", "893", "894", "895", "896", "897", "898", "899", "900", "901", "902", "903", "904", "905", "906", "907", "908", "909", "910", "911", "912", "913", "914", "915", "916", "917", "918", "919", "920", "921", "922", "923", "924", "925", "926", "927", "928", "929", "930", "931", "932", "933", "934", "935", "936", "937", "938", "939", "940", "941", "942", "943", "944", "945", "946", "947", "948", "949", "950", "951", "952", "953", "954", "955", "956", "957", "958", "959", "960", "961", "962", "963", "964", "965", "966", "967", "968", "969", "970", "971", "972", "973", "974", "975", "976", "977", "978", "979", "980", "981", "982", "983", "984", "985", "986", "987", "988", "989", "990", "991", "992", "993", "994", "995", "996", "997", "998", "999", "1000", "1001", "1002", "1003", "1004", "1005", "1006", "1007", "1008", "1009", "1010", "1011", "1012", "1013", "1014", "1015", "1016", "1017", "1018", "1019", "1020", "1021", "1022", "1023", "1024", "1025", "1026", "1027", "1028", "1029", "1030", "1031", "1032", "1033", "1034", "1035", "1036", "1037", "1038", "1039", "1040", "1041", "1042", "1043", "1044", "1045", "1046", "1047", "1048", "1049", "1050", "1051", "1052", "1053", "1054", "1055", "1056", "1057", "1058", "1059", "1060", "1061", "1062", "1063", "1064", "1065", "1066", "1067", "1068", "1069", "1070", "1071", "1072", "1073", "1074", "1075", "1076", "1077", "1078", "1079", "1080", "1081", "1082", "1083", "1084", "1085", "1086", "1087", "1088", "1089", "1090", "1091", "1092", "1093", "1094", "1095", "1096", "1097", "1098", "1099", "1100", "1101", "1102", "1103", "1104", "1105", "1106", "1107", "1108", "1109", "1110", "1111", "1112", "1113", "1114", "1115", "1116", "1117", "1118", "1119", "1120", "1121", "1122", "1123", "1124", "1125", "1126", "1127", "1128", "1129", "1130", "1131", "1132", "1133", "1134", "1135", "1136", "1137", "1138", "1139", "1140", "1141", "1142", "1143", "1144", "1145", "1146", "1147", "1148", "1149", "1150", "1151", "1152", "1153", "1154", "1155", "1156", "1157", "1158", "1159", "1160", "1161", "1162", "1163", "1164", "1165", "1166", "1167", "1168", "1169", "1170", "1171", "1172", "1173", "1174", "1175", "1176", "1177", "1178", "1179", "1180", "1181", "1182", "1183", "1184", "1185", "1186", "1187", "1188", "1189", "1190", "1191", "1192", "1193", "1194", "1195", "1196", "1197", "1198", "1199", "1200", "1201", "1202", "1203", "1204", "1205", "1206", "1207", "1208", "1209", "1210", "1211", "1212", "1213", "1214", "1215", "1216", "1217", "1218", "1219", "1220", "1221", "1222", "1223", "1224", "1225", "1226", "1227", "1228", "1229", "1230", "1231", "1232", "1233", "1234", "1235", "1236", "1237", "1238", "1239", "1240", "1241", "1242", "1243", "1244", "1245", "1246", "1247", "1248", "1249", "1250", "1251", "1252", "1253", "1254", "1255", "1256", "1257", "1258", "1259", "1260", "1261", "1262", "1263", "1264", "1265", "1266", "1267", "1268", "1269", "1270", "1271", "1272", "1273", "1274", "1275", "1276", "1277", "1278", "1279", "1280", "1281", "1282", "1283", "1284", "1285", "1286", "1287", "1288", "1289", "1290", "1291", "1292", "1293", "1294", "1295", "1296", "1297", "1298", "1299", "1300", "1301", "1302", "1303", "1304", "1305", "1306", "1307", "1308", "1309", "1310", "1311", "1312", "1313", "1314", "1315", "1316", "1317", "1318", "1319", "1320", "1321", "1322", "1323", "1324", "1325", "1326", "1327", "1328", "1329", "1330", "1331", "1332", "1333", "1334", "1335", "1336", "1337", "1338", "1339", "1340", "1341", "1342", "1343", "1344", "1345", "1346", "1347", "1348", "1349", "1350", "1351", "1352", "1353", "1354", "1355", "1356", "1357", "1358", "1359", "1360", "1361", "1362", "1363", "1364", "1365", "1366", "1367", "1368", "1369", "1370", "1371", "1372", "1373", "1374", "1375", "1376", "1377", "1378", "1379", "1380", "1381", "1382", "1383", "1384", "1385", "1386", "1387", "1388", "1389", "1390", "1391", "1392", "1393", "1394", "1395", "1396", "1397", "1398", "1399", "1400", "1401", "1402", "1403", "1404", "1405", "1406", "1407", "1408", "1409", "1410", "1411", "1412", "1413", "1414", "1415", "1416", "1417", "1418", "1419", "1420", "1421", "1422", "1423", "1424", "1425", "1426", "1427", "1428", "1429", "1430", "1431", "1432", "1433", "1434", "1435", "1436", "1437", "1438", "1439", "1440", "1441", "1442", "1443", "1444", "1445", "1446", "1447", "1448", "1449", "1450", "1451", "1452", "1453", "1454", "1455", "1456", "1457", "1458", "1459", "1460", "1461", "1462", "1463", "1464", "1465", "1466", "1467", "1468", "1469", "1470", "1471", "1472", "1473", "1474", "1475", "1476", "1477", "1478", "1479", "1480", "1481", "1482", "1483", "1484", "1485", "1486", "1487", "1488", "1489", "1490", "1491", "1492", "1493", "1494", "1495", "1496", "1497", "1498", "1499", "1500", "1501", "1502", "1503", "1504", "1505", "1506", "1507", "1508", "1509", "1510", "1511", "1512", "1513", "1514", "1515", "1516", "1517", "1518", "1519", "1520", "1521", "1522", "1523", "1524", "1525", "1526", "1527", "1528", "1529", "1530", "1531", "1532", "1533", "1534", "1535", "1536", "1537", "1538", "1539", "1540", "1541", "1542", "1543", "1544", "1545", "1546", "1547", "1548", "1549", "1550", "1551", "1552", "1553", "1554", "1555", "1556", "1557", "1558", "1559", "1560", "1561", "1562", "1563", "1564", "1565", "1566", "1567", "1568", "1569", "1570", "1571", "1572", "1573", "1574", "1575", "1576", "1577", "1578", "1579", "1580", "1581", "1582", "1583", "1584", "1585", "1586", "1587", "1588", "1589", "1590", "1591", "1592", "1593", "1594", "1595", "1596", "1597", "1598", "1599", "1600", "1601", "1602", "1603", "1604", "1605", "1606", "1607", "1608", "1609", "1610", "1611", "1612", "1613", "1614", "1615", "1616", "1617", "1618", "1619", "1620", "1621", "1622", "1623", "1624", "1625", "1626", "1627", "1628", "1629", "1630", "1631", "1632", "1633", "1634", "1635", "1636", "1637", "1638", "1639", "1640", "1641", "1642", "1643", "1644", "1645", "1646", "1647", "1648", "1649", "1650", "1651", "1652", "1653", "1654", "1655", "1656", "1657", "1658", "1659", "1660", "1661", "1662", "1663", "1664", "1665", "1666", "1667", "1668", "1669", "1670", "1671", "1672", "1673", "1674", "1675", "1676", "1677", "1678", "1679", "1680", "1681", "1682", "1683", "1684", "1685", "1686", "1687", "1688", "1689", "1690", "1691", "1692", "1693", "1694", "1695", "1696", "1697", "1698", "1699", "1700", "1701", "1702", "1703", "1704", "1705", "1706", "1707", "1708", "1709", "1710", "1711", "1712", "1713", "1714", "1715", "1716", "1717", "1718", "1719", "1720", "1721", "1722", "1723", "1724", "1725", "1726", "1727", "1728", "1729", "1730", "1731", "1732", "1733", "1734", "1735", "1736", "1737", "1738", "1739", "1740", "1741", "1742", "1743", "1744", "1745", "1746", "1747", "1748", "1749", "1750", "1751", "1752", "1753", "1754", "1755", "1756", "1757", "1758", "1759", "1760", "1761", "1762", "1763", "1764", "1765", "1766", "1767", "1768", "1769", "1770", "1771", "1772", "1773", "1774", "1775", "1776", "1777", "1778", "1779", "1780", "1781", "1782", "1783", "1784", "1785", "1786", "1787", "1788", "1789", "1790", "1791", "1792", "1793", "1794", "1795", "1796", "1797", "1798", "1799", "1800", "1801", "1802", "1803", "1804", "1805", "1806", "1807", "1808", "1809", "1810", "1811", "1812", "1813", "1814", "1815", "1816", "1817", "1818", "1819", "1820", "1821", "1822", "1823", "1824", "1825", "1826", "1827", "1828", "1829", "1830", "1831", "1832", "1833", "1834", "1835", "1836", "1837", "1838", "1839", "1840", "1841", "1842", "1843", "1844", "1845", "1846", "1847", "1848", "1849", "1850", "1851", "1852", "1853", "1854", "1855", "1856", "1857", "1858", "1859", "1860", "1861", "1862", "1863", "1864", "1865", "1866", "1867", "1868", "1869", "1870", "1871", "1872", "1873", "1874", "1875", "1876", "1877", "1878", "1879", "1880", "1881", "1882", "1883", "1884", "1885", "1886", "1887", "1888", "1889", "1890", "1891", "1892", "1893", "1894", "1895", "1896", "1897", "1898", "1899", "1900", "1901", "1902", "1903", "1904", "1905", "1906", "1907", "1908", "1909", "1910", "1911", "1912", "1913", "1914", "1915", "1916", "1917", "1918", "1919", "1920", "1921", "1922", "1923", "1924", "1925", "1926", "1927", "1928", "1929", "1930", "1931", "1932", "1933", "1934", "1935", "1936", "1937", "1938", "1939", "1940", "1941", "1942", "1943", "1944", "1945", "1946", "1947", "1948", "1949", "1950", "1951", "1952", "1953", "1954", "1955", "1956", "1957", "1958", "1959", "1960", "1961", "1962", "1963", "1964", "1965", "1966", "1967", "1968", "1969", "1970", "1971", "1972", "1973", "1974", "1975", "1976", "1977", "1978", "1979", "1980", "1981", "1982", "1983", "1984", "1985", "1986", "1987", "1988", "1989", "1990", "1991", "1992", "1993", "1994", "1995", "1996", "1997", "1998", "1999"],
hideTicks: true
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "Signal",
color: "primary",
data: [50, 51.9, 53.8, 55.6, 57.3, 59, 60.5, 62, 63.2, 64.4, 65.3, 66.1, 66.8, 67.3, 67.6, 67.7, 67.7, 67.6, 67.4, 67, 66.6, 66.2, 65.7, 65.2, 64.7, 64.2, 63.8, 63.5, 63.3, 63.2, 63.2, 63.3, 63.6, 64, 64.6, 65.4, 66.2, 67.2, 68.4, 69.6, 70.9, 72.3, 73.8, 75.3, 76.8, 78.2, 79.7, 81, 82.3, 83.5, 84.5, 85.4, 86.2, 86.8, 87.2, 87.4, 87.5, 87.4, 87, 86.6, 86, 85.2, 84.3, 83.3, 82.2, 81.1, 79.9, 78.7, 77.5, 76.3, 75.2, 74.1, 73.1, 72.3, 71.5, 70.9, 70.5, 70.1, 70, 69.9, 70, 70.2, 70.6, 71.1, 71.6, 72.2, 72.9, 73.6, 74.3, 75, 75.6, 76.2, 76.7, 77.1, 77.4, 77.6, 77.6, 77.4, 77.1, 76.5, 75.9, 75, 74, 72.8, 71.5, 70, 68.4, 66.8, 65, 63.2, 61.4, 59.6, 57.7, 56, 54.3, 52.6, 51.1, 49.7, 48.4, 47.3, 46.3, 45.5, 44.8, 44.3, 44, 43.8, 43.7, 43.8, 44, 44.2, 44.6, 44.9, 45.3, 45.7, 46.1, 46.4, 46.7, 46.9, 47, 46.9, 46.8, 46.5, 46, 45.4, 44.6, 43.7, 42.6, 41.4, 40.1, 38.7, 37.1, 35.5, 33.8, 32.1, 30.4, 28.7, 27, 25.4, 23.9, 22.5, 21.2, 20, 19, 18.2, 17.5, 17, 16.7, 16.6, 16.6, 16.8, 17.2, 17.6, 18.3, 19, 19.8, 20.6, 21.5, 22.4, 23.4, 24.2, 25.1, 25.8, 26.5, 27.1, 27.5, 27.8, 28, 28, 27.9, 27.7, 27.3, 26.7, 26.1, 25.4, 24.5, 23.6, 22.7, 21.7, 20.8, 19.8, 18.9, 18, 17.3, 16.6, 16.1, 15.7, 15.5, 15.5, 15.6, 15.9, 16.3, 17, 17.8, 18.8, 19.9, 21.2, 22.6, 24.1, 25.6, 27.3, 28.9, 30.6, 32.3, 33.9, 35.5, 37, 38.4, 39.6, 40.8, 41.8, 42.7, 43.4, 44, 44.4, 44.6, 44.8, 44.8, 44.6, 44.4, 44.1, 43.8, 43.4, 43, 42.6, 42.2, 41.8, 41.6, 41.4, 41.4, 41.5, 41.7, 42, 42.6, 43.3, 44.1, 45.1, 46.3, 47.6, 49, 50.6, 52.2, 54, 55.8, 57.6, 59.5, 61.3, 63.1, 64.9, 66.6, 68.2, 69.6, 71, 72.2, 73.2, 74, 74.7, 75.3, 75.6, 75.8, 75.8, 75.7, 75.4, 75, 74.6, 74, 73.4, 72.7, 72.1, 71.4, 70.8, 70.3, 69.8, 69.4, 69.1, 68.9, 68.9, 69, 69.3, 69.7, 70.2, 70.9, 71.7, 72.7, 73.7, 74.8, 76, 77.3, 78.5, 79.8, 81, 82.2, 83.4, 84.4, 85.3, 86.1, 86.8, 87.3, 87.6, 87.8, 87.8, 87.6, 87.2, 86.6, 85.9, 85, 84, 82.9, 81.7, 80.3, 78.9, 77.5, 76.1, 74.7, 73.3, 71.9, 70.7, 69.5, 68.4, 67.5, 66.7, 66, 65.5, 65.1, 64.9, 64.8, 64.9, 65, 65.3, 65.7, 66.1, 66.6, 67.2, 67.7, 68.2, 68.7, 69.1, 69.5, 69.7, 69.9, 69.9, 69.7, 69.4, 68.9, 68.3, 67.5, 66.5, 65.3, 64.1, 62.6, 61.1, 59.4, 57.6, 55.8, 54, 52.1, 50.2, 48.3, 46.5, 44.8, 43.1, 41.6, 40.2, 38.9, 37.8, 36.8, 36, 35.4, 34.9, 34.6, 34.5, 34.5, 34.6, 34.8, 35.2, 35.5, 36, 36.5, 36.9, 37.4, 37.8, 38.2, 38.4, 38.6, 38.7, 38.6, 38.4, 38, 37.5, 36.9, 36.1, 35.2, 34.1, 32.9, 31.6, 30.2, 28.7, 27.2, 25.7, 24.2, 22.6, 21.2, 19.8, 18.4, 17.2, 16.1, 15.2, 14.4, 13.8, 13.4, 13.1, 13, 13.1, 13.4, 13.8, 14.4, 15.1, 16, 16.9, 18, 19.1, 20.2, 21.4, 22.5, 23.6, 24.7, 25.6, 26.5, 27.3, 28, 28.5, 28.9, 29.2, 29.3, 29.2, 29.1, 28.7, 28.3, 27.8, 27.2, 26.5, 25.8, 25, 24.3, 23.5, 22.9, 22.2, 21.7, 21.3, 21, 20.8, 20.8, 20.9, 21.2, 21.7, 22.4, 23.3, 24.3, 25.4, 26.8, 28.2, 29.8, 31.4, 33.1, 34.9, 36.7, 38.5, 40.3, 42.1, 43.8, 45.4, 46.9, 48.2, 49.5, 50.6, 51.5, 52.3, 52.9, 53.4, 53.7, 53.9, 53.9, 53.8, 53.6, 53.4, 53, 52.7, 52.3, 51.9, 51.5, 51.2, 51, 50.8, 50.7, 50.8, 51, 51.4, 51.9, 52.5, 53.3, 54.3, 55.4, 56.7, 58.1, 59.6, 61.1, 62.8, 64.5, 66.3, 68, 69.7, 71.4, 73.1, 74.6, 76.1, 77.4, 78.6, 79.6, 80.5, 81.1, 81.7, 82, 82.2, 82.1, 82, 81.7, 81.2, 80.6, 79.9, 79.2, 78.4, 77.5, 76.7, 75.8, 75, 74.2, 73.5, 72.9, 72.5, 72.1, 71.9, 71.8, 71.8, 72, 72.3, 72.8, 73.4, 74.1, 74.9, 75.8, 76.8, 77.8, 78.8, 79.9, 80.9, 81.8, 82.7, 83.5, 84.2, 84.8, 85.2, 85.4, 85.5, 85.4, 85.2, 84.7, 84.1, 83.3, 82.3, 81.2, 80, 78.6, 77.2, 75.6, 74, 72.4, 70.8, 69.2, 67.6, 66.1, 64.6, 63.3, 62.1, 61, 60, 59.2, 58.5, 58, 57.6, 57.4, 57.4, 57.4, 57.6, 57.8, 58.1, 58.5, 58.9, 59.4, 59.8, 60.2, 60.5, 60.8, 60.9, 60.9, 60.9, 60.6, 60.2, 59.7, 59, 58.1, 57.1, 55.9, 54.6, 53.1, 51.5, 49.8, 48.1, 46.2, 44.4, 42.5, 40.7, 38.8, 37.1, 35.4, 33.8, 32.3, 31, 29.8, 28.7, 27.9, 27.2, 26.7, 26.3, 26.1, 26.1, 26.2, 26.4, 26.8, 27.2, 27.8, 28.3, 28.9, 29.6, 30.2, 30.7, 31.2, 31.7, 32, 32.2, 32.3, 32.2, 32.1, 31.7, 31.2, 30.6, 29.9, 29, 28, 26.9, 25.7, 24.4, 23.1, 21.8, 20.5, 19.2, 17.9, 16.7, 15.7, 14.7, 13.8, 13.1, 12.6, 12.2, 12, 12, 12.2, 12.6, 13.1, 13.8, 14.6, 15.6, 16.7, 17.9, 19.2, 20.5, 21.9, 23.2, 24.6, 25.9, 27.2, 28.4, 29.5, 30.5, 31.4, 32.1, 32.7, 33.2, 33.5, 33.6, 33.6, 33.5, 33.3, 33, 32.5, 32, 31.5, 30.9, 30.3, 29.8, 29.3, 28.8, 28.5, 28.2, 28.1, 28.1, 28.2, 28.5, 29, 29.6, 30.5, 31.5, 32.6, 33.9, 35.3, 36.9, 38.6, 40.3, 42.1, 44, 45.9, 47.8, 49.6, 51.4, 53.1, 54.8, 56.3, 57.7, 58.9, 60, 61, 61.7, 62.4, 62.8, 63.1, 63.2, 63.2, 63.1, 62.9, 62.6, 62.2, 61.8, 61.3, 60.9, 60.5, 60.1, 59.8, 59.5, 59.4, 59.4, 59.5, 59.8, 60.2, 60.8, 61.5, 62.3, 63.3, 64.5, 65.7, 67.1, 68.5, 70, 71.6, 73.2, 74.8, 76.3, 77.9, 79.3, 80.7, 81.9, 83, 84, 84.8, 85.5, 85.9, 86.2, 86.3, 86.3, 86, 85.6, 85.1, 84.4, 83.6, 82.7, 81.7, 80.6, 79.6, 78.5, 77.4, 76.3, 75.4, 74.4, 73.6, 72.9, 72.3, 71.9, 71.6, 71.4, 71.4, 71.5, 71.7, 72.1, 72.6, 73.2, 73.9, 74.6, 75.4, 76.2, 77, 77.8, 78.5, 79.2, 79.7, 80.2, 80.5, 80.7, 80.8, 80.6, 80.3, 79.8, 79.2, 78.4, 77.4, 76.2, 74.9, 73.5, 71.9, 70.3, 68.6, 66.8, 65.1, 63.3, 61.5, 59.8, 58.2, 56.6, 55.1, 53.8, 52.6, 51.5, 50.6, 49.9, 49.3, 48.9, 48.6, 48.5, 48.4, 48.5, 48.7, 49, 49.4, 49.7, 50.1, 50.5, 50.9, 51.2, 51.4, 51.5, 51.6, 51.5, 51.2, 50.8, 50.3, 49.6, 48.7, 47.7, 46.6, 45.3, 43.8, 42.3, 40.7, 39, 37.2, 35.5, 33.7, 31.9, 30.2, 28.5, 27, 25.5, 24.2, 23, 21.9, 21, 20.3, 19.8, 19.4, 19.3, 19.2, 19.4, 19.7, 20.1, 20.7, 21.3, 22, 22.8, 23.6, 24.4, 25.2, 25.9, 26.6, 27.2, 27.8, 28.2, 28.5, 28.6, 28.6, 28.5, 28.2, 27.8, 27.3, 26.6, 25.8, 24.9, 24, 22.9, 21.9, 20.8, 19.7, 18.6, 17.6, 16.7, 15.8, 15.1, 14.5, 14.1, 13.8, 13.7, 13.7, 14, 14.4, 15, 15.7, 16.7, 17.8, 19, 20.3, 21.7, 23.2, 24.8, 26.3, 27.9, 29.5, 31, 32.5, 33.9, 35.2, 36.3, 37.4, 38.3, 39, 39.6, 40.1, 40.4, 40.6, 40.6, 40.5, 40.3, 40, 39.6, 39.2, 38.8, 38.3, 37.9, 37.5, 37.2, 36.9, 36.8, 36.7, 36.8, 37.1, 37.5, 38.1, 38.8, 39.7, 40.7, 41.9, 43.3, 44.8, 46.4, 48.1, 49.9, 51.7, 53.6, 55.5, 57.3, 59.2, 60.9, 62.6, 64.2, 65.7, 67, 68.2, 69.3, 70.1, 70.8, 71.4, 71.7, 71.9, 71.9, 71.8, 71.6, 71.3, 70.9, 70.4, 69.8, 69.2, 68.7, 68.1, 67.6, 67.2, 66.8, 66.5, 66.4, 66.4, 66.5, 66.7, 67.1, 67.7, 68.4, 69.2, 70.2, 71.2, 72.4, 73.7, 75, 76.4, 77.7, 79.1, 80.5, 81.8, 83, 84.1, 85.1, 86, 86.7, 87.3, 87.7, 87.9, 88, 87.8, 87.5, 87, 86.4, 85.6, 84.6, 83.6, 82.4, 81.2, 79.9, 78.6, 77.3, 76, 74.7, 73.5, 72.3, 71.3, 70.4, 69.6, 68.9, 68.4, 68, 67.8, 67.7, 67.8, 67.9, 68.2, 68.6, 69.1, 69.7, 70.3, 70.9, 71.5, 72.1, 72.6, 73.1, 73.5, 73.8, 73.9, 73.9, 73.8, 73.5, 73, 72.3, 71.5, 70.5, 69.4, 68.1, 66.7, 65.1, 63.4, 61.7, 59.9, 58, 56.2, 54.3, 52.5, 50.7, 49, 47.4, 45.9, 44.5, 43.3, 42.2, 41.3, 40.5, 39.9, 39.5, 39.2, 39.1, 39.1, 39.2, 39.4, 39.7, 40.1, 40.5, 40.9, 41.4, 41.7, 42.1, 42.4, 42.6, 42.6, 42.6, 42.4, 42.1, 41.6, 41, 40.3, 39.3, 38.3, 37.1, 35.8, 34.4, 32.9, 31.3, 29.7, 28.1, 26.4, 24.8, 23.3, 21.8, 20.4, 19.1, 18, 17, 16.1, 15.4, 14.9, 14.6, 14.5, 14.5, 14.7, 15.1, 15.6, 16.3, 17, 17.9, 18.8, 19.8, 20.9, 21.9, 22.9, 23.9, 24.8, 25.6, 26.4, 27, 27.5, 27.9, 28.1, 28.2, 28.2, 28, 27.7, 27.2, 26.6, 26, 25.2, 24.4, 23.6, 22.7, 21.9, 21, 20.3, 19.6, 19, 18.5, 18.1, 17.9, 17.8, 17.9, 18.2, 18.7, 19.3, 20.1, 21.1, 22.3, 23.5, 25, 26.5, 28.1, 29.8, 31.5, 33.2, 35, 36.7, 38.4, 40, 41.5, 42.9, 44.2, 45.4, 46.4, 47.2, 47.9, 48.5, 48.9, 49.1, 49.2, 49.2, 49.1, 48.9, 48.6, 48.2, 47.8, 47.4, 47.1, 46.7, 46.4, 46.2, 46.1, 46.1, 46.2, 46.5, 46.9, 47.5, 48.2, 49.1, 50.2, 51.4, 52.7, 54.2, 55.8, 57.4, 59.2, 60.9, 62.7, 64.5, 66.3, 68.1, 69.8, 71.4, 72.8, 74.2, 75.4, 76.5, 77.4, 78.1, 78.6, 79, 79.2, 79.2, 79.1, 78.8, 78.4, 77.9, 77.3, 76.7, 75.9, 75.2, 74.4, 73.7, 73, 72.4, 71.8, 71.4, 71, 70.8, 70.7, 70.8, 71, 71.4, 71.8, 72.5, 73.2, 74.1, 75, 76.1, 77.2, 78.3, 79.5, 80.6, 81.7, 82.8, 83.7, 84.6, 85.4, 86, 86.5, 86.8, 87, 86.9, 86.7, 86.3, 85.8, 85, 84.1, 83.1, 81.9, 80.6, 79.2, 77.8, 76.3, 74.7, 73.2, 71.7, 70.2, 68.8, 67.5, 66.3, 65.1, 64.2, 63.3, 62.6, 62.1, 61.7, 61.4, 61.3, 61.4, 61.5, 61.8, 62.1, 62.5, 62.9, 63.4, 63.9, 64.3, 64.7, 65.1, 65.3, 65.5, 65.5, 65.4, 65.2, 64.7, 64.2, 63.4, 62.5, 61.4, 60.2, 58.8, 57.3, 55.7, 54, 52.2, 50.4, 48.5, 46.6, 44.7, 42.9, 41.1, 39.4, 37.8, 36.4, 35, 33.8, 32.8, 31.9, 31.2, 30.7, 30.4, 30.2, 30.1, 30.2, 30.4, 30.7, 31.1, 31.6, 32.1, 32.7, 33.2, 33.7, 34.2, 34.6, 34.9, 35.1, 35.2, 35.1, 35, 34.6, 34.2, 33.5, 32.8, 31.9, 30.8, 29.7, 28.4, 27.1, 25.7, 24.3, 22.9, 21.5, 20.1, 18.7, 17.5, 16.3, 15.2, 14.3, 13.6, 12.9, 12.5, 12.3, 12.2, 12.3, 12.6, 13, 13.7, 14.4, 15.3, 16.3, 17.4, 18.6, 19.8, 21.1, 22.4, 23.6, 24.8, 26, 27, 28, 28.9, 29.6, 30.2, 30.6, 30.9, 31.1, 31.1, 31, 30.7, 30.4, 29.9, 29.4, 28.8, 28.1, 27.5, 26.8, 26.2, 25.6, 25.1, 24.7, 24.4, 24.2, 24.2, 24.3, 24.6, 25.1, 25.7, 26.5, 27.5, 28.7, 30, 31.4, 33, 34.6, 36.3, 38.2, 40, 41.8, 43.7, 45.5, 47.3, 49, 50.5, 52, 53.4, 54.6, 55.6, 56.5, 57.2, 57.8, 58.2, 58.5, 58.6, 58.6, 58.5, 58.2, 57.9, 57.6, 57.2, 56.8, 56.3, 56, 55.7, 55.4, 55.3, 55.2, 55.3, 55.5, 55.9, 56.4, 57.1, 57.9, 58.9, 60, 61.3, 62.6, 64.1, 65.6, 67.2, 68.9, 70.6, 72.2, 73.9, 75.5, 77, 78.4, 79.7, 80.9, 81.9, 82.8, 83.5, 84, 84.4, 84.5, 84.5, 84.3, 84, 83.5, 82.9, 82.2, 81.4, 80.5, 79.5, 78.6, 77.6, 76.6, 75.7, 74.9, 74.1, 73.4, 72.9, 72.4, 72.2, 72, 72, 72.1, 72.4, 72.8, 73.3, 74, 74.7, 75.5, 76.4, 77.3, 78.2, 79.1, 80, 80.8, 81.5, 82.2, 82.7, 83.1, 83.4, 83.4, 83.3, 83.1, 82.6, 82, 81.2, 80.3, 79.2, 77.9, 76.5, 75, 73.4, 71.8, 70.1, 68.4, 66.7, 65, 63.3, 61.8, 60.3, 58.9, 57.7, 56.6, 55.6, 54.8, 54.1, 53.6, 53.3, 53.1, 53, 53.1, 53.2, 53.5, 53.8, 54.2, 54.6, 55, 55.3, 55.7, 56, 56.2, 56.3, 56.2, 56.1, 55.8, 55.3, 54.7, 53.9, 53, 51.9, 50.7, 49.3, 47.8, 46.2, 44.5, 42.8, 41, 39.1, 37.3, 35.5, 33.7, 32, 30.4, 28.9, 27.6, 26.3, 25.3, 24.4, 23.6, 23.1, 22.7, 22.5, 22.4, 22.5, 22.8, 23.1, 23.6, 24.2, 24.8, 25.5, 26.2, 26.9, 27.6, 28.2, 28.8, 29.3, 29.7, 29.9, 30.1, 30.1, 29.9, 29.6, 29.2, 28.6, 27.9, 27.1, 26.2, 25.1, 24, 22.9, 21.7, 20.5, 19.3, 18.1, 17, 16, 15.1, 14.3, 13.6, 13.1, 12.7, 12.5, 12.5, 12.7, 13.1, 13.6, 14.3, 15.2, 16.2, 17.3, 18.6, 19.9, 21.4, 22.8, 24.3, 25.8, 27.2, 28.7, 30, 31.3, 32.4, 33.5, 34.4, 35.2, 35.8, 36.3, 36.6, 36.8, 36.9, 36.8, 36.6, 36.3, 35.9, 35.5, 35, 34.5, 34, 33.5, 33.1, 32.7, 32.5, 32.3, 32.3, 32.4, 32.6, 33.1, 33.7, 34.4, 35.3, 36.4, 37.7, 39, 40.6, 42.2, 43.9, 45.7, 47.6, 49.4, 51.3, 53.2, 55, 56.8, 58.5, 60.1, 61.6, 62.9, 64.1, 65.1, 65.9, 66.6, 67.1, 67.5, 67.7, 67.7, 67.7, 67.4, 67.1, 66.8, 66.3, 65.8, 65.3, 64.8, 64.3, 63.9, 63.6, 63.3, 63.2, 63.2, 63.3, 63.5, 63.9, 64.4, 65.1, 66, 66.9, 68, 69.2, 70.5, 71.9, 73.4, 74.8, 76.3, 77.8, 79.2, 80.6, 81.9, 83.1, 84.2, 85.2, 86, 86.6, 87.1, 87.4, 87.5, 87.4, 87.2, 86.7, 86.2, 85.4, 84.6, 83.6, 82.5, 81.4, 80.2, 79, 77.8, 76.6, 75.5, 74.4, 73.4, 72.5, 71.8, 71.1, 70.6, 70.2, 70, 69.9, 70, 70.2, 70.5, 70.9, 71.4, 72, 72.7, 73.4, 74.1, 74.8, 75.5, 76.1, 76.6, 77, 77.3, 77.5, 77.6, 77.5, 77.2, 76.7, 76.1, 75.3, 74.3, 73.2, 71.9, 70.5, 68.9, 67.3, 65.5, 63.8, 61.9, 60.1, 58.3, 56.5, 54.7, 53.1, 51.5, 50.1, 48.8, 47.6, 46.6, 45.7, 45, 44.5, 44.1, 43.8, 43.7, 43.8, 43.9, 44.1, 44.5, 44.8, 45.2, 45.6, 46, 46.3, 46.6, 46.9, 47, 47, 46.8, 46.6, 46.2, 45.6, 44.9, 44, 43, 41.8, 40.5, 39.1, 37.6, 36, 34.3, 32.6, 30.9, 29.2, 27.5, 25.9, 24.4, 22.9, 21.6, 20.4, 19.3, 18.4, 17.7, 17.2, 16.8, 16.6, 16.6, 16.7, 17, 17.5, 18.1, 18.8, 19.5, 20.4, 21.3, 22.2, 23.1, 24, 24.8, 25.6, 26.3, 26.9, 27.4, 27.7, 28, 28, 28, 27.7, 27.4, 26.9, 26.3, 25.6, 24.8, 23.9, 23, 22, 21, 20.1, 19.1, 18.3, 17.5, 16.8, 16.3, 15.8, 15.6, 15.5, 15.5, 15.8, 16.2, 16.8, 17.5, 18.5, 19.6, 20.8, 22.2, 23.6, 25.2, 26.8, 28.4, 30.1, 31.8, 33.4, 35, 36.5, 38, 39.3, 40.5, 41.5, 42.4, 43.2, 43.8, 44.3, 44.6, 44.7, 44.8, 44.7, 44.5, 44.2, 43.9]
}
];
const xAxis = {
data: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "100", "101", "102", "103", "104", "105", "106", "107", "108", "109", "110", "111", "112", "113", "114", "115", "116", "117", "118", "119", "120", "121", "122", "123", "124", "125", "126", "127", "128", "129", "130", "131", "132", "133", "134", "135", "136", "137", "138", "139", "140", "141", "142", "143", "144", "145", "146", "147", "148", "149", "150", "151", "152", "153", "154", "155", "156", "157", "158", "159", "160", "161", "162", "163", "164", "165", "166", "167", "168", "169", "170", "171", "172", "173", "174", "175", "176", "177", "178", "179", "180", "181", "182", "183", "184", "185", "186", "187", "188", "189", "190", "191", "192", "193", "194", "195", "196", "197", "198", "199", "200", "201", "202", "203", "204", "205", "206", "207", "208", "209", "210", "211", "212", "213", "214", "215", "216", "217", "218", "219", "220", "221", "222", "223", "224", "225", "226", "227", "228", "229", "230", "231", "232", "233", "234", "235", "236", "237", "238", "239", "240", "241", "242", "243", "244", "245", "246", "247", "248", "249", "250", "251", "252", "253", "254", "255", "256", "257", "258", "259", "260", "261", "262", "263", "264", "265", "266", "267", "268", "269", "270", "271", "272", "273", "274", "275", "276", "277", "278", "279", "280", "281", "282", "283", "284", "285", "286", "287", "288", "289", "290", "291", "292", "293", "294", "295", "296", "297", "298", "299", "300", "301", "302", "303", "304", "305", "306", "307", "308", "309", "310", "311", "312", "313", "314", "315", "316", "317", "318", "319", "320", "321", "322", "323", "324", "325", "326", "327", "328", "329", "330", "331", "332", "333", "334", "335", "336", "337", "338", "339", "340", "341", "342", "343", "344", "345", "346", "347", "348", "349", "350", "351", "352", "353", "354", "355", "356", "357", "358", "359", "360", "361", "362", "363", "364", "365", "366", "367", "368", "369", "370", "371", "372", "373", "374", "375", "376", "377", "378", "379", "380", "381", "382", "383", "384", "385", "386", "387", "388", "389", "390", "391", "392", "393", "394", "395", "396", "397", "398", "399", "400", "401", "402", "403", "404", "405", "406", "407", "408", "409", "410", "411", "412", "413", "414", "415", "416", "417", "418", "419", "420", "421", "422", "423", "424", "425", "426", "427", "428", "429", "430", "431", "432", "433", "434", "435", "436", "437", "438", "439", "440", "441", "442", "443", "444", "445", "446", "447", "448", "449", "450", "451", "452", "453", "454", "455", "456", "457", "458", "459", "460", "461", "462", "463", "464", "465", "466", "467", "468", "469", "470", "471", "472", "473", "474", "475", "476", "477", "478", "479", "480", "481", "482", "483", "484", "485", "486", "487", "488", "489", "490", "491", "492", "493", "494", "495", "496", "497", "498", "499", "500", "501", "502", "503", "504", "505", "506", "507", "508", "509", "510", "511", "512", "513", "514", "515", "516", "517", "518", "519", "520", "521", "522", "523", "524", "525", "526", "527", "528", "529", "530", "531", "532", "533", "534", "535", "536", "537", "538", "539", "540", "541", "542", "543", "544", "545", "546", "547", "548", "549", "550", "551", "552", "553", "554", "555", "556", "557", "558", "559", "560", "561", "562", "563", "564", "565", "566", "567", "568", "569", "570", "571", "572", "573", "574", "575", "576", "577", "578", "579", "580", "581", "582", "583", "584", "585", "586", "587", "588", "589", "590", "591", "592", "593", "594", "595", "596", "597", "598", "599", "600", "601", "602", "603", "604", "605", "606", "607", "608", "609", "610", "611", "612", "613", "614", "615", "616", "617", "618", "619", "620", "621", "622", "623", "624", "625", "626", "627", "628", "629", "630", "631", "632", "633", "634", "635", "636", "637", "638", "639", "640", "641", "642", "643", "644", "645", "646", "647", "648", "649", "650", "651", "652", "653", "654", "655", "656", "657", "658", "659", "660", "661", "662", "663", "664", "665", "666", "667", "668", "669", "670", "671", "672", "673", "674", "675", "676", "677", "678", "679", "680", "681", "682", "683", "684", "685", "686", "687", "688", "689", "690", "691", "692", "693", "694", "695", "696", "697", "698", "699", "700", "701", "702", "703", "704", "705", "706", "707", "708", "709", "710", "711", "712", "713", "714", "715", "716", "717", "718", "719", "720", "721", "722", "723", "724", "725", "726", "727", "728", "729", "730", "731", "732", "733", "734", "735", "736", "737", "738", "739", "740", "741", "742", "743", "744", "745", "746", "747", "748", "749", "750", "751", "752", "753", "754", "755", "756", "757", "758", "759", "760", "761", "762", "763", "764", "765", "766", "767", "768", "769", "770", "771", "772", "773", "774", "775", "776", "777", "778", "779", "780", "781", "782", "783", "784", "785", "786", "787", "788", "789", "790", "791", "792", "793", "794", "795", "796", "797", "798", "799", "800", "801", "802", "803", "804", "805", "806", "807", "808", "809", "810", "811", "812", "813", "814", "815", "816", "817", "818", "819", "820", "821", "822", "823", "824", "825", "826", "827", "828", "829", "830", "831", "832", "833", "834", "835", "836", "837", "838", "839", "840", "841", "842", "843", "844", "845", "846", "847", "848", "849", "850", "851", "852", "853", "854", "855", "856", "857", "858", "859", "860", "861", "862", "863", "864", "865", "866", "867", "868", "869", "870", "871", "872", "873", "874", "875", "876", "877", "878", "879", "880", "881", "882", "883", "884", "885", "886", "887", "888", "889", "890", "891", "892", "893", "894", "895", "896", "897", "898", "899", "900", "901", "902", "903", "904", "905", "906", "907", "908", "909", "910", "911", "912", "913", "914", "915", "916", "917", "918", "919", "920", "921", "922", "923", "924", "925", "926", "927", "928", "929", "930", "931", "932", "933", "934", "935", "936", "937", "938", "939", "940", "941", "942", "943", "944", "945", "946", "947", "948", "949", "950", "951", "952", "953", "954", "955", "956", "957", "958", "959", "960", "961", "962", "963", "964", "965", "966", "967", "968", "969", "970", "971", "972", "973", "974", "975", "976", "977", "978", "979", "980", "981", "982", "983", "984", "985", "986", "987", "988", "989", "990", "991", "992", "993", "994", "995", "996", "997", "998", "999", "1000", "1001", "1002", "1003", "1004", "1005", "1006", "1007", "1008", "1009", "1010", "1011", "1012", "1013", "1014", "1015", "1016", "1017", "1018", "1019", "1020", "1021", "1022", "1023", "1024", "1025", "1026", "1027", "1028", "1029", "1030", "1031", "1032", "1033", "1034", "1035", "1036", "1037", "1038", "1039", "1040", "1041", "1042", "1043", "1044", "1045", "1046", "1047", "1048", "1049", "1050", "1051", "1052", "1053", "1054", "1055", "1056", "1057", "1058", "1059", "1060", "1061", "1062", "1063", "1064", "1065", "1066", "1067", "1068", "1069", "1070", "1071", "1072", "1073", "1074", "1075", "1076", "1077", "1078", "1079", "1080", "1081", "1082", "1083", "1084", "1085", "1086", "1087", "1088", "1089", "1090", "1091", "1092", "1093", "1094", "1095", "1096", "1097", "1098", "1099", "1100", "1101", "1102", "1103", "1104", "1105", "1106", "1107", "1108", "1109", "1110", "1111", "1112", "1113", "1114", "1115", "1116", "1117", "1118", "1119", "1120", "1121", "1122", "1123", "1124", "1125", "1126", "1127", "1128", "1129", "1130", "1131", "1132", "1133", "1134", "1135", "1136", "1137", "1138", "1139", "1140", "1141", "1142", "1143", "1144", "1145", "1146", "1147", "1148", "1149", "1150", "1151", "1152", "1153", "1154", "1155", "1156", "1157", "1158", "1159", "1160", "1161", "1162", "1163", "1164", "1165", "1166", "1167", "1168", "1169", "1170", "1171", "1172", "1173", "1174", "1175", "1176", "1177", "1178", "1179", "1180", "1181", "1182", "1183", "1184", "1185", "1186", "1187", "1188", "1189", "1190", "1191", "1192", "1193", "1194", "1195", "1196", "1197", "1198", "1199", "1200", "1201", "1202", "1203", "1204", "1205", "1206", "1207", "1208", "1209", "1210", "1211", "1212", "1213", "1214", "1215", "1216", "1217", "1218", "1219", "1220", "1221", "1222", "1223", "1224", "1225", "1226", "1227", "1228", "1229", "1230", "1231", "1232", "1233", "1234", "1235", "1236", "1237", "1238", "1239", "1240", "1241", "1242", "1243", "1244", "1245", "1246", "1247", "1248", "1249", "1250", "1251", "1252", "1253", "1254", "1255", "1256", "1257", "1258", "1259", "1260", "1261", "1262", "1263", "1264", "1265", "1266", "1267", "1268", "1269", "1270", "1271", "1272", "1273", "1274", "1275", "1276", "1277", "1278", "1279", "1280", "1281", "1282", "1283", "1284", "1285", "1286", "1287", "1288", "1289", "1290", "1291", "1292", "1293", "1294", "1295", "1296", "1297", "1298", "1299", "1300", "1301", "1302", "1303", "1304", "1305", "1306", "1307", "1308", "1309", "1310", "1311", "1312", "1313", "1314", "1315", "1316", "1317", "1318", "1319", "1320", "1321", "1322", "1323", "1324", "1325", "1326", "1327", "1328", "1329", "1330", "1331", "1332", "1333", "1334", "1335", "1336", "1337", "1338", "1339", "1340", "1341", "1342", "1343", "1344", "1345", "1346", "1347", "1348", "1349", "1350", "1351", "1352", "1353", "1354", "1355", "1356", "1357", "1358", "1359", "1360", "1361", "1362", "1363", "1364", "1365", "1366", "1367", "1368", "1369", "1370", "1371", "1372", "1373", "1374", "1375", "1376", "1377", "1378", "1379", "1380", "1381", "1382", "1383", "1384", "1385", "1386", "1387", "1388", "1389", "1390", "1391", "1392", "1393", "1394", "1395", "1396", "1397", "1398", "1399", "1400", "1401", "1402", "1403", "1404", "1405", "1406", "1407", "1408", "1409", "1410", "1411", "1412", "1413", "1414", "1415", "1416", "1417", "1418", "1419", "1420", "1421", "1422", "1423", "1424", "1425", "1426", "1427", "1428", "1429", "1430", "1431", "1432", "1433", "1434", "1435", "1436", "1437", "1438", "1439", "1440", "1441", "1442", "1443", "1444", "1445", "1446", "1447", "1448", "1449", "1450", "1451", "1452", "1453", "1454", "1455", "1456", "1457", "1458", "1459", "1460", "1461", "1462", "1463", "1464", "1465", "1466", "1467", "1468", "1469", "1470", "1471", "1472", "1473", "1474", "1475", "1476", "1477", "1478", "1479", "1480", "1481", "1482", "1483", "1484", "1485", "1486", "1487", "1488", "1489", "1490", "1491", "1492", "1493", "1494", "1495", "1496", "1497", "1498", "1499", "1500", "1501", "1502", "1503", "1504", "1505", "1506", "1507", "1508", "1509", "1510", "1511", "1512", "1513", "1514", "1515", "1516", "1517", "1518", "1519", "1520", "1521", "1522", "1523", "1524", "1525", "1526", "1527", "1528", "1529", "1530", "1531", "1532", "1533", "1534", "1535", "1536", "1537", "1538", "1539", "1540", "1541", "1542", "1543", "1544", "1545", "1546", "1547", "1548", "1549", "1550", "1551", "1552", "1553", "1554", "1555", "1556", "1557", "1558", "1559", "1560", "1561", "1562", "1563", "1564", "1565", "1566", "1567", "1568", "1569", "1570", "1571", "1572", "1573", "1574", "1575", "1576", "1577", "1578", "1579", "1580", "1581", "1582", "1583", "1584", "1585", "1586", "1587", "1588", "1589", "1590", "1591", "1592", "1593", "1594", "1595", "1596", "1597", "1598", "1599", "1600", "1601", "1602", "1603", "1604", "1605", "1606", "1607", "1608", "1609", "1610", "1611", "1612", "1613", "1614", "1615", "1616", "1617", "1618", "1619", "1620", "1621", "1622", "1623", "1624", "1625", "1626", "1627", "1628", "1629", "1630", "1631", "1632", "1633", "1634", "1635", "1636", "1637", "1638", "1639", "1640", "1641", "1642", "1643", "1644", "1645", "1646", "1647", "1648", "1649", "1650", "1651", "1652", "1653", "1654", "1655", "1656", "1657", "1658", "1659", "1660", "1661", "1662", "1663", "1664", "1665", "1666", "1667", "1668", "1669", "1670", "1671", "1672", "1673", "1674", "1675", "1676", "1677", "1678", "1679", "1680", "1681", "1682", "1683", "1684", "1685", "1686", "1687", "1688", "1689", "1690", "1691", "1692", "1693", "1694", "1695", "1696", "1697", "1698", "1699", "1700", "1701", "1702", "1703", "1704", "1705", "1706", "1707", "1708", "1709", "1710", "1711", "1712", "1713", "1714", "1715", "1716", "1717", "1718", "1719", "1720", "1721", "1722", "1723", "1724", "1725", "1726", "1727", "1728", "1729", "1730", "1731", "1732", "1733", "1734", "1735", "1736", "1737", "1738", "1739", "1740", "1741", "1742", "1743", "1744", "1745", "1746", "1747", "1748", "1749", "1750", "1751", "1752", "1753", "1754", "1755", "1756", "1757", "1758", "1759", "1760", "1761", "1762", "1763", "1764", "1765", "1766", "1767", "1768", "1769", "1770", "1771", "1772", "1773", "1774", "1775", "1776", "1777", "1778", "1779", "1780", "1781", "1782", "1783", "1784", "1785", "1786", "1787", "1788", "1789", "1790", "1791", "1792", "1793", "1794", "1795", "1796", "1797", "1798", "1799", "1800", "1801", "1802", "1803", "1804", "1805", "1806", "1807", "1808", "1809", "1810", "1811", "1812", "1813", "1814", "1815", "1816", "1817", "1818", "1819", "1820", "1821", "1822", "1823", "1824", "1825", "1826", "1827", "1828", "1829", "1830", "1831", "1832", "1833", "1834", "1835", "1836", "1837", "1838", "1839", "1840", "1841", "1842", "1843", "1844", "1845", "1846", "1847", "1848", "1849", "1850", "1851", "1852", "1853", "1854", "1855", "1856", "1857", "1858", "1859", "1860", "1861", "1862", "1863", "1864", "1865", "1866", "1867", "1868", "1869", "1870", "1871", "1872", "1873", "1874", "1875", "1876", "1877", "1878", "1879", "1880", "1881", "1882", "1883", "1884", "1885", "1886", "1887", "1888", "1889", "1890", "1891", "1892", "1893", "1894", "1895", "1896", "1897", "1898", "1899", "1900", "1901", "1902", "1903", "1904", "1905", "1906", "1907", "1908", "1909", "1910", "1911", "1912", "1913", "1914", "1915", "1916", "1917", "1918", "1919", "1920", "1921", "1922", "1923", "1924", "1925", "1926", "1927", "1928", "1929", "1930", "1931", "1932", "1933", "1934", "1935", "1936", "1937", "1938", "1939", "1940", "1941", "1942", "1943", "1944", "1945", "1946", "1947", "1948", "1949", "1950", "1951", "1952", "1953", "1954", "1955", "1956", "1957", "1958", "1959", "1960", "1961", "1962", "1963", "1964", "1965", "1966", "1967", "1968", "1969", "1970", "1971", "1972", "1973", "1974", "1975", "1976", "1977", "1978", "1979", "1980", "1981", "1982", "1983", "1984", "1985", "1986", "1987", "1988", "1989", "1990", "1991", "1992", "1993", "1994", "1995", "1996", "1997", "1998", "1999"],
hideTicks: true
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
curve="linear"
legend="none"
zoom="both"
label="Sensor trace"
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
curve="linear"
legend="none"
zoom="both"
label="Sensor trace"
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "Signal",
color: "primary",
data: [50, 51.9, 53.8, 55.6, 57.3, 59, 60.5, 62, 63.2, 64.4, 65.3, 66.1, 66.8, 67.3, 67.6, 67.7, 67.7, 67.6, 67.4, 67, 66.6, 66.2, 65.7, 65.2, 64.7, 64.2, 63.8, 63.5, 63.3, 63.2, 63.2, 63.3, 63.6, 64, 64.6, 65.4, 66.2, 67.2, 68.4, 69.6, 70.9, 72.3, 73.8, 75.3, 76.8, 78.2, 79.7, 81, 82.3, 83.5, 84.5, 85.4, 86.2, 86.8, 87.2, 87.4, 87.5, 87.4, 87, 86.6, 86, 85.2, 84.3, 83.3, 82.2, 81.1, 79.9, 78.7, 77.5, 76.3, 75.2, 74.1, 73.1, 72.3, 71.5, 70.9, 70.5, 70.1, 70, 69.9, 70, 70.2, 70.6, 71.1, 71.6, 72.2, 72.9, 73.6, 74.3, 75, 75.6, 76.2, 76.7, 77.1, 77.4, 77.6, 77.6, 77.4, 77.1, 76.5, 75.9, 75, 74, 72.8, 71.5, 70, 68.4, 66.8, 65, 63.2, 61.4, 59.6, 57.7, 56, 54.3, 52.6, 51.1, 49.7, 48.4, 47.3, 46.3, 45.5, 44.8, 44.3, 44, 43.8, 43.7, 43.8, 44, 44.2, 44.6, 44.9, 45.3, 45.7, 46.1, 46.4, 46.7, 46.9, 47, 46.9, 46.8, 46.5, 46, 45.4, 44.6, 43.7, 42.6, 41.4, 40.1, 38.7, 37.1, 35.5, 33.8, 32.1, 30.4, 28.7, 27, 25.4, 23.9, 22.5, 21.2, 20, 19, 18.2, 17.5, 17, 16.7, 16.6, 16.6, 16.8, 17.2, 17.6, 18.3, 19, 19.8, 20.6, 21.5, 22.4, 23.4, 24.2, 25.1, 25.8, 26.5, 27.1, 27.5, 27.8, 28, 28, 27.9, 27.7, 27.3, 26.7, 26.1, 25.4, 24.5, 23.6, 22.7, 21.7, 20.8, 19.8, 18.9, 18, 17.3, 16.6, 16.1, 15.7, 15.5, 15.5, 15.6, 15.9, 16.3, 17, 17.8, 18.8, 19.9, 21.2, 22.6, 24.1, 25.6, 27.3, 28.9, 30.6, 32.3, 33.9, 35.5, 37, 38.4, 39.6, 40.8, 41.8, 42.7, 43.4, 44, 44.4, 44.6, 44.8, 44.8, 44.6, 44.4, 44.1, 43.8, 43.4, 43, 42.6, 42.2, 41.8, 41.6, 41.4, 41.4, 41.5, 41.7, 42, 42.6, 43.3, 44.1, 45.1, 46.3, 47.6, 49, 50.6, 52.2, 54, 55.8, 57.6, 59.5, 61.3, 63.1, 64.9, 66.6, 68.2, 69.6, 71, 72.2, 73.2, 74, 74.7, 75.3, 75.6, 75.8, 75.8, 75.7, 75.4, 75, 74.6, 74, 73.4, 72.7, 72.1, 71.4, 70.8, 70.3, 69.8, 69.4, 69.1, 68.9, 68.9, 69, 69.3, 69.7, 70.2, 70.9, 71.7, 72.7, 73.7, 74.8, 76, 77.3, 78.5, 79.8, 81, 82.2, 83.4, 84.4, 85.3, 86.1, 86.8, 87.3, 87.6, 87.8, 87.8, 87.6, 87.2, 86.6, 85.9, 85, 84, 82.9, 81.7, 80.3, 78.9, 77.5, 76.1, 74.7, 73.3, 71.9, 70.7, 69.5, 68.4, 67.5, 66.7, 66, 65.5, 65.1, 64.9, 64.8, 64.9, 65, 65.3, 65.7, 66.1, 66.6, 67.2, 67.7, 68.2, 68.7, 69.1, 69.5, 69.7, 69.9, 69.9, 69.7, 69.4, 68.9, 68.3, 67.5, 66.5, 65.3, 64.1, 62.6, 61.1, 59.4, 57.6, 55.8, 54, 52.1, 50.2, 48.3, 46.5, 44.8, 43.1, 41.6, 40.2, 38.9, 37.8, 36.8, 36, 35.4, 34.9, 34.6, 34.5, 34.5, 34.6, 34.8, 35.2, 35.5, 36, 36.5, 36.9, 37.4, 37.8, 38.2, 38.4, 38.6, 38.7, 38.6, 38.4, 38, 37.5, 36.9, 36.1, 35.2, 34.1, 32.9, 31.6, 30.2, 28.7, 27.2, 25.7, 24.2, 22.6, 21.2, 19.8, 18.4, 17.2, 16.1, 15.2, 14.4, 13.8, 13.4, 13.1, 13, 13.1, 13.4, 13.8, 14.4, 15.1, 16, 16.9, 18, 19.1, 20.2, 21.4, 22.5, 23.6, 24.7, 25.6, 26.5, 27.3, 28, 28.5, 28.9, 29.2, 29.3, 29.2, 29.1, 28.7, 28.3, 27.8, 27.2, 26.5, 25.8, 25, 24.3, 23.5, 22.9, 22.2, 21.7, 21.3, 21, 20.8, 20.8, 20.9, 21.2, 21.7, 22.4, 23.3, 24.3, 25.4, 26.8, 28.2, 29.8, 31.4, 33.1, 34.9, 36.7, 38.5, 40.3, 42.1, 43.8, 45.4, 46.9, 48.2, 49.5, 50.6, 51.5, 52.3, 52.9, 53.4, 53.7, 53.9, 53.9, 53.8, 53.6, 53.4, 53, 52.7, 52.3, 51.9, 51.5, 51.2, 51, 50.8, 50.7, 50.8, 51, 51.4, 51.9, 52.5, 53.3, 54.3, 55.4, 56.7, 58.1, 59.6, 61.1, 62.8, 64.5, 66.3, 68, 69.7, 71.4, 73.1, 74.6, 76.1, 77.4, 78.6, 79.6, 80.5, 81.1, 81.7, 82, 82.2, 82.1, 82, 81.7, 81.2, 80.6, 79.9, 79.2, 78.4, 77.5, 76.7, 75.8, 75, 74.2, 73.5, 72.9, 72.5, 72.1, 71.9, 71.8, 71.8, 72, 72.3, 72.8, 73.4, 74.1, 74.9, 75.8, 76.8, 77.8, 78.8, 79.9, 80.9, 81.8, 82.7, 83.5, 84.2, 84.8, 85.2, 85.4, 85.5, 85.4, 85.2, 84.7, 84.1, 83.3, 82.3, 81.2, 80, 78.6, 77.2, 75.6, 74, 72.4, 70.8, 69.2, 67.6, 66.1, 64.6, 63.3, 62.1, 61, 60, 59.2, 58.5, 58, 57.6, 57.4, 57.4, 57.4, 57.6, 57.8, 58.1, 58.5, 58.9, 59.4, 59.8, 60.2, 60.5, 60.8, 60.9, 60.9, 60.9, 60.6, 60.2, 59.7, 59, 58.1, 57.1, 55.9, 54.6, 53.1, 51.5, 49.8, 48.1, 46.2, 44.4, 42.5, 40.7, 38.8, 37.1, 35.4, 33.8, 32.3, 31, 29.8, 28.7, 27.9, 27.2, 26.7, 26.3, 26.1, 26.1, 26.2, 26.4, 26.8, 27.2, 27.8, 28.3, 28.9, 29.6, 30.2, 30.7, 31.2, 31.7, 32, 32.2, 32.3, 32.2, 32.1, 31.7, 31.2, 30.6, 29.9, 29, 28, 26.9, 25.7, 24.4, 23.1, 21.8, 20.5, 19.2, 17.9, 16.7, 15.7, 14.7, 13.8, 13.1, 12.6, 12.2, 12, 12, 12.2, 12.6, 13.1, 13.8, 14.6, 15.6, 16.7, 17.9, 19.2, 20.5, 21.9, 23.2, 24.6, 25.9, 27.2, 28.4, 29.5, 30.5, 31.4, 32.1, 32.7, 33.2, 33.5, 33.6, 33.6, 33.5, 33.3, 33, 32.5, 32, 31.5, 30.9, 30.3, 29.8, 29.3, 28.8, 28.5, 28.2, 28.1, 28.1, 28.2, 28.5, 29, 29.6, 30.5, 31.5, 32.6, 33.9, 35.3, 36.9, 38.6, 40.3, 42.1, 44, 45.9, 47.8, 49.6, 51.4, 53.1, 54.8, 56.3, 57.7, 58.9, 60, 61, 61.7, 62.4, 62.8, 63.1, 63.2, 63.2, 63.1, 62.9, 62.6, 62.2, 61.8, 61.3, 60.9, 60.5, 60.1, 59.8, 59.5, 59.4, 59.4, 59.5, 59.8, 60.2, 60.8, 61.5, 62.3, 63.3, 64.5, 65.7, 67.1, 68.5, 70, 71.6, 73.2, 74.8, 76.3, 77.9, 79.3, 80.7, 81.9, 83, 84, 84.8, 85.5, 85.9, 86.2, 86.3, 86.3, 86, 85.6, 85.1, 84.4, 83.6, 82.7, 81.7, 80.6, 79.6, 78.5, 77.4, 76.3, 75.4, 74.4, 73.6, 72.9, 72.3, 71.9, 71.6, 71.4, 71.4, 71.5, 71.7, 72.1, 72.6, 73.2, 73.9, 74.6, 75.4, 76.2, 77, 77.8, 78.5, 79.2, 79.7, 80.2, 80.5, 80.7, 80.8, 80.6, 80.3, 79.8, 79.2, 78.4, 77.4, 76.2, 74.9, 73.5, 71.9, 70.3, 68.6, 66.8, 65.1, 63.3, 61.5, 59.8, 58.2, 56.6, 55.1, 53.8, 52.6, 51.5, 50.6, 49.9, 49.3, 48.9, 48.6, 48.5, 48.4, 48.5, 48.7, 49, 49.4, 49.7, 50.1, 50.5, 50.9, 51.2, 51.4, 51.5, 51.6, 51.5, 51.2, 50.8, 50.3, 49.6, 48.7, 47.7, 46.6, 45.3, 43.8, 42.3, 40.7, 39, 37.2, 35.5, 33.7, 31.9, 30.2, 28.5, 27, 25.5, 24.2, 23, 21.9, 21, 20.3, 19.8, 19.4, 19.3, 19.2, 19.4, 19.7, 20.1, 20.7, 21.3, 22, 22.8, 23.6, 24.4, 25.2, 25.9, 26.6, 27.2, 27.8, 28.2, 28.5, 28.6, 28.6, 28.5, 28.2, 27.8, 27.3, 26.6, 25.8, 24.9, 24, 22.9, 21.9, 20.8, 19.7, 18.6, 17.6, 16.7, 15.8, 15.1, 14.5, 14.1, 13.8, 13.7, 13.7, 14, 14.4, 15, 15.7, 16.7, 17.8, 19, 20.3, 21.7, 23.2, 24.8, 26.3, 27.9, 29.5, 31, 32.5, 33.9, 35.2, 36.3, 37.4, 38.3, 39, 39.6, 40.1, 40.4, 40.6, 40.6, 40.5, 40.3, 40, 39.6, 39.2, 38.8, 38.3, 37.9, 37.5, 37.2, 36.9, 36.8, 36.7, 36.8, 37.1, 37.5, 38.1, 38.8, 39.7, 40.7, 41.9, 43.3, 44.8, 46.4, 48.1, 49.9, 51.7, 53.6, 55.5, 57.3, 59.2, 60.9, 62.6, 64.2, 65.7, 67, 68.2, 69.3, 70.1, 70.8, 71.4, 71.7, 71.9, 71.9, 71.8, 71.6, 71.3, 70.9, 70.4, 69.8, 69.2, 68.7, 68.1, 67.6, 67.2, 66.8, 66.5, 66.4, 66.4, 66.5, 66.7, 67.1, 67.7, 68.4, 69.2, 70.2, 71.2, 72.4, 73.7, 75, 76.4, 77.7, 79.1, 80.5, 81.8, 83, 84.1, 85.1, 86, 86.7, 87.3, 87.7, 87.9, 88, 87.8, 87.5, 87, 86.4, 85.6, 84.6, 83.6, 82.4, 81.2, 79.9, 78.6, 77.3, 76, 74.7, 73.5, 72.3, 71.3, 70.4, 69.6, 68.9, 68.4, 68, 67.8, 67.7, 67.8, 67.9, 68.2, 68.6, 69.1, 69.7, 70.3, 70.9, 71.5, 72.1, 72.6, 73.1, 73.5, 73.8, 73.9, 73.9, 73.8, 73.5, 73, 72.3, 71.5, 70.5, 69.4, 68.1, 66.7, 65.1, 63.4, 61.7, 59.9, 58, 56.2, 54.3, 52.5, 50.7, 49, 47.4, 45.9, 44.5, 43.3, 42.2, 41.3, 40.5, 39.9, 39.5, 39.2, 39.1, 39.1, 39.2, 39.4, 39.7, 40.1, 40.5, 40.9, 41.4, 41.7, 42.1, 42.4, 42.6, 42.6, 42.6, 42.4, 42.1, 41.6, 41, 40.3, 39.3, 38.3, 37.1, 35.8, 34.4, 32.9, 31.3, 29.7, 28.1, 26.4, 24.8, 23.3, 21.8, 20.4, 19.1, 18, 17, 16.1, 15.4, 14.9, 14.6, 14.5, 14.5, 14.7, 15.1, 15.6, 16.3, 17, 17.9, 18.8, 19.8, 20.9, 21.9, 22.9, 23.9, 24.8, 25.6, 26.4, 27, 27.5, 27.9, 28.1, 28.2, 28.2, 28, 27.7, 27.2, 26.6, 26, 25.2, 24.4, 23.6, 22.7, 21.9, 21, 20.3, 19.6, 19, 18.5, 18.1, 17.9, 17.8, 17.9, 18.2, 18.7, 19.3, 20.1, 21.1, 22.3, 23.5, 25, 26.5, 28.1, 29.8, 31.5, 33.2, 35, 36.7, 38.4, 40, 41.5, 42.9, 44.2, 45.4, 46.4, 47.2, 47.9, 48.5, 48.9, 49.1, 49.2, 49.2, 49.1, 48.9, 48.6, 48.2, 47.8, 47.4, 47.1, 46.7, 46.4, 46.2, 46.1, 46.1, 46.2, 46.5, 46.9, 47.5, 48.2, 49.1, 50.2, 51.4, 52.7, 54.2, 55.8, 57.4, 59.2, 60.9, 62.7, 64.5, 66.3, 68.1, 69.8, 71.4, 72.8, 74.2, 75.4, 76.5, 77.4, 78.1, 78.6, 79, 79.2, 79.2, 79.1, 78.8, 78.4, 77.9, 77.3, 76.7, 75.9, 75.2, 74.4, 73.7, 73, 72.4, 71.8, 71.4, 71, 70.8, 70.7, 70.8, 71, 71.4, 71.8, 72.5, 73.2, 74.1, 75, 76.1, 77.2, 78.3, 79.5, 80.6, 81.7, 82.8, 83.7, 84.6, 85.4, 86, 86.5, 86.8, 87, 86.9, 86.7, 86.3, 85.8, 85, 84.1, 83.1, 81.9, 80.6, 79.2, 77.8, 76.3, 74.7, 73.2, 71.7, 70.2, 68.8, 67.5, 66.3, 65.1, 64.2, 63.3, 62.6, 62.1, 61.7, 61.4, 61.3, 61.4, 61.5, 61.8, 62.1, 62.5, 62.9, 63.4, 63.9, 64.3, 64.7, 65.1, 65.3, 65.5, 65.5, 65.4, 65.2, 64.7, 64.2, 63.4, 62.5, 61.4, 60.2, 58.8, 57.3, 55.7, 54, 52.2, 50.4, 48.5, 46.6, 44.7, 42.9, 41.1, 39.4, 37.8, 36.4, 35, 33.8, 32.8, 31.9, 31.2, 30.7, 30.4, 30.2, 30.1, 30.2, 30.4, 30.7, 31.1, 31.6, 32.1, 32.7, 33.2, 33.7, 34.2, 34.6, 34.9, 35.1, 35.2, 35.1, 35, 34.6, 34.2, 33.5, 32.8, 31.9, 30.8, 29.7, 28.4, 27.1, 25.7, 24.3, 22.9, 21.5, 20.1, 18.7, 17.5, 16.3, 15.2, 14.3, 13.6, 12.9, 12.5, 12.3, 12.2, 12.3, 12.6, 13, 13.7, 14.4, 15.3, 16.3, 17.4, 18.6, 19.8, 21.1, 22.4, 23.6, 24.8, 26, 27, 28, 28.9, 29.6, 30.2, 30.6, 30.9, 31.1, 31.1, 31, 30.7, 30.4, 29.9, 29.4, 28.8, 28.1, 27.5, 26.8, 26.2, 25.6, 25.1, 24.7, 24.4, 24.2, 24.2, 24.3, 24.6, 25.1, 25.7, 26.5, 27.5, 28.7, 30, 31.4, 33, 34.6, 36.3, 38.2, 40, 41.8, 43.7, 45.5, 47.3, 49, 50.5, 52, 53.4, 54.6, 55.6, 56.5, 57.2, 57.8, 58.2, 58.5, 58.6, 58.6, 58.5, 58.2, 57.9, 57.6, 57.2, 56.8, 56.3, 56, 55.7, 55.4, 55.3, 55.2, 55.3, 55.5, 55.9, 56.4, 57.1, 57.9, 58.9, 60, 61.3, 62.6, 64.1, 65.6, 67.2, 68.9, 70.6, 72.2, 73.9, 75.5, 77, 78.4, 79.7, 80.9, 81.9, 82.8, 83.5, 84, 84.4, 84.5, 84.5, 84.3, 84, 83.5, 82.9, 82.2, 81.4, 80.5, 79.5, 78.6, 77.6, 76.6, 75.7, 74.9, 74.1, 73.4, 72.9, 72.4, 72.2, 72, 72, 72.1, 72.4, 72.8, 73.3, 74, 74.7, 75.5, 76.4, 77.3, 78.2, 79.1, 80, 80.8, 81.5, 82.2, 82.7, 83.1, 83.4, 83.4, 83.3, 83.1, 82.6, 82, 81.2, 80.3, 79.2, 77.9, 76.5, 75, 73.4, 71.8, 70.1, 68.4, 66.7, 65, 63.3, 61.8, 60.3, 58.9, 57.7, 56.6, 55.6, 54.8, 54.1, 53.6, 53.3, 53.1, 53, 53.1, 53.2, 53.5, 53.8, 54.2, 54.6, 55, 55.3, 55.7, 56, 56.2, 56.3, 56.2, 56.1, 55.8, 55.3, 54.7, 53.9, 53, 51.9, 50.7, 49.3, 47.8, 46.2, 44.5, 42.8, 41, 39.1, 37.3, 35.5, 33.7, 32, 30.4, 28.9, 27.6, 26.3, 25.3, 24.4, 23.6, 23.1, 22.7, 22.5, 22.4, 22.5, 22.8, 23.1, 23.6, 24.2, 24.8, 25.5, 26.2, 26.9, 27.6, 28.2, 28.8, 29.3, 29.7, 29.9, 30.1, 30.1, 29.9, 29.6, 29.2, 28.6, 27.9, 27.1, 26.2, 25.1, 24, 22.9, 21.7, 20.5, 19.3, 18.1, 17, 16, 15.1, 14.3, 13.6, 13.1, 12.7, 12.5, 12.5, 12.7, 13.1, 13.6, 14.3, 15.2, 16.2, 17.3, 18.6, 19.9, 21.4, 22.8, 24.3, 25.8, 27.2, 28.7, 30, 31.3, 32.4, 33.5, 34.4, 35.2, 35.8, 36.3, 36.6, 36.8, 36.9, 36.8, 36.6, 36.3, 35.9, 35.5, 35, 34.5, 34, 33.5, 33.1, 32.7, 32.5, 32.3, 32.3, 32.4, 32.6, 33.1, 33.7, 34.4, 35.3, 36.4, 37.7, 39, 40.6, 42.2, 43.9, 45.7, 47.6, 49.4, 51.3, 53.2, 55, 56.8, 58.5, 60.1, 61.6, 62.9, 64.1, 65.1, 65.9, 66.6, 67.1, 67.5, 67.7, 67.7, 67.7, 67.4, 67.1, 66.8, 66.3, 65.8, 65.3, 64.8, 64.3, 63.9, 63.6, 63.3, 63.2, 63.2, 63.3, 63.5, 63.9, 64.4, 65.1, 66, 66.9, 68, 69.2, 70.5, 71.9, 73.4, 74.8, 76.3, 77.8, 79.2, 80.6, 81.9, 83.1, 84.2, 85.2, 86, 86.6, 87.1, 87.4, 87.5, 87.4, 87.2, 86.7, 86.2, 85.4, 84.6, 83.6, 82.5, 81.4, 80.2, 79, 77.8, 76.6, 75.5, 74.4, 73.4, 72.5, 71.8, 71.1, 70.6, 70.2, 70, 69.9, 70, 70.2, 70.5, 70.9, 71.4, 72, 72.7, 73.4, 74.1, 74.8, 75.5, 76.1, 76.6, 77, 77.3, 77.5, 77.6, 77.5, 77.2, 76.7, 76.1, 75.3, 74.3, 73.2, 71.9, 70.5, 68.9, 67.3, 65.5, 63.8, 61.9, 60.1, 58.3, 56.5, 54.7, 53.1, 51.5, 50.1, 48.8, 47.6, 46.6, 45.7, 45, 44.5, 44.1, 43.8, 43.7, 43.8, 43.9, 44.1, 44.5, 44.8, 45.2, 45.6, 46, 46.3, 46.6, 46.9, 47, 47, 46.8, 46.6, 46.2, 45.6, 44.9, 44, 43, 41.8, 40.5, 39.1, 37.6, 36, 34.3, 32.6, 30.9, 29.2, 27.5, 25.9, 24.4, 22.9, 21.6, 20.4, 19.3, 18.4, 17.7, 17.2, 16.8, 16.6, 16.6, 16.7, 17, 17.5, 18.1, 18.8, 19.5, 20.4, 21.3, 22.2, 23.1, 24, 24.8, 25.6, 26.3, 26.9, 27.4, 27.7, 28, 28, 28, 27.7, 27.4, 26.9, 26.3, 25.6, 24.8, 23.9, 23, 22, 21, 20.1, 19.1, 18.3, 17.5, 16.8, 16.3, 15.8, 15.6, 15.5, 15.5, 15.8, 16.2, 16.8, 17.5, 18.5, 19.6, 20.8, 22.2, 23.6, 25.2, 26.8, 28.4, 30.1, 31.8, 33.4, 35, 36.5, 38, 39.3, 40.5, 41.5, 42.4, 43.2, 43.8, 44.3, 44.6, 44.7, 44.8, 44.7, 44.5, 44.2, 43.9]
}
];
xAxis = {
data: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "100", "101", "102", "103", "104", "105", "106", "107", "108", "109", "110", "111", "112", "113", "114", "115", "116", "117", "118", "119", "120", "121", "122", "123", "124", "125", "126", "127", "128", "129", "130", "131", "132", "133", "134", "135", "136", "137", "138", "139", "140", "141", "142", "143", "144", "145", "146", "147", "148", "149", "150", "151", "152", "153", "154", "155", "156", "157", "158", "159", "160", "161", "162", "163", "164", "165", "166", "167", "168", "169", "170", "171", "172", "173", "174", "175", "176", "177", "178", "179", "180", "181", "182", "183", "184", "185", "186", "187", "188", "189", "190", "191", "192", "193", "194", "195", "196", "197", "198", "199", "200", "201", "202", "203", "204", "205", "206", "207", "208", "209", "210", "211", "212", "213", "214", "215", "216", "217", "218", "219", "220", "221", "222", "223", "224", "225", "226", "227", "228", "229", "230", "231", "232", "233", "234", "235", "236", "237", "238", "239", "240", "241", "242", "243", "244", "245", "246", "247", "248", "249", "250", "251", "252", "253", "254", "255", "256", "257", "258", "259", "260", "261", "262", "263", "264", "265", "266", "267", "268", "269", "270", "271", "272", "273", "274", "275", "276", "277", "278", "279", "280", "281", "282", "283", "284", "285", "286", "287", "288", "289", "290", "291", "292", "293", "294", "295", "296", "297", "298", "299", "300", "301", "302", "303", "304", "305", "306", "307", "308", "309", "310", "311", "312", "313", "314", "315", "316", "317", "318", "319", "320", "321", "322", "323", "324", "325", "326", "327", "328", "329", "330", "331", "332", "333", "334", "335", "336", "337", "338", "339", "340", "341", "342", "343", "344", "345", "346", "347", "348", "349", "350", "351", "352", "353", "354", "355", "356", "357", "358", "359", "360", "361", "362", "363", "364", "365", "366", "367", "368", "369", "370", "371", "372", "373", "374", "375", "376", "377", "378", "379", "380", "381", "382", "383", "384", "385", "386", "387", "388", "389", "390", "391", "392", "393", "394", "395", "396", "397", "398", "399", "400", "401", "402", "403", "404", "405", "406", "407", "408", "409", "410", "411", "412", "413", "414", "415", "416", "417", "418", "419", "420", "421", "422", "423", "424", "425", "426", "427", "428", "429", "430", "431", "432", "433", "434", "435", "436", "437", "438", "439", "440", "441", "442", "443", "444", "445", "446", "447", "448", "449", "450", "451", "452", "453", "454", "455", "456", "457", "458", "459", "460", "461", "462", "463", "464", "465", "466", "467", "468", "469", "470", "471", "472", "473", "474", "475", "476", "477", "478", "479", "480", "481", "482", "483", "484", "485", "486", "487", "488", "489", "490", "491", "492", "493", "494", "495", "496", "497", "498", "499", "500", "501", "502", "503", "504", "505", "506", "507", "508", "509", "510", "511", "512", "513", "514", "515", "516", "517", "518", "519", "520", "521", "522", "523", "524", "525", "526", "527", "528", "529", "530", "531", "532", "533", "534", "535", "536", "537", "538", "539", "540", "541", "542", "543", "544", "545", "546", "547", "548", "549", "550", "551", "552", "553", "554", "555", "556", "557", "558", "559", "560", "561", "562", "563", "564", "565", "566", "567", "568", "569", "570", "571", "572", "573", "574", "575", "576", "577", "578", "579", "580", "581", "582", "583", "584", "585", "586", "587", "588", "589", "590", "591", "592", "593", "594", "595", "596", "597", "598", "599", "600", "601", "602", "603", "604", "605", "606", "607", "608", "609", "610", "611", "612", "613", "614", "615", "616", "617", "618", "619", "620", "621", "622", "623", "624", "625", "626", "627", "628", "629", "630", "631", "632", "633", "634", "635", "636", "637", "638", "639", "640", "641", "642", "643", "644", "645", "646", "647", "648", "649", "650", "651", "652", "653", "654", "655", "656", "657", "658", "659", "660", "661", "662", "663", "664", "665", "666", "667", "668", "669", "670", "671", "672", "673", "674", "675", "676", "677", "678", "679", "680", "681", "682", "683", "684", "685", "686", "687", "688", "689", "690", "691", "692", "693", "694", "695", "696", "697", "698", "699", "700", "701", "702", "703", "704", "705", "706", "707", "708", "709", "710", "711", "712", "713", "714", "715", "716", "717", "718", "719", "720", "721", "722", "723", "724", "725", "726", "727", "728", "729", "730", "731", "732", "733", "734", "735", "736", "737", "738", "739", "740", "741", "742", "743", "744", "745", "746", "747", "748", "749", "750", "751", "752", "753", "754", "755", "756", "757", "758", "759", "760", "761", "762", "763", "764", "765", "766", "767", "768", "769", "770", "771", "772", "773", "774", "775", "776", "777", "778", "779", "780", "781", "782", "783", "784", "785", "786", "787", "788", "789", "790", "791", "792", "793", "794", "795", "796", "797", "798", "799", "800", "801", "802", "803", "804", "805", "806", "807", "808", "809", "810", "811", "812", "813", "814", "815", "816", "817", "818", "819", "820", "821", "822", "823", "824", "825", "826", "827", "828", "829", "830", "831", "832", "833", "834", "835", "836", "837", "838", "839", "840", "841", "842", "843", "844", "845", "846", "847", "848", "849", "850", "851", "852", "853", "854", "855", "856", "857", "858", "859", "860", "861", "862", "863", "864", "865", "866", "867", "868", "869", "870", "871", "872", "873", "874", "875", "876", "877", "878", "879", "880", "881", "882", "883", "884", "885", "886", "887", "888", "889", "890", "891", "892", "893", "894", "895", "896", "897", "898", "899", "900", "901", "902", "903", "904", "905", "906", "907", "908", "909", "910", "911", "912", "913", "914", "915", "916", "917", "918", "919", "920", "921", "922", "923", "924", "925", "926", "927", "928", "929", "930", "931", "932", "933", "934", "935", "936", "937", "938", "939", "940", "941", "942", "943", "944", "945", "946", "947", "948", "949", "950", "951", "952", "953", "954", "955", "956", "957", "958", "959", "960", "961", "962", "963", "964", "965", "966", "967", "968", "969", "970", "971", "972", "973", "974", "975", "976", "977", "978", "979", "980", "981", "982", "983", "984", "985", "986", "987", "988", "989", "990", "991", "992", "993", "994", "995", "996", "997", "998", "999", "1000", "1001", "1002", "1003", "1004", "1005", "1006", "1007", "1008", "1009", "1010", "1011", "1012", "1013", "1014", "1015", "1016", "1017", "1018", "1019", "1020", "1021", "1022", "1023", "1024", "1025", "1026", "1027", "1028", "1029", "1030", "1031", "1032", "1033", "1034", "1035", "1036", "1037", "1038", "1039", "1040", "1041", "1042", "1043", "1044", "1045", "1046", "1047", "1048", "1049", "1050", "1051", "1052", "1053", "1054", "1055", "1056", "1057", "1058", "1059", "1060", "1061", "1062", "1063", "1064", "1065", "1066", "1067", "1068", "1069", "1070", "1071", "1072", "1073", "1074", "1075", "1076", "1077", "1078", "1079", "1080", "1081", "1082", "1083", "1084", "1085", "1086", "1087", "1088", "1089", "1090", "1091", "1092", "1093", "1094", "1095", "1096", "1097", "1098", "1099", "1100", "1101", "1102", "1103", "1104", "1105", "1106", "1107", "1108", "1109", "1110", "1111", "1112", "1113", "1114", "1115", "1116", "1117", "1118", "1119", "1120", "1121", "1122", "1123", "1124", "1125", "1126", "1127", "1128", "1129", "1130", "1131", "1132", "1133", "1134", "1135", "1136", "1137", "1138", "1139", "1140", "1141", "1142", "1143", "1144", "1145", "1146", "1147", "1148", "1149", "1150", "1151", "1152", "1153", "1154", "1155", "1156", "1157", "1158", "1159", "1160", "1161", "1162", "1163", "1164", "1165", "1166", "1167", "1168", "1169", "1170", "1171", "1172", "1173", "1174", "1175", "1176", "1177", "1178", "1179", "1180", "1181", "1182", "1183", "1184", "1185", "1186", "1187", "1188", "1189", "1190", "1191", "1192", "1193", "1194", "1195", "1196", "1197", "1198", "1199", "1200", "1201", "1202", "1203", "1204", "1205", "1206", "1207", "1208", "1209", "1210", "1211", "1212", "1213", "1214", "1215", "1216", "1217", "1218", "1219", "1220", "1221", "1222", "1223", "1224", "1225", "1226", "1227", "1228", "1229", "1230", "1231", "1232", "1233", "1234", "1235", "1236", "1237", "1238", "1239", "1240", "1241", "1242", "1243", "1244", "1245", "1246", "1247", "1248", "1249", "1250", "1251", "1252", "1253", "1254", "1255", "1256", "1257", "1258", "1259", "1260", "1261", "1262", "1263", "1264", "1265", "1266", "1267", "1268", "1269", "1270", "1271", "1272", "1273", "1274", "1275", "1276", "1277", "1278", "1279", "1280", "1281", "1282", "1283", "1284", "1285", "1286", "1287", "1288", "1289", "1290", "1291", "1292", "1293", "1294", "1295", "1296", "1297", "1298", "1299", "1300", "1301", "1302", "1303", "1304", "1305", "1306", "1307", "1308", "1309", "1310", "1311", "1312", "1313", "1314", "1315", "1316", "1317", "1318", "1319", "1320", "1321", "1322", "1323", "1324", "1325", "1326", "1327", "1328", "1329", "1330", "1331", "1332", "1333", "1334", "1335", "1336", "1337", "1338", "1339", "1340", "1341", "1342", "1343", "1344", "1345", "1346", "1347", "1348", "1349", "1350", "1351", "1352", "1353", "1354", "1355", "1356", "1357", "1358", "1359", "1360", "1361", "1362", "1363", "1364", "1365", "1366", "1367", "1368", "1369", "1370", "1371", "1372", "1373", "1374", "1375", "1376", "1377", "1378", "1379", "1380", "1381", "1382", "1383", "1384", "1385", "1386", "1387", "1388", "1389", "1390", "1391", "1392", "1393", "1394", "1395", "1396", "1397", "1398", "1399", "1400", "1401", "1402", "1403", "1404", "1405", "1406", "1407", "1408", "1409", "1410", "1411", "1412", "1413", "1414", "1415", "1416", "1417", "1418", "1419", "1420", "1421", "1422", "1423", "1424", "1425", "1426", "1427", "1428", "1429", "1430", "1431", "1432", "1433", "1434", "1435", "1436", "1437", "1438", "1439", "1440", "1441", "1442", "1443", "1444", "1445", "1446", "1447", "1448", "1449", "1450", "1451", "1452", "1453", "1454", "1455", "1456", "1457", "1458", "1459", "1460", "1461", "1462", "1463", "1464", "1465", "1466", "1467", "1468", "1469", "1470", "1471", "1472", "1473", "1474", "1475", "1476", "1477", "1478", "1479", "1480", "1481", "1482", "1483", "1484", "1485", "1486", "1487", "1488", "1489", "1490", "1491", "1492", "1493", "1494", "1495", "1496", "1497", "1498", "1499", "1500", "1501", "1502", "1503", "1504", "1505", "1506", "1507", "1508", "1509", "1510", "1511", "1512", "1513", "1514", "1515", "1516", "1517", "1518", "1519", "1520", "1521", "1522", "1523", "1524", "1525", "1526", "1527", "1528", "1529", "1530", "1531", "1532", "1533", "1534", "1535", "1536", "1537", "1538", "1539", "1540", "1541", "1542", "1543", "1544", "1545", "1546", "1547", "1548", "1549", "1550", "1551", "1552", "1553", "1554", "1555", "1556", "1557", "1558", "1559", "1560", "1561", "1562", "1563", "1564", "1565", "1566", "1567", "1568", "1569", "1570", "1571", "1572", "1573", "1574", "1575", "1576", "1577", "1578", "1579", "1580", "1581", "1582", "1583", "1584", "1585", "1586", "1587", "1588", "1589", "1590", "1591", "1592", "1593", "1594", "1595", "1596", "1597", "1598", "1599", "1600", "1601", "1602", "1603", "1604", "1605", "1606", "1607", "1608", "1609", "1610", "1611", "1612", "1613", "1614", "1615", "1616", "1617", "1618", "1619", "1620", "1621", "1622", "1623", "1624", "1625", "1626", "1627", "1628", "1629", "1630", "1631", "1632", "1633", "1634", "1635", "1636", "1637", "1638", "1639", "1640", "1641", "1642", "1643", "1644", "1645", "1646", "1647", "1648", "1649", "1650", "1651", "1652", "1653", "1654", "1655", "1656", "1657", "1658", "1659", "1660", "1661", "1662", "1663", "1664", "1665", "1666", "1667", "1668", "1669", "1670", "1671", "1672", "1673", "1674", "1675", "1676", "1677", "1678", "1679", "1680", "1681", "1682", "1683", "1684", "1685", "1686", "1687", "1688", "1689", "1690", "1691", "1692", "1693", "1694", "1695", "1696", "1697", "1698", "1699", "1700", "1701", "1702", "1703", "1704", "1705", "1706", "1707", "1708", "1709", "1710", "1711", "1712", "1713", "1714", "1715", "1716", "1717", "1718", "1719", "1720", "1721", "1722", "1723", "1724", "1725", "1726", "1727", "1728", "1729", "1730", "1731", "1732", "1733", "1734", "1735", "1736", "1737", "1738", "1739", "1740", "1741", "1742", "1743", "1744", "1745", "1746", "1747", "1748", "1749", "1750", "1751", "1752", "1753", "1754", "1755", "1756", "1757", "1758", "1759", "1760", "1761", "1762", "1763", "1764", "1765", "1766", "1767", "1768", "1769", "1770", "1771", "1772", "1773", "1774", "1775", "1776", "1777", "1778", "1779", "1780", "1781", "1782", "1783", "1784", "1785", "1786", "1787", "1788", "1789", "1790", "1791", "1792", "1793", "1794", "1795", "1796", "1797", "1798", "1799", "1800", "1801", "1802", "1803", "1804", "1805", "1806", "1807", "1808", "1809", "1810", "1811", "1812", "1813", "1814", "1815", "1816", "1817", "1818", "1819", "1820", "1821", "1822", "1823", "1824", "1825", "1826", "1827", "1828", "1829", "1830", "1831", "1832", "1833", "1834", "1835", "1836", "1837", "1838", "1839", "1840", "1841", "1842", "1843", "1844", "1845", "1846", "1847", "1848", "1849", "1850", "1851", "1852", "1853", "1854", "1855", "1856", "1857", "1858", "1859", "1860", "1861", "1862", "1863", "1864", "1865", "1866", "1867", "1868", "1869", "1870", "1871", "1872", "1873", "1874", "1875", "1876", "1877", "1878", "1879", "1880", "1881", "1882", "1883", "1884", "1885", "1886", "1887", "1888", "1889", "1890", "1891", "1892", "1893", "1894", "1895", "1896", "1897", "1898", "1899", "1900", "1901", "1902", "1903", "1904", "1905", "1906", "1907", "1908", "1909", "1910", "1911", "1912", "1913", "1914", "1915", "1916", "1917", "1918", "1919", "1920", "1921", "1922", "1923", "1924", "1925", "1926", "1927", "1928", "1929", "1930", "1931", "1932", "1933", "1934", "1935", "1936", "1937", "1938", "1939", "1940", "1941", "1942", "1943", "1944", "1945", "1946", "1947", "1948", "1949", "1950", "1951", "1952", "1953", "1954", "1955", "1956", "1957", "1958", "1959", "1960", "1961", "1962", "1963", "1964", "1965", "1966", "1967", "1968", "1969", "1970", "1971", "1972", "1973", "1974", "1975", "1976", "1977", "1978", "1979", "1980", "1981", "1982", "1983", "1984", "1985", "1986", "1987", "1988", "1989", "1990", "1991", "1992", "1993", "1994", "1995", "1996", "1997", "1998", "1999"],
hideTicks: true
};
}<script setup lang="ts">
const series = [
{
label: "Signal",
color: "primary",
data: [50, 51.9, 53.8, 55.6, 57.3, 59, 60.5, 62, 63.2, 64.4, 65.3, 66.1, 66.8, 67.3, 67.6, 67.7, 67.7, 67.6, 67.4, 67, 66.6, 66.2, 65.7, 65.2, 64.7, 64.2, 63.8, 63.5, 63.3, 63.2, 63.2, 63.3, 63.6, 64, 64.6, 65.4, 66.2, 67.2, 68.4, 69.6, 70.9, 72.3, 73.8, 75.3, 76.8, 78.2, 79.7, 81, 82.3, 83.5, 84.5, 85.4, 86.2, 86.8, 87.2, 87.4, 87.5, 87.4, 87, 86.6, 86, 85.2, 84.3, 83.3, 82.2, 81.1, 79.9, 78.7, 77.5, 76.3, 75.2, 74.1, 73.1, 72.3, 71.5, 70.9, 70.5, 70.1, 70, 69.9, 70, 70.2, 70.6, 71.1, 71.6, 72.2, 72.9, 73.6, 74.3, 75, 75.6, 76.2, 76.7, 77.1, 77.4, 77.6, 77.6, 77.4, 77.1, 76.5, 75.9, 75, 74, 72.8, 71.5, 70, 68.4, 66.8, 65, 63.2, 61.4, 59.6, 57.7, 56, 54.3, 52.6, 51.1, 49.7, 48.4, 47.3, 46.3, 45.5, 44.8, 44.3, 44, 43.8, 43.7, 43.8, 44, 44.2, 44.6, 44.9, 45.3, 45.7, 46.1, 46.4, 46.7, 46.9, 47, 46.9, 46.8, 46.5, 46, 45.4, 44.6, 43.7, 42.6, 41.4, 40.1, 38.7, 37.1, 35.5, 33.8, 32.1, 30.4, 28.7, 27, 25.4, 23.9, 22.5, 21.2, 20, 19, 18.2, 17.5, 17, 16.7, 16.6, 16.6, 16.8, 17.2, 17.6, 18.3, 19, 19.8, 20.6, 21.5, 22.4, 23.4, 24.2, 25.1, 25.8, 26.5, 27.1, 27.5, 27.8, 28, 28, 27.9, 27.7, 27.3, 26.7, 26.1, 25.4, 24.5, 23.6, 22.7, 21.7, 20.8, 19.8, 18.9, 18, 17.3, 16.6, 16.1, 15.7, 15.5, 15.5, 15.6, 15.9, 16.3, 17, 17.8, 18.8, 19.9, 21.2, 22.6, 24.1, 25.6, 27.3, 28.9, 30.6, 32.3, 33.9, 35.5, 37, 38.4, 39.6, 40.8, 41.8, 42.7, 43.4, 44, 44.4, 44.6, 44.8, 44.8, 44.6, 44.4, 44.1, 43.8, 43.4, 43, 42.6, 42.2, 41.8, 41.6, 41.4, 41.4, 41.5, 41.7, 42, 42.6, 43.3, 44.1, 45.1, 46.3, 47.6, 49, 50.6, 52.2, 54, 55.8, 57.6, 59.5, 61.3, 63.1, 64.9, 66.6, 68.2, 69.6, 71, 72.2, 73.2, 74, 74.7, 75.3, 75.6, 75.8, 75.8, 75.7, 75.4, 75, 74.6, 74, 73.4, 72.7, 72.1, 71.4, 70.8, 70.3, 69.8, 69.4, 69.1, 68.9, 68.9, 69, 69.3, 69.7, 70.2, 70.9, 71.7, 72.7, 73.7, 74.8, 76, 77.3, 78.5, 79.8, 81, 82.2, 83.4, 84.4, 85.3, 86.1, 86.8, 87.3, 87.6, 87.8, 87.8, 87.6, 87.2, 86.6, 85.9, 85, 84, 82.9, 81.7, 80.3, 78.9, 77.5, 76.1, 74.7, 73.3, 71.9, 70.7, 69.5, 68.4, 67.5, 66.7, 66, 65.5, 65.1, 64.9, 64.8, 64.9, 65, 65.3, 65.7, 66.1, 66.6, 67.2, 67.7, 68.2, 68.7, 69.1, 69.5, 69.7, 69.9, 69.9, 69.7, 69.4, 68.9, 68.3, 67.5, 66.5, 65.3, 64.1, 62.6, 61.1, 59.4, 57.6, 55.8, 54, 52.1, 50.2, 48.3, 46.5, 44.8, 43.1, 41.6, 40.2, 38.9, 37.8, 36.8, 36, 35.4, 34.9, 34.6, 34.5, 34.5, 34.6, 34.8, 35.2, 35.5, 36, 36.5, 36.9, 37.4, 37.8, 38.2, 38.4, 38.6, 38.7, 38.6, 38.4, 38, 37.5, 36.9, 36.1, 35.2, 34.1, 32.9, 31.6, 30.2, 28.7, 27.2, 25.7, 24.2, 22.6, 21.2, 19.8, 18.4, 17.2, 16.1, 15.2, 14.4, 13.8, 13.4, 13.1, 13, 13.1, 13.4, 13.8, 14.4, 15.1, 16, 16.9, 18, 19.1, 20.2, 21.4, 22.5, 23.6, 24.7, 25.6, 26.5, 27.3, 28, 28.5, 28.9, 29.2, 29.3, 29.2, 29.1, 28.7, 28.3, 27.8, 27.2, 26.5, 25.8, 25, 24.3, 23.5, 22.9, 22.2, 21.7, 21.3, 21, 20.8, 20.8, 20.9, 21.2, 21.7, 22.4, 23.3, 24.3, 25.4, 26.8, 28.2, 29.8, 31.4, 33.1, 34.9, 36.7, 38.5, 40.3, 42.1, 43.8, 45.4, 46.9, 48.2, 49.5, 50.6, 51.5, 52.3, 52.9, 53.4, 53.7, 53.9, 53.9, 53.8, 53.6, 53.4, 53, 52.7, 52.3, 51.9, 51.5, 51.2, 51, 50.8, 50.7, 50.8, 51, 51.4, 51.9, 52.5, 53.3, 54.3, 55.4, 56.7, 58.1, 59.6, 61.1, 62.8, 64.5, 66.3, 68, 69.7, 71.4, 73.1, 74.6, 76.1, 77.4, 78.6, 79.6, 80.5, 81.1, 81.7, 82, 82.2, 82.1, 82, 81.7, 81.2, 80.6, 79.9, 79.2, 78.4, 77.5, 76.7, 75.8, 75, 74.2, 73.5, 72.9, 72.5, 72.1, 71.9, 71.8, 71.8, 72, 72.3, 72.8, 73.4, 74.1, 74.9, 75.8, 76.8, 77.8, 78.8, 79.9, 80.9, 81.8, 82.7, 83.5, 84.2, 84.8, 85.2, 85.4, 85.5, 85.4, 85.2, 84.7, 84.1, 83.3, 82.3, 81.2, 80, 78.6, 77.2, 75.6, 74, 72.4, 70.8, 69.2, 67.6, 66.1, 64.6, 63.3, 62.1, 61, 60, 59.2, 58.5, 58, 57.6, 57.4, 57.4, 57.4, 57.6, 57.8, 58.1, 58.5, 58.9, 59.4, 59.8, 60.2, 60.5, 60.8, 60.9, 60.9, 60.9, 60.6, 60.2, 59.7, 59, 58.1, 57.1, 55.9, 54.6, 53.1, 51.5, 49.8, 48.1, 46.2, 44.4, 42.5, 40.7, 38.8, 37.1, 35.4, 33.8, 32.3, 31, 29.8, 28.7, 27.9, 27.2, 26.7, 26.3, 26.1, 26.1, 26.2, 26.4, 26.8, 27.2, 27.8, 28.3, 28.9, 29.6, 30.2, 30.7, 31.2, 31.7, 32, 32.2, 32.3, 32.2, 32.1, 31.7, 31.2, 30.6, 29.9, 29, 28, 26.9, 25.7, 24.4, 23.1, 21.8, 20.5, 19.2, 17.9, 16.7, 15.7, 14.7, 13.8, 13.1, 12.6, 12.2, 12, 12, 12.2, 12.6, 13.1, 13.8, 14.6, 15.6, 16.7, 17.9, 19.2, 20.5, 21.9, 23.2, 24.6, 25.9, 27.2, 28.4, 29.5, 30.5, 31.4, 32.1, 32.7, 33.2, 33.5, 33.6, 33.6, 33.5, 33.3, 33, 32.5, 32, 31.5, 30.9, 30.3, 29.8, 29.3, 28.8, 28.5, 28.2, 28.1, 28.1, 28.2, 28.5, 29, 29.6, 30.5, 31.5, 32.6, 33.9, 35.3, 36.9, 38.6, 40.3, 42.1, 44, 45.9, 47.8, 49.6, 51.4, 53.1, 54.8, 56.3, 57.7, 58.9, 60, 61, 61.7, 62.4, 62.8, 63.1, 63.2, 63.2, 63.1, 62.9, 62.6, 62.2, 61.8, 61.3, 60.9, 60.5, 60.1, 59.8, 59.5, 59.4, 59.4, 59.5, 59.8, 60.2, 60.8, 61.5, 62.3, 63.3, 64.5, 65.7, 67.1, 68.5, 70, 71.6, 73.2, 74.8, 76.3, 77.9, 79.3, 80.7, 81.9, 83, 84, 84.8, 85.5, 85.9, 86.2, 86.3, 86.3, 86, 85.6, 85.1, 84.4, 83.6, 82.7, 81.7, 80.6, 79.6, 78.5, 77.4, 76.3, 75.4, 74.4, 73.6, 72.9, 72.3, 71.9, 71.6, 71.4, 71.4, 71.5, 71.7, 72.1, 72.6, 73.2, 73.9, 74.6, 75.4, 76.2, 77, 77.8, 78.5, 79.2, 79.7, 80.2, 80.5, 80.7, 80.8, 80.6, 80.3, 79.8, 79.2, 78.4, 77.4, 76.2, 74.9, 73.5, 71.9, 70.3, 68.6, 66.8, 65.1, 63.3, 61.5, 59.8, 58.2, 56.6, 55.1, 53.8, 52.6, 51.5, 50.6, 49.9, 49.3, 48.9, 48.6, 48.5, 48.4, 48.5, 48.7, 49, 49.4, 49.7, 50.1, 50.5, 50.9, 51.2, 51.4, 51.5, 51.6, 51.5, 51.2, 50.8, 50.3, 49.6, 48.7, 47.7, 46.6, 45.3, 43.8, 42.3, 40.7, 39, 37.2, 35.5, 33.7, 31.9, 30.2, 28.5, 27, 25.5, 24.2, 23, 21.9, 21, 20.3, 19.8, 19.4, 19.3, 19.2, 19.4, 19.7, 20.1, 20.7, 21.3, 22, 22.8, 23.6, 24.4, 25.2, 25.9, 26.6, 27.2, 27.8, 28.2, 28.5, 28.6, 28.6, 28.5, 28.2, 27.8, 27.3, 26.6, 25.8, 24.9, 24, 22.9, 21.9, 20.8, 19.7, 18.6, 17.6, 16.7, 15.8, 15.1, 14.5, 14.1, 13.8, 13.7, 13.7, 14, 14.4, 15, 15.7, 16.7, 17.8, 19, 20.3, 21.7, 23.2, 24.8, 26.3, 27.9, 29.5, 31, 32.5, 33.9, 35.2, 36.3, 37.4, 38.3, 39, 39.6, 40.1, 40.4, 40.6, 40.6, 40.5, 40.3, 40, 39.6, 39.2, 38.8, 38.3, 37.9, 37.5, 37.2, 36.9, 36.8, 36.7, 36.8, 37.1, 37.5, 38.1, 38.8, 39.7, 40.7, 41.9, 43.3, 44.8, 46.4, 48.1, 49.9, 51.7, 53.6, 55.5, 57.3, 59.2, 60.9, 62.6, 64.2, 65.7, 67, 68.2, 69.3, 70.1, 70.8, 71.4, 71.7, 71.9, 71.9, 71.8, 71.6, 71.3, 70.9, 70.4, 69.8, 69.2, 68.7, 68.1, 67.6, 67.2, 66.8, 66.5, 66.4, 66.4, 66.5, 66.7, 67.1, 67.7, 68.4, 69.2, 70.2, 71.2, 72.4, 73.7, 75, 76.4, 77.7, 79.1, 80.5, 81.8, 83, 84.1, 85.1, 86, 86.7, 87.3, 87.7, 87.9, 88, 87.8, 87.5, 87, 86.4, 85.6, 84.6, 83.6, 82.4, 81.2, 79.9, 78.6, 77.3, 76, 74.7, 73.5, 72.3, 71.3, 70.4, 69.6, 68.9, 68.4, 68, 67.8, 67.7, 67.8, 67.9, 68.2, 68.6, 69.1, 69.7, 70.3, 70.9, 71.5, 72.1, 72.6, 73.1, 73.5, 73.8, 73.9, 73.9, 73.8, 73.5, 73, 72.3, 71.5, 70.5, 69.4, 68.1, 66.7, 65.1, 63.4, 61.7, 59.9, 58, 56.2, 54.3, 52.5, 50.7, 49, 47.4, 45.9, 44.5, 43.3, 42.2, 41.3, 40.5, 39.9, 39.5, 39.2, 39.1, 39.1, 39.2, 39.4, 39.7, 40.1, 40.5, 40.9, 41.4, 41.7, 42.1, 42.4, 42.6, 42.6, 42.6, 42.4, 42.1, 41.6, 41, 40.3, 39.3, 38.3, 37.1, 35.8, 34.4, 32.9, 31.3, 29.7, 28.1, 26.4, 24.8, 23.3, 21.8, 20.4, 19.1, 18, 17, 16.1, 15.4, 14.9, 14.6, 14.5, 14.5, 14.7, 15.1, 15.6, 16.3, 17, 17.9, 18.8, 19.8, 20.9, 21.9, 22.9, 23.9, 24.8, 25.6, 26.4, 27, 27.5, 27.9, 28.1, 28.2, 28.2, 28, 27.7, 27.2, 26.6, 26, 25.2, 24.4, 23.6, 22.7, 21.9, 21, 20.3, 19.6, 19, 18.5, 18.1, 17.9, 17.8, 17.9, 18.2, 18.7, 19.3, 20.1, 21.1, 22.3, 23.5, 25, 26.5, 28.1, 29.8, 31.5, 33.2, 35, 36.7, 38.4, 40, 41.5, 42.9, 44.2, 45.4, 46.4, 47.2, 47.9, 48.5, 48.9, 49.1, 49.2, 49.2, 49.1, 48.9, 48.6, 48.2, 47.8, 47.4, 47.1, 46.7, 46.4, 46.2, 46.1, 46.1, 46.2, 46.5, 46.9, 47.5, 48.2, 49.1, 50.2, 51.4, 52.7, 54.2, 55.8, 57.4, 59.2, 60.9, 62.7, 64.5, 66.3, 68.1, 69.8, 71.4, 72.8, 74.2, 75.4, 76.5, 77.4, 78.1, 78.6, 79, 79.2, 79.2, 79.1, 78.8, 78.4, 77.9, 77.3, 76.7, 75.9, 75.2, 74.4, 73.7, 73, 72.4, 71.8, 71.4, 71, 70.8, 70.7, 70.8, 71, 71.4, 71.8, 72.5, 73.2, 74.1, 75, 76.1, 77.2, 78.3, 79.5, 80.6, 81.7, 82.8, 83.7, 84.6, 85.4, 86, 86.5, 86.8, 87, 86.9, 86.7, 86.3, 85.8, 85, 84.1, 83.1, 81.9, 80.6, 79.2, 77.8, 76.3, 74.7, 73.2, 71.7, 70.2, 68.8, 67.5, 66.3, 65.1, 64.2, 63.3, 62.6, 62.1, 61.7, 61.4, 61.3, 61.4, 61.5, 61.8, 62.1, 62.5, 62.9, 63.4, 63.9, 64.3, 64.7, 65.1, 65.3, 65.5, 65.5, 65.4, 65.2, 64.7, 64.2, 63.4, 62.5, 61.4, 60.2, 58.8, 57.3, 55.7, 54, 52.2, 50.4, 48.5, 46.6, 44.7, 42.9, 41.1, 39.4, 37.8, 36.4, 35, 33.8, 32.8, 31.9, 31.2, 30.7, 30.4, 30.2, 30.1, 30.2, 30.4, 30.7, 31.1, 31.6, 32.1, 32.7, 33.2, 33.7, 34.2, 34.6, 34.9, 35.1, 35.2, 35.1, 35, 34.6, 34.2, 33.5, 32.8, 31.9, 30.8, 29.7, 28.4, 27.1, 25.7, 24.3, 22.9, 21.5, 20.1, 18.7, 17.5, 16.3, 15.2, 14.3, 13.6, 12.9, 12.5, 12.3, 12.2, 12.3, 12.6, 13, 13.7, 14.4, 15.3, 16.3, 17.4, 18.6, 19.8, 21.1, 22.4, 23.6, 24.8, 26, 27, 28, 28.9, 29.6, 30.2, 30.6, 30.9, 31.1, 31.1, 31, 30.7, 30.4, 29.9, 29.4, 28.8, 28.1, 27.5, 26.8, 26.2, 25.6, 25.1, 24.7, 24.4, 24.2, 24.2, 24.3, 24.6, 25.1, 25.7, 26.5, 27.5, 28.7, 30, 31.4, 33, 34.6, 36.3, 38.2, 40, 41.8, 43.7, 45.5, 47.3, 49, 50.5, 52, 53.4, 54.6, 55.6, 56.5, 57.2, 57.8, 58.2, 58.5, 58.6, 58.6, 58.5, 58.2, 57.9, 57.6, 57.2, 56.8, 56.3, 56, 55.7, 55.4, 55.3, 55.2, 55.3, 55.5, 55.9, 56.4, 57.1, 57.9, 58.9, 60, 61.3, 62.6, 64.1, 65.6, 67.2, 68.9, 70.6, 72.2, 73.9, 75.5, 77, 78.4, 79.7, 80.9, 81.9, 82.8, 83.5, 84, 84.4, 84.5, 84.5, 84.3, 84, 83.5, 82.9, 82.2, 81.4, 80.5, 79.5, 78.6, 77.6, 76.6, 75.7, 74.9, 74.1, 73.4, 72.9, 72.4, 72.2, 72, 72, 72.1, 72.4, 72.8, 73.3, 74, 74.7, 75.5, 76.4, 77.3, 78.2, 79.1, 80, 80.8, 81.5, 82.2, 82.7, 83.1, 83.4, 83.4, 83.3, 83.1, 82.6, 82, 81.2, 80.3, 79.2, 77.9, 76.5, 75, 73.4, 71.8, 70.1, 68.4, 66.7, 65, 63.3, 61.8, 60.3, 58.9, 57.7, 56.6, 55.6, 54.8, 54.1, 53.6, 53.3, 53.1, 53, 53.1, 53.2, 53.5, 53.8, 54.2, 54.6, 55, 55.3, 55.7, 56, 56.2, 56.3, 56.2, 56.1, 55.8, 55.3, 54.7, 53.9, 53, 51.9, 50.7, 49.3, 47.8, 46.2, 44.5, 42.8, 41, 39.1, 37.3, 35.5, 33.7, 32, 30.4, 28.9, 27.6, 26.3, 25.3, 24.4, 23.6, 23.1, 22.7, 22.5, 22.4, 22.5, 22.8, 23.1, 23.6, 24.2, 24.8, 25.5, 26.2, 26.9, 27.6, 28.2, 28.8, 29.3, 29.7, 29.9, 30.1, 30.1, 29.9, 29.6, 29.2, 28.6, 27.9, 27.1, 26.2, 25.1, 24, 22.9, 21.7, 20.5, 19.3, 18.1, 17, 16, 15.1, 14.3, 13.6, 13.1, 12.7, 12.5, 12.5, 12.7, 13.1, 13.6, 14.3, 15.2, 16.2, 17.3, 18.6, 19.9, 21.4, 22.8, 24.3, 25.8, 27.2, 28.7, 30, 31.3, 32.4, 33.5, 34.4, 35.2, 35.8, 36.3, 36.6, 36.8, 36.9, 36.8, 36.6, 36.3, 35.9, 35.5, 35, 34.5, 34, 33.5, 33.1, 32.7, 32.5, 32.3, 32.3, 32.4, 32.6, 33.1, 33.7, 34.4, 35.3, 36.4, 37.7, 39, 40.6, 42.2, 43.9, 45.7, 47.6, 49.4, 51.3, 53.2, 55, 56.8, 58.5, 60.1, 61.6, 62.9, 64.1, 65.1, 65.9, 66.6, 67.1, 67.5, 67.7, 67.7, 67.7, 67.4, 67.1, 66.8, 66.3, 65.8, 65.3, 64.8, 64.3, 63.9, 63.6, 63.3, 63.2, 63.2, 63.3, 63.5, 63.9, 64.4, 65.1, 66, 66.9, 68, 69.2, 70.5, 71.9, 73.4, 74.8, 76.3, 77.8, 79.2, 80.6, 81.9, 83.1, 84.2, 85.2, 86, 86.6, 87.1, 87.4, 87.5, 87.4, 87.2, 86.7, 86.2, 85.4, 84.6, 83.6, 82.5, 81.4, 80.2, 79, 77.8, 76.6, 75.5, 74.4, 73.4, 72.5, 71.8, 71.1, 70.6, 70.2, 70, 69.9, 70, 70.2, 70.5, 70.9, 71.4, 72, 72.7, 73.4, 74.1, 74.8, 75.5, 76.1, 76.6, 77, 77.3, 77.5, 77.6, 77.5, 77.2, 76.7, 76.1, 75.3, 74.3, 73.2, 71.9, 70.5, 68.9, 67.3, 65.5, 63.8, 61.9, 60.1, 58.3, 56.5, 54.7, 53.1, 51.5, 50.1, 48.8, 47.6, 46.6, 45.7, 45, 44.5, 44.1, 43.8, 43.7, 43.8, 43.9, 44.1, 44.5, 44.8, 45.2, 45.6, 46, 46.3, 46.6, 46.9, 47, 47, 46.8, 46.6, 46.2, 45.6, 44.9, 44, 43, 41.8, 40.5, 39.1, 37.6, 36, 34.3, 32.6, 30.9, 29.2, 27.5, 25.9, 24.4, 22.9, 21.6, 20.4, 19.3, 18.4, 17.7, 17.2, 16.8, 16.6, 16.6, 16.7, 17, 17.5, 18.1, 18.8, 19.5, 20.4, 21.3, 22.2, 23.1, 24, 24.8, 25.6, 26.3, 26.9, 27.4, 27.7, 28, 28, 28, 27.7, 27.4, 26.9, 26.3, 25.6, 24.8, 23.9, 23, 22, 21, 20.1, 19.1, 18.3, 17.5, 16.8, 16.3, 15.8, 15.6, 15.5, 15.5, 15.8, 16.2, 16.8, 17.5, 18.5, 19.6, 20.8, 22.2, 23.6, 25.2, 26.8, 28.4, 30.1, 31.8, 33.4, 35, 36.5, 38, 39.3, 40.5, 41.5, 42.4, 43.2, 43.8, 44.3, 44.6, 44.7, 44.8, 44.7, 44.5, 44.2, 43.9]
}
];
const xAxis = {
data: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "100", "101", "102", "103", "104", "105", "106", "107", "108", "109", "110", "111", "112", "113", "114", "115", "116", "117", "118", "119", "120", "121", "122", "123", "124", "125", "126", "127", "128", "129", "130", "131", "132", "133", "134", "135", "136", "137", "138", "139", "140", "141", "142", "143", "144", "145", "146", "147", "148", "149", "150", "151", "152", "153", "154", "155", "156", "157", "158", "159", "160", "161", "162", "163", "164", "165", "166", "167", "168", "169", "170", "171", "172", "173", "174", "175", "176", "177", "178", "179", "180", "181", "182", "183", "184", "185", "186", "187", "188", "189", "190", "191", "192", "193", "194", "195", "196", "197", "198", "199", "200", "201", "202", "203", "204", "205", "206", "207", "208", "209", "210", "211", "212", "213", "214", "215", "216", "217", "218", "219", "220", "221", "222", "223", "224", "225", "226", "227", "228", "229", "230", "231", "232", "233", "234", "235", "236", "237", "238", "239", "240", "241", "242", "243", "244", "245", "246", "247", "248", "249", "250", "251", "252", "253", "254", "255", "256", "257", "258", "259", "260", "261", "262", "263", "264", "265", "266", "267", "268", "269", "270", "271", "272", "273", "274", "275", "276", "277", "278", "279", "280", "281", "282", "283", "284", "285", "286", "287", "288", "289", "290", "291", "292", "293", "294", "295", "296", "297", "298", "299", "300", "301", "302", "303", "304", "305", "306", "307", "308", "309", "310", "311", "312", "313", "314", "315", "316", "317", "318", "319", "320", "321", "322", "323", "324", "325", "326", "327", "328", "329", "330", "331", "332", "333", "334", "335", "336", "337", "338", "339", "340", "341", "342", "343", "344", "345", "346", "347", "348", "349", "350", "351", "352", "353", "354", "355", "356", "357", "358", "359", "360", "361", "362", "363", "364", "365", "366", "367", "368", "369", "370", "371", "372", "373", "374", "375", "376", "377", "378", "379", "380", "381", "382", "383", "384", "385", "386", "387", "388", "389", "390", "391", "392", "393", "394", "395", "396", "397", "398", "399", "400", "401", "402", "403", "404", "405", "406", "407", "408", "409", "410", "411", "412", "413", "414", "415", "416", "417", "418", "419", "420", "421", "422", "423", "424", "425", "426", "427", "428", "429", "430", "431", "432", "433", "434", "435", "436", "437", "438", "439", "440", "441", "442", "443", "444", "445", "446", "447", "448", "449", "450", "451", "452", "453", "454", "455", "456", "457", "458", "459", "460", "461", "462", "463", "464", "465", "466", "467", "468", "469", "470", "471", "472", "473", "474", "475", "476", "477", "478", "479", "480", "481", "482", "483", "484", "485", "486", "487", "488", "489", "490", "491", "492", "493", "494", "495", "496", "497", "498", "499", "500", "501", "502", "503", "504", "505", "506", "507", "508", "509", "510", "511", "512", "513", "514", "515", "516", "517", "518", "519", "520", "521", "522", "523", "524", "525", "526", "527", "528", "529", "530", "531", "532", "533", "534", "535", "536", "537", "538", "539", "540", "541", "542", "543", "544", "545", "546", "547", "548", "549", "550", "551", "552", "553", "554", "555", "556", "557", "558", "559", "560", "561", "562", "563", "564", "565", "566", "567", "568", "569", "570", "571", "572", "573", "574", "575", "576", "577", "578", "579", "580", "581", "582", "583", "584", "585", "586", "587", "588", "589", "590", "591", "592", "593", "594", "595", "596", "597", "598", "599", "600", "601", "602", "603", "604", "605", "606", "607", "608", "609", "610", "611", "612", "613", "614", "615", "616", "617", "618", "619", "620", "621", "622", "623", "624", "625", "626", "627", "628", "629", "630", "631", "632", "633", "634", "635", "636", "637", "638", "639", "640", "641", "642", "643", "644", "645", "646", "647", "648", "649", "650", "651", "652", "653", "654", "655", "656", "657", "658", "659", "660", "661", "662", "663", "664", "665", "666", "667", "668", "669", "670", "671", "672", "673", "674", "675", "676", "677", "678", "679", "680", "681", "682", "683", "684", "685", "686", "687", "688", "689", "690", "691", "692", "693", "694", "695", "696", "697", "698", "699", "700", "701", "702", "703", "704", "705", "706", "707", "708", "709", "710", "711", "712", "713", "714", "715", "716", "717", "718", "719", "720", "721", "722", "723", "724", "725", "726", "727", "728", "729", "730", "731", "732", "733", "734", "735", "736", "737", "738", "739", "740", "741", "742", "743", "744", "745", "746", "747", "748", "749", "750", "751", "752", "753", "754", "755", "756", "757", "758", "759", "760", "761", "762", "763", "764", "765", "766", "767", "768", "769", "770", "771", "772", "773", "774", "775", "776", "777", "778", "779", "780", "781", "782", "783", "784", "785", "786", "787", "788", "789", "790", "791", "792", "793", "794", "795", "796", "797", "798", "799", "800", "801", "802", "803", "804", "805", "806", "807", "808", "809", "810", "811", "812", "813", "814", "815", "816", "817", "818", "819", "820", "821", "822", "823", "824", "825", "826", "827", "828", "829", "830", "831", "832", "833", "834", "835", "836", "837", "838", "839", "840", "841", "842", "843", "844", "845", "846", "847", "848", "849", "850", "851", "852", "853", "854", "855", "856", "857", "858", "859", "860", "861", "862", "863", "864", "865", "866", "867", "868", "869", "870", "871", "872", "873", "874", "875", "876", "877", "878", "879", "880", "881", "882", "883", "884", "885", "886", "887", "888", "889", "890", "891", "892", "893", "894", "895", "896", "897", "898", "899", "900", "901", "902", "903", "904", "905", "906", "907", "908", "909", "910", "911", "912", "913", "914", "915", "916", "917", "918", "919", "920", "921", "922", "923", "924", "925", "926", "927", "928", "929", "930", "931", "932", "933", "934", "935", "936", "937", "938", "939", "940", "941", "942", "943", "944", "945", "946", "947", "948", "949", "950", "951", "952", "953", "954", "955", "956", "957", "958", "959", "960", "961", "962", "963", "964", "965", "966", "967", "968", "969", "970", "971", "972", "973", "974", "975", "976", "977", "978", "979", "980", "981", "982", "983", "984", "985", "986", "987", "988", "989", "990", "991", "992", "993", "994", "995", "996", "997", "998", "999", "1000", "1001", "1002", "1003", "1004", "1005", "1006", "1007", "1008", "1009", "1010", "1011", "1012", "1013", "1014", "1015", "1016", "1017", "1018", "1019", "1020", "1021", "1022", "1023", "1024", "1025", "1026", "1027", "1028", "1029", "1030", "1031", "1032", "1033", "1034", "1035", "1036", "1037", "1038", "1039", "1040", "1041", "1042", "1043", "1044", "1045", "1046", "1047", "1048", "1049", "1050", "1051", "1052", "1053", "1054", "1055", "1056", "1057", "1058", "1059", "1060", "1061", "1062", "1063", "1064", "1065", "1066", "1067", "1068", "1069", "1070", "1071", "1072", "1073", "1074", "1075", "1076", "1077", "1078", "1079", "1080", "1081", "1082", "1083", "1084", "1085", "1086", "1087", "1088", "1089", "1090", "1091", "1092", "1093", "1094", "1095", "1096", "1097", "1098", "1099", "1100", "1101", "1102", "1103", "1104", "1105", "1106", "1107", "1108", "1109", "1110", "1111", "1112", "1113", "1114", "1115", "1116", "1117", "1118", "1119", "1120", "1121", "1122", "1123", "1124", "1125", "1126", "1127", "1128", "1129", "1130", "1131", "1132", "1133", "1134", "1135", "1136", "1137", "1138", "1139", "1140", "1141", "1142", "1143", "1144", "1145", "1146", "1147", "1148", "1149", "1150", "1151", "1152", "1153", "1154", "1155", "1156", "1157", "1158", "1159", "1160", "1161", "1162", "1163", "1164", "1165", "1166", "1167", "1168", "1169", "1170", "1171", "1172", "1173", "1174", "1175", "1176", "1177", "1178", "1179", "1180", "1181", "1182", "1183", "1184", "1185", "1186", "1187", "1188", "1189", "1190", "1191", "1192", "1193", "1194", "1195", "1196", "1197", "1198", "1199", "1200", "1201", "1202", "1203", "1204", "1205", "1206", "1207", "1208", "1209", "1210", "1211", "1212", "1213", "1214", "1215", "1216", "1217", "1218", "1219", "1220", "1221", "1222", "1223", "1224", "1225", "1226", "1227", "1228", "1229", "1230", "1231", "1232", "1233", "1234", "1235", "1236", "1237", "1238", "1239", "1240", "1241", "1242", "1243", "1244", "1245", "1246", "1247", "1248", "1249", "1250", "1251", "1252", "1253", "1254", "1255", "1256", "1257", "1258", "1259", "1260", "1261", "1262", "1263", "1264", "1265", "1266", "1267", "1268", "1269", "1270", "1271", "1272", "1273", "1274", "1275", "1276", "1277", "1278", "1279", "1280", "1281", "1282", "1283", "1284", "1285", "1286", "1287", "1288", "1289", "1290", "1291", "1292", "1293", "1294", "1295", "1296", "1297", "1298", "1299", "1300", "1301", "1302", "1303", "1304", "1305", "1306", "1307", "1308", "1309", "1310", "1311", "1312", "1313", "1314", "1315", "1316", "1317", "1318", "1319", "1320", "1321", "1322", "1323", "1324", "1325", "1326", "1327", "1328", "1329", "1330", "1331", "1332", "1333", "1334", "1335", "1336", "1337", "1338", "1339", "1340", "1341", "1342", "1343", "1344", "1345", "1346", "1347", "1348", "1349", "1350", "1351", "1352", "1353", "1354", "1355", "1356", "1357", "1358", "1359", "1360", "1361", "1362", "1363", "1364", "1365", "1366", "1367", "1368", "1369", "1370", "1371", "1372", "1373", "1374", "1375", "1376", "1377", "1378", "1379", "1380", "1381", "1382", "1383", "1384", "1385", "1386", "1387", "1388", "1389", "1390", "1391", "1392", "1393", "1394", "1395", "1396", "1397", "1398", "1399", "1400", "1401", "1402", "1403", "1404", "1405", "1406", "1407", "1408", "1409", "1410", "1411", "1412", "1413", "1414", "1415", "1416", "1417", "1418", "1419", "1420", "1421", "1422", "1423", "1424", "1425", "1426", "1427", "1428", "1429", "1430", "1431", "1432", "1433", "1434", "1435", "1436", "1437", "1438", "1439", "1440", "1441", "1442", "1443", "1444", "1445", "1446", "1447", "1448", "1449", "1450", "1451", "1452", "1453", "1454", "1455", "1456", "1457", "1458", "1459", "1460", "1461", "1462", "1463", "1464", "1465", "1466", "1467", "1468", "1469", "1470", "1471", "1472", "1473", "1474", "1475", "1476", "1477", "1478", "1479", "1480", "1481", "1482", "1483", "1484", "1485", "1486", "1487", "1488", "1489", "1490", "1491", "1492", "1493", "1494", "1495", "1496", "1497", "1498", "1499", "1500", "1501", "1502", "1503", "1504", "1505", "1506", "1507", "1508", "1509", "1510", "1511", "1512", "1513", "1514", "1515", "1516", "1517", "1518", "1519", "1520", "1521", "1522", "1523", "1524", "1525", "1526", "1527", "1528", "1529", "1530", "1531", "1532", "1533", "1534", "1535", "1536", "1537", "1538", "1539", "1540", "1541", "1542", "1543", "1544", "1545", "1546", "1547", "1548", "1549", "1550", "1551", "1552", "1553", "1554", "1555", "1556", "1557", "1558", "1559", "1560", "1561", "1562", "1563", "1564", "1565", "1566", "1567", "1568", "1569", "1570", "1571", "1572", "1573", "1574", "1575", "1576", "1577", "1578", "1579", "1580", "1581", "1582", "1583", "1584", "1585", "1586", "1587", "1588", "1589", "1590", "1591", "1592", "1593", "1594", "1595", "1596", "1597", "1598", "1599", "1600", "1601", "1602", "1603", "1604", "1605", "1606", "1607", "1608", "1609", "1610", "1611", "1612", "1613", "1614", "1615", "1616", "1617", "1618", "1619", "1620", "1621", "1622", "1623", "1624", "1625", "1626", "1627", "1628", "1629", "1630", "1631", "1632", "1633", "1634", "1635", "1636", "1637", "1638", "1639", "1640", "1641", "1642", "1643", "1644", "1645", "1646", "1647", "1648", "1649", "1650", "1651", "1652", "1653", "1654", "1655", "1656", "1657", "1658", "1659", "1660", "1661", "1662", "1663", "1664", "1665", "1666", "1667", "1668", "1669", "1670", "1671", "1672", "1673", "1674", "1675", "1676", "1677", "1678", "1679", "1680", "1681", "1682", "1683", "1684", "1685", "1686", "1687", "1688", "1689", "1690", "1691", "1692", "1693", "1694", "1695", "1696", "1697", "1698", "1699", "1700", "1701", "1702", "1703", "1704", "1705", "1706", "1707", "1708", "1709", "1710", "1711", "1712", "1713", "1714", "1715", "1716", "1717", "1718", "1719", "1720", "1721", "1722", "1723", "1724", "1725", "1726", "1727", "1728", "1729", "1730", "1731", "1732", "1733", "1734", "1735", "1736", "1737", "1738", "1739", "1740", "1741", "1742", "1743", "1744", "1745", "1746", "1747", "1748", "1749", "1750", "1751", "1752", "1753", "1754", "1755", "1756", "1757", "1758", "1759", "1760", "1761", "1762", "1763", "1764", "1765", "1766", "1767", "1768", "1769", "1770", "1771", "1772", "1773", "1774", "1775", "1776", "1777", "1778", "1779", "1780", "1781", "1782", "1783", "1784", "1785", "1786", "1787", "1788", "1789", "1790", "1791", "1792", "1793", "1794", "1795", "1796", "1797", "1798", "1799", "1800", "1801", "1802", "1803", "1804", "1805", "1806", "1807", "1808", "1809", "1810", "1811", "1812", "1813", "1814", "1815", "1816", "1817", "1818", "1819", "1820", "1821", "1822", "1823", "1824", "1825", "1826", "1827", "1828", "1829", "1830", "1831", "1832", "1833", "1834", "1835", "1836", "1837", "1838", "1839", "1840", "1841", "1842", "1843", "1844", "1845", "1846", "1847", "1848", "1849", "1850", "1851", "1852", "1853", "1854", "1855", "1856", "1857", "1858", "1859", "1860", "1861", "1862", "1863", "1864", "1865", "1866", "1867", "1868", "1869", "1870", "1871", "1872", "1873", "1874", "1875", "1876", "1877", "1878", "1879", "1880", "1881", "1882", "1883", "1884", "1885", "1886", "1887", "1888", "1889", "1890", "1891", "1892", "1893", "1894", "1895", "1896", "1897", "1898", "1899", "1900", "1901", "1902", "1903", "1904", "1905", "1906", "1907", "1908", "1909", "1910", "1911", "1912", "1913", "1914", "1915", "1916", "1917", "1918", "1919", "1920", "1921", "1922", "1923", "1924", "1925", "1926", "1927", "1928", "1929", "1930", "1931", "1932", "1933", "1934", "1935", "1936", "1937", "1938", "1939", "1940", "1941", "1942", "1943", "1944", "1945", "1946", "1947", "1948", "1949", "1950", "1951", "1952", "1953", "1954", "1955", "1956", "1957", "1958", "1959", "1960", "1961", "1962", "1963", "1964", "1965", "1966", "1967", "1968", "1969", "1970", "1971", "1972", "1973", "1974", "1975", "1976", "1977", "1978", "1979", "1980", "1981", "1982", "1983", "1984", "1985", "1986", "1987", "1988", "1989", "1990", "1991", "1992", "1993", "1994", "1995", "1996", "1997", "1998", "1999"],
hideTicks: true
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
curve="linear"
legend="none"
zoom="both"
label="Sensor trace"
/>
</template><script lang="ts">
const series = [
{
label: "Signal",
color: "primary",
data: [50, 51.9, 53.8, 55.6, 57.3, 59, 60.5, 62, 63.2, 64.4, 65.3, 66.1, 66.8, 67.3, 67.6, 67.7, 67.7, 67.6, 67.4, 67, 66.6, 66.2, 65.7, 65.2, 64.7, 64.2, 63.8, 63.5, 63.3, 63.2, 63.2, 63.3, 63.6, 64, 64.6, 65.4, 66.2, 67.2, 68.4, 69.6, 70.9, 72.3, 73.8, 75.3, 76.8, 78.2, 79.7, 81, 82.3, 83.5, 84.5, 85.4, 86.2, 86.8, 87.2, 87.4, 87.5, 87.4, 87, 86.6, 86, 85.2, 84.3, 83.3, 82.2, 81.1, 79.9, 78.7, 77.5, 76.3, 75.2, 74.1, 73.1, 72.3, 71.5, 70.9, 70.5, 70.1, 70, 69.9, 70, 70.2, 70.6, 71.1, 71.6, 72.2, 72.9, 73.6, 74.3, 75, 75.6, 76.2, 76.7, 77.1, 77.4, 77.6, 77.6, 77.4, 77.1, 76.5, 75.9, 75, 74, 72.8, 71.5, 70, 68.4, 66.8, 65, 63.2, 61.4, 59.6, 57.7, 56, 54.3, 52.6, 51.1, 49.7, 48.4, 47.3, 46.3, 45.5, 44.8, 44.3, 44, 43.8, 43.7, 43.8, 44, 44.2, 44.6, 44.9, 45.3, 45.7, 46.1, 46.4, 46.7, 46.9, 47, 46.9, 46.8, 46.5, 46, 45.4, 44.6, 43.7, 42.6, 41.4, 40.1, 38.7, 37.1, 35.5, 33.8, 32.1, 30.4, 28.7, 27, 25.4, 23.9, 22.5, 21.2, 20, 19, 18.2, 17.5, 17, 16.7, 16.6, 16.6, 16.8, 17.2, 17.6, 18.3, 19, 19.8, 20.6, 21.5, 22.4, 23.4, 24.2, 25.1, 25.8, 26.5, 27.1, 27.5, 27.8, 28, 28, 27.9, 27.7, 27.3, 26.7, 26.1, 25.4, 24.5, 23.6, 22.7, 21.7, 20.8, 19.8, 18.9, 18, 17.3, 16.6, 16.1, 15.7, 15.5, 15.5, 15.6, 15.9, 16.3, 17, 17.8, 18.8, 19.9, 21.2, 22.6, 24.1, 25.6, 27.3, 28.9, 30.6, 32.3, 33.9, 35.5, 37, 38.4, 39.6, 40.8, 41.8, 42.7, 43.4, 44, 44.4, 44.6, 44.8, 44.8, 44.6, 44.4, 44.1, 43.8, 43.4, 43, 42.6, 42.2, 41.8, 41.6, 41.4, 41.4, 41.5, 41.7, 42, 42.6, 43.3, 44.1, 45.1, 46.3, 47.6, 49, 50.6, 52.2, 54, 55.8, 57.6, 59.5, 61.3, 63.1, 64.9, 66.6, 68.2, 69.6, 71, 72.2, 73.2, 74, 74.7, 75.3, 75.6, 75.8, 75.8, 75.7, 75.4, 75, 74.6, 74, 73.4, 72.7, 72.1, 71.4, 70.8, 70.3, 69.8, 69.4, 69.1, 68.9, 68.9, 69, 69.3, 69.7, 70.2, 70.9, 71.7, 72.7, 73.7, 74.8, 76, 77.3, 78.5, 79.8, 81, 82.2, 83.4, 84.4, 85.3, 86.1, 86.8, 87.3, 87.6, 87.8, 87.8, 87.6, 87.2, 86.6, 85.9, 85, 84, 82.9, 81.7, 80.3, 78.9, 77.5, 76.1, 74.7, 73.3, 71.9, 70.7, 69.5, 68.4, 67.5, 66.7, 66, 65.5, 65.1, 64.9, 64.8, 64.9, 65, 65.3, 65.7, 66.1, 66.6, 67.2, 67.7, 68.2, 68.7, 69.1, 69.5, 69.7, 69.9, 69.9, 69.7, 69.4, 68.9, 68.3, 67.5, 66.5, 65.3, 64.1, 62.6, 61.1, 59.4, 57.6, 55.8, 54, 52.1, 50.2, 48.3, 46.5, 44.8, 43.1, 41.6, 40.2, 38.9, 37.8, 36.8, 36, 35.4, 34.9, 34.6, 34.5, 34.5, 34.6, 34.8, 35.2, 35.5, 36, 36.5, 36.9, 37.4, 37.8, 38.2, 38.4, 38.6, 38.7, 38.6, 38.4, 38, 37.5, 36.9, 36.1, 35.2, 34.1, 32.9, 31.6, 30.2, 28.7, 27.2, 25.7, 24.2, 22.6, 21.2, 19.8, 18.4, 17.2, 16.1, 15.2, 14.4, 13.8, 13.4, 13.1, 13, 13.1, 13.4, 13.8, 14.4, 15.1, 16, 16.9, 18, 19.1, 20.2, 21.4, 22.5, 23.6, 24.7, 25.6, 26.5, 27.3, 28, 28.5, 28.9, 29.2, 29.3, 29.2, 29.1, 28.7, 28.3, 27.8, 27.2, 26.5, 25.8, 25, 24.3, 23.5, 22.9, 22.2, 21.7, 21.3, 21, 20.8, 20.8, 20.9, 21.2, 21.7, 22.4, 23.3, 24.3, 25.4, 26.8, 28.2, 29.8, 31.4, 33.1, 34.9, 36.7, 38.5, 40.3, 42.1, 43.8, 45.4, 46.9, 48.2, 49.5, 50.6, 51.5, 52.3, 52.9, 53.4, 53.7, 53.9, 53.9, 53.8, 53.6, 53.4, 53, 52.7, 52.3, 51.9, 51.5, 51.2, 51, 50.8, 50.7, 50.8, 51, 51.4, 51.9, 52.5, 53.3, 54.3, 55.4, 56.7, 58.1, 59.6, 61.1, 62.8, 64.5, 66.3, 68, 69.7, 71.4, 73.1, 74.6, 76.1, 77.4, 78.6, 79.6, 80.5, 81.1, 81.7, 82, 82.2, 82.1, 82, 81.7, 81.2, 80.6, 79.9, 79.2, 78.4, 77.5, 76.7, 75.8, 75, 74.2, 73.5, 72.9, 72.5, 72.1, 71.9, 71.8, 71.8, 72, 72.3, 72.8, 73.4, 74.1, 74.9, 75.8, 76.8, 77.8, 78.8, 79.9, 80.9, 81.8, 82.7, 83.5, 84.2, 84.8, 85.2, 85.4, 85.5, 85.4, 85.2, 84.7, 84.1, 83.3, 82.3, 81.2, 80, 78.6, 77.2, 75.6, 74, 72.4, 70.8, 69.2, 67.6, 66.1, 64.6, 63.3, 62.1, 61, 60, 59.2, 58.5, 58, 57.6, 57.4, 57.4, 57.4, 57.6, 57.8, 58.1, 58.5, 58.9, 59.4, 59.8, 60.2, 60.5, 60.8, 60.9, 60.9, 60.9, 60.6, 60.2, 59.7, 59, 58.1, 57.1, 55.9, 54.6, 53.1, 51.5, 49.8, 48.1, 46.2, 44.4, 42.5, 40.7, 38.8, 37.1, 35.4, 33.8, 32.3, 31, 29.8, 28.7, 27.9, 27.2, 26.7, 26.3, 26.1, 26.1, 26.2, 26.4, 26.8, 27.2, 27.8, 28.3, 28.9, 29.6, 30.2, 30.7, 31.2, 31.7, 32, 32.2, 32.3, 32.2, 32.1, 31.7, 31.2, 30.6, 29.9, 29, 28, 26.9, 25.7, 24.4, 23.1, 21.8, 20.5, 19.2, 17.9, 16.7, 15.7, 14.7, 13.8, 13.1, 12.6, 12.2, 12, 12, 12.2, 12.6, 13.1, 13.8, 14.6, 15.6, 16.7, 17.9, 19.2, 20.5, 21.9, 23.2, 24.6, 25.9, 27.2, 28.4, 29.5, 30.5, 31.4, 32.1, 32.7, 33.2, 33.5, 33.6, 33.6, 33.5, 33.3, 33, 32.5, 32, 31.5, 30.9, 30.3, 29.8, 29.3, 28.8, 28.5, 28.2, 28.1, 28.1, 28.2, 28.5, 29, 29.6, 30.5, 31.5, 32.6, 33.9, 35.3, 36.9, 38.6, 40.3, 42.1, 44, 45.9, 47.8, 49.6, 51.4, 53.1, 54.8, 56.3, 57.7, 58.9, 60, 61, 61.7, 62.4, 62.8, 63.1, 63.2, 63.2, 63.1, 62.9, 62.6, 62.2, 61.8, 61.3, 60.9, 60.5, 60.1, 59.8, 59.5, 59.4, 59.4, 59.5, 59.8, 60.2, 60.8, 61.5, 62.3, 63.3, 64.5, 65.7, 67.1, 68.5, 70, 71.6, 73.2, 74.8, 76.3, 77.9, 79.3, 80.7, 81.9, 83, 84, 84.8, 85.5, 85.9, 86.2, 86.3, 86.3, 86, 85.6, 85.1, 84.4, 83.6, 82.7, 81.7, 80.6, 79.6, 78.5, 77.4, 76.3, 75.4, 74.4, 73.6, 72.9, 72.3, 71.9, 71.6, 71.4, 71.4, 71.5, 71.7, 72.1, 72.6, 73.2, 73.9, 74.6, 75.4, 76.2, 77, 77.8, 78.5, 79.2, 79.7, 80.2, 80.5, 80.7, 80.8, 80.6, 80.3, 79.8, 79.2, 78.4, 77.4, 76.2, 74.9, 73.5, 71.9, 70.3, 68.6, 66.8, 65.1, 63.3, 61.5, 59.8, 58.2, 56.6, 55.1, 53.8, 52.6, 51.5, 50.6, 49.9, 49.3, 48.9, 48.6, 48.5, 48.4, 48.5, 48.7, 49, 49.4, 49.7, 50.1, 50.5, 50.9, 51.2, 51.4, 51.5, 51.6, 51.5, 51.2, 50.8, 50.3, 49.6, 48.7, 47.7, 46.6, 45.3, 43.8, 42.3, 40.7, 39, 37.2, 35.5, 33.7, 31.9, 30.2, 28.5, 27, 25.5, 24.2, 23, 21.9, 21, 20.3, 19.8, 19.4, 19.3, 19.2, 19.4, 19.7, 20.1, 20.7, 21.3, 22, 22.8, 23.6, 24.4, 25.2, 25.9, 26.6, 27.2, 27.8, 28.2, 28.5, 28.6, 28.6, 28.5, 28.2, 27.8, 27.3, 26.6, 25.8, 24.9, 24, 22.9, 21.9, 20.8, 19.7, 18.6, 17.6, 16.7, 15.8, 15.1, 14.5, 14.1, 13.8, 13.7, 13.7, 14, 14.4, 15, 15.7, 16.7, 17.8, 19, 20.3, 21.7, 23.2, 24.8, 26.3, 27.9, 29.5, 31, 32.5, 33.9, 35.2, 36.3, 37.4, 38.3, 39, 39.6, 40.1, 40.4, 40.6, 40.6, 40.5, 40.3, 40, 39.6, 39.2, 38.8, 38.3, 37.9, 37.5, 37.2, 36.9, 36.8, 36.7, 36.8, 37.1, 37.5, 38.1, 38.8, 39.7, 40.7, 41.9, 43.3, 44.8, 46.4, 48.1, 49.9, 51.7, 53.6, 55.5, 57.3, 59.2, 60.9, 62.6, 64.2, 65.7, 67, 68.2, 69.3, 70.1, 70.8, 71.4, 71.7, 71.9, 71.9, 71.8, 71.6, 71.3, 70.9, 70.4, 69.8, 69.2, 68.7, 68.1, 67.6, 67.2, 66.8, 66.5, 66.4, 66.4, 66.5, 66.7, 67.1, 67.7, 68.4, 69.2, 70.2, 71.2, 72.4, 73.7, 75, 76.4, 77.7, 79.1, 80.5, 81.8, 83, 84.1, 85.1, 86, 86.7, 87.3, 87.7, 87.9, 88, 87.8, 87.5, 87, 86.4, 85.6, 84.6, 83.6, 82.4, 81.2, 79.9, 78.6, 77.3, 76, 74.7, 73.5, 72.3, 71.3, 70.4, 69.6, 68.9, 68.4, 68, 67.8, 67.7, 67.8, 67.9, 68.2, 68.6, 69.1, 69.7, 70.3, 70.9, 71.5, 72.1, 72.6, 73.1, 73.5, 73.8, 73.9, 73.9, 73.8, 73.5, 73, 72.3, 71.5, 70.5, 69.4, 68.1, 66.7, 65.1, 63.4, 61.7, 59.9, 58, 56.2, 54.3, 52.5, 50.7, 49, 47.4, 45.9, 44.5, 43.3, 42.2, 41.3, 40.5, 39.9, 39.5, 39.2, 39.1, 39.1, 39.2, 39.4, 39.7, 40.1, 40.5, 40.9, 41.4, 41.7, 42.1, 42.4, 42.6, 42.6, 42.6, 42.4, 42.1, 41.6, 41, 40.3, 39.3, 38.3, 37.1, 35.8, 34.4, 32.9, 31.3, 29.7, 28.1, 26.4, 24.8, 23.3, 21.8, 20.4, 19.1, 18, 17, 16.1, 15.4, 14.9, 14.6, 14.5, 14.5, 14.7, 15.1, 15.6, 16.3, 17, 17.9, 18.8, 19.8, 20.9, 21.9, 22.9, 23.9, 24.8, 25.6, 26.4, 27, 27.5, 27.9, 28.1, 28.2, 28.2, 28, 27.7, 27.2, 26.6, 26, 25.2, 24.4, 23.6, 22.7, 21.9, 21, 20.3, 19.6, 19, 18.5, 18.1, 17.9, 17.8, 17.9, 18.2, 18.7, 19.3, 20.1, 21.1, 22.3, 23.5, 25, 26.5, 28.1, 29.8, 31.5, 33.2, 35, 36.7, 38.4, 40, 41.5, 42.9, 44.2, 45.4, 46.4, 47.2, 47.9, 48.5, 48.9, 49.1, 49.2, 49.2, 49.1, 48.9, 48.6, 48.2, 47.8, 47.4, 47.1, 46.7, 46.4, 46.2, 46.1, 46.1, 46.2, 46.5, 46.9, 47.5, 48.2, 49.1, 50.2, 51.4, 52.7, 54.2, 55.8, 57.4, 59.2, 60.9, 62.7, 64.5, 66.3, 68.1, 69.8, 71.4, 72.8, 74.2, 75.4, 76.5, 77.4, 78.1, 78.6, 79, 79.2, 79.2, 79.1, 78.8, 78.4, 77.9, 77.3, 76.7, 75.9, 75.2, 74.4, 73.7, 73, 72.4, 71.8, 71.4, 71, 70.8, 70.7, 70.8, 71, 71.4, 71.8, 72.5, 73.2, 74.1, 75, 76.1, 77.2, 78.3, 79.5, 80.6, 81.7, 82.8, 83.7, 84.6, 85.4, 86, 86.5, 86.8, 87, 86.9, 86.7, 86.3, 85.8, 85, 84.1, 83.1, 81.9, 80.6, 79.2, 77.8, 76.3, 74.7, 73.2, 71.7, 70.2, 68.8, 67.5, 66.3, 65.1, 64.2, 63.3, 62.6, 62.1, 61.7, 61.4, 61.3, 61.4, 61.5, 61.8, 62.1, 62.5, 62.9, 63.4, 63.9, 64.3, 64.7, 65.1, 65.3, 65.5, 65.5, 65.4, 65.2, 64.7, 64.2, 63.4, 62.5, 61.4, 60.2, 58.8, 57.3, 55.7, 54, 52.2, 50.4, 48.5, 46.6, 44.7, 42.9, 41.1, 39.4, 37.8, 36.4, 35, 33.8, 32.8, 31.9, 31.2, 30.7, 30.4, 30.2, 30.1, 30.2, 30.4, 30.7, 31.1, 31.6, 32.1, 32.7, 33.2, 33.7, 34.2, 34.6, 34.9, 35.1, 35.2, 35.1, 35, 34.6, 34.2, 33.5, 32.8, 31.9, 30.8, 29.7, 28.4, 27.1, 25.7, 24.3, 22.9, 21.5, 20.1, 18.7, 17.5, 16.3, 15.2, 14.3, 13.6, 12.9, 12.5, 12.3, 12.2, 12.3, 12.6, 13, 13.7, 14.4, 15.3, 16.3, 17.4, 18.6, 19.8, 21.1, 22.4, 23.6, 24.8, 26, 27, 28, 28.9, 29.6, 30.2, 30.6, 30.9, 31.1, 31.1, 31, 30.7, 30.4, 29.9, 29.4, 28.8, 28.1, 27.5, 26.8, 26.2, 25.6, 25.1, 24.7, 24.4, 24.2, 24.2, 24.3, 24.6, 25.1, 25.7, 26.5, 27.5, 28.7, 30, 31.4, 33, 34.6, 36.3, 38.2, 40, 41.8, 43.7, 45.5, 47.3, 49, 50.5, 52, 53.4, 54.6, 55.6, 56.5, 57.2, 57.8, 58.2, 58.5, 58.6, 58.6, 58.5, 58.2, 57.9, 57.6, 57.2, 56.8, 56.3, 56, 55.7, 55.4, 55.3, 55.2, 55.3, 55.5, 55.9, 56.4, 57.1, 57.9, 58.9, 60, 61.3, 62.6, 64.1, 65.6, 67.2, 68.9, 70.6, 72.2, 73.9, 75.5, 77, 78.4, 79.7, 80.9, 81.9, 82.8, 83.5, 84, 84.4, 84.5, 84.5, 84.3, 84, 83.5, 82.9, 82.2, 81.4, 80.5, 79.5, 78.6, 77.6, 76.6, 75.7, 74.9, 74.1, 73.4, 72.9, 72.4, 72.2, 72, 72, 72.1, 72.4, 72.8, 73.3, 74, 74.7, 75.5, 76.4, 77.3, 78.2, 79.1, 80, 80.8, 81.5, 82.2, 82.7, 83.1, 83.4, 83.4, 83.3, 83.1, 82.6, 82, 81.2, 80.3, 79.2, 77.9, 76.5, 75, 73.4, 71.8, 70.1, 68.4, 66.7, 65, 63.3, 61.8, 60.3, 58.9, 57.7, 56.6, 55.6, 54.8, 54.1, 53.6, 53.3, 53.1, 53, 53.1, 53.2, 53.5, 53.8, 54.2, 54.6, 55, 55.3, 55.7, 56, 56.2, 56.3, 56.2, 56.1, 55.8, 55.3, 54.7, 53.9, 53, 51.9, 50.7, 49.3, 47.8, 46.2, 44.5, 42.8, 41, 39.1, 37.3, 35.5, 33.7, 32, 30.4, 28.9, 27.6, 26.3, 25.3, 24.4, 23.6, 23.1, 22.7, 22.5, 22.4, 22.5, 22.8, 23.1, 23.6, 24.2, 24.8, 25.5, 26.2, 26.9, 27.6, 28.2, 28.8, 29.3, 29.7, 29.9, 30.1, 30.1, 29.9, 29.6, 29.2, 28.6, 27.9, 27.1, 26.2, 25.1, 24, 22.9, 21.7, 20.5, 19.3, 18.1, 17, 16, 15.1, 14.3, 13.6, 13.1, 12.7, 12.5, 12.5, 12.7, 13.1, 13.6, 14.3, 15.2, 16.2, 17.3, 18.6, 19.9, 21.4, 22.8, 24.3, 25.8, 27.2, 28.7, 30, 31.3, 32.4, 33.5, 34.4, 35.2, 35.8, 36.3, 36.6, 36.8, 36.9, 36.8, 36.6, 36.3, 35.9, 35.5, 35, 34.5, 34, 33.5, 33.1, 32.7, 32.5, 32.3, 32.3, 32.4, 32.6, 33.1, 33.7, 34.4, 35.3, 36.4, 37.7, 39, 40.6, 42.2, 43.9, 45.7, 47.6, 49.4, 51.3, 53.2, 55, 56.8, 58.5, 60.1, 61.6, 62.9, 64.1, 65.1, 65.9, 66.6, 67.1, 67.5, 67.7, 67.7, 67.7, 67.4, 67.1, 66.8, 66.3, 65.8, 65.3, 64.8, 64.3, 63.9, 63.6, 63.3, 63.2, 63.2, 63.3, 63.5, 63.9, 64.4, 65.1, 66, 66.9, 68, 69.2, 70.5, 71.9, 73.4, 74.8, 76.3, 77.8, 79.2, 80.6, 81.9, 83.1, 84.2, 85.2, 86, 86.6, 87.1, 87.4, 87.5, 87.4, 87.2, 86.7, 86.2, 85.4, 84.6, 83.6, 82.5, 81.4, 80.2, 79, 77.8, 76.6, 75.5, 74.4, 73.4, 72.5, 71.8, 71.1, 70.6, 70.2, 70, 69.9, 70, 70.2, 70.5, 70.9, 71.4, 72, 72.7, 73.4, 74.1, 74.8, 75.5, 76.1, 76.6, 77, 77.3, 77.5, 77.6, 77.5, 77.2, 76.7, 76.1, 75.3, 74.3, 73.2, 71.9, 70.5, 68.9, 67.3, 65.5, 63.8, 61.9, 60.1, 58.3, 56.5, 54.7, 53.1, 51.5, 50.1, 48.8, 47.6, 46.6, 45.7, 45, 44.5, 44.1, 43.8, 43.7, 43.8, 43.9, 44.1, 44.5, 44.8, 45.2, 45.6, 46, 46.3, 46.6, 46.9, 47, 47, 46.8, 46.6, 46.2, 45.6, 44.9, 44, 43, 41.8, 40.5, 39.1, 37.6, 36, 34.3, 32.6, 30.9, 29.2, 27.5, 25.9, 24.4, 22.9, 21.6, 20.4, 19.3, 18.4, 17.7, 17.2, 16.8, 16.6, 16.6, 16.7, 17, 17.5, 18.1, 18.8, 19.5, 20.4, 21.3, 22.2, 23.1, 24, 24.8, 25.6, 26.3, 26.9, 27.4, 27.7, 28, 28, 28, 27.7, 27.4, 26.9, 26.3, 25.6, 24.8, 23.9, 23, 22, 21, 20.1, 19.1, 18.3, 17.5, 16.8, 16.3, 15.8, 15.6, 15.5, 15.5, 15.8, 16.2, 16.8, 17.5, 18.5, 19.6, 20.8, 22.2, 23.6, 25.2, 26.8, 28.4, 30.1, 31.8, 33.4, 35, 36.5, 38, 39.3, 40.5, 41.5, 42.4, 43.2, 43.8, 44.3, 44.6, 44.7, 44.8, 44.7, 44.5, 44.2, 43.9]
}
];
const xAxis = {
data: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "100", "101", "102", "103", "104", "105", "106", "107", "108", "109", "110", "111", "112", "113", "114", "115", "116", "117", "118", "119", "120", "121", "122", "123", "124", "125", "126", "127", "128", "129", "130", "131", "132", "133", "134", "135", "136", "137", "138", "139", "140", "141", "142", "143", "144", "145", "146", "147", "148", "149", "150", "151", "152", "153", "154", "155", "156", "157", "158", "159", "160", "161", "162", "163", "164", "165", "166", "167", "168", "169", "170", "171", "172", "173", "174", "175", "176", "177", "178", "179", "180", "181", "182", "183", "184", "185", "186", "187", "188", "189", "190", "191", "192", "193", "194", "195", "196", "197", "198", "199", "200", "201", "202", "203", "204", "205", "206", "207", "208", "209", "210", "211", "212", "213", "214", "215", "216", "217", "218", "219", "220", "221", "222", "223", "224", "225", "226", "227", "228", "229", "230", "231", "232", "233", "234", "235", "236", "237", "238", "239", "240", "241", "242", "243", "244", "245", "246", "247", "248", "249", "250", "251", "252", "253", "254", "255", "256", "257", "258", "259", "260", "261", "262", "263", "264", "265", "266", "267", "268", "269", "270", "271", "272", "273", "274", "275", "276", "277", "278", "279", "280", "281", "282", "283", "284", "285", "286", "287", "288", "289", "290", "291", "292", "293", "294", "295", "296", "297", "298", "299", "300", "301", "302", "303", "304", "305", "306", "307", "308", "309", "310", "311", "312", "313", "314", "315", "316", "317", "318", "319", "320", "321", "322", "323", "324", "325", "326", "327", "328", "329", "330", "331", "332", "333", "334", "335", "336", "337", "338", "339", "340", "341", "342", "343", "344", "345", "346", "347", "348", "349", "350", "351", "352", "353", "354", "355", "356", "357", "358", "359", "360", "361", "362", "363", "364", "365", "366", "367", "368", "369", "370", "371", "372", "373", "374", "375", "376", "377", "378", "379", "380", "381", "382", "383", "384", "385", "386", "387", "388", "389", "390", "391", "392", "393", "394", "395", "396", "397", "398", "399", "400", "401", "402", "403", "404", "405", "406", "407", "408", "409", "410", "411", "412", "413", "414", "415", "416", "417", "418", "419", "420", "421", "422", "423", "424", "425", "426", "427", "428", "429", "430", "431", "432", "433", "434", "435", "436", "437", "438", "439", "440", "441", "442", "443", "444", "445", "446", "447", "448", "449", "450", "451", "452", "453", "454", "455", "456", "457", "458", "459", "460", "461", "462", "463", "464", "465", "466", "467", "468", "469", "470", "471", "472", "473", "474", "475", "476", "477", "478", "479", "480", "481", "482", "483", "484", "485", "486", "487", "488", "489", "490", "491", "492", "493", "494", "495", "496", "497", "498", "499", "500", "501", "502", "503", "504", "505", "506", "507", "508", "509", "510", "511", "512", "513", "514", "515", "516", "517", "518", "519", "520", "521", "522", "523", "524", "525", "526", "527", "528", "529", "530", "531", "532", "533", "534", "535", "536", "537", "538", "539", "540", "541", "542", "543", "544", "545", "546", "547", "548", "549", "550", "551", "552", "553", "554", "555", "556", "557", "558", "559", "560", "561", "562", "563", "564", "565", "566", "567", "568", "569", "570", "571", "572", "573", "574", "575", "576", "577", "578", "579", "580", "581", "582", "583", "584", "585", "586", "587", "588", "589", "590", "591", "592", "593", "594", "595", "596", "597", "598", "599", "600", "601", "602", "603", "604", "605", "606", "607", "608", "609", "610", "611", "612", "613", "614", "615", "616", "617", "618", "619", "620", "621", "622", "623", "624", "625", "626", "627", "628", "629", "630", "631", "632", "633", "634", "635", "636", "637", "638", "639", "640", "641", "642", "643", "644", "645", "646", "647", "648", "649", "650", "651", "652", "653", "654", "655", "656", "657", "658", "659", "660", "661", "662", "663", "664", "665", "666", "667", "668", "669", "670", "671", "672", "673", "674", "675", "676", "677", "678", "679", "680", "681", "682", "683", "684", "685", "686", "687", "688", "689", "690", "691", "692", "693", "694", "695", "696", "697", "698", "699", "700", "701", "702", "703", "704", "705", "706", "707", "708", "709", "710", "711", "712", "713", "714", "715", "716", "717", "718", "719", "720", "721", "722", "723", "724", "725", "726", "727", "728", "729", "730", "731", "732", "733", "734", "735", "736", "737", "738", "739", "740", "741", "742", "743", "744", "745", "746", "747", "748", "749", "750", "751", "752", "753", "754", "755", "756", "757", "758", "759", "760", "761", "762", "763", "764", "765", "766", "767", "768", "769", "770", "771", "772", "773", "774", "775", "776", "777", "778", "779", "780", "781", "782", "783", "784", "785", "786", "787", "788", "789", "790", "791", "792", "793", "794", "795", "796", "797", "798", "799", "800", "801", "802", "803", "804", "805", "806", "807", "808", "809", "810", "811", "812", "813", "814", "815", "816", "817", "818", "819", "820", "821", "822", "823", "824", "825", "826", "827", "828", "829", "830", "831", "832", "833", "834", "835", "836", "837", "838", "839", "840", "841", "842", "843", "844", "845", "846", "847", "848", "849", "850", "851", "852", "853", "854", "855", "856", "857", "858", "859", "860", "861", "862", "863", "864", "865", "866", "867", "868", "869", "870", "871", "872", "873", "874", "875", "876", "877", "878", "879", "880", "881", "882", "883", "884", "885", "886", "887", "888", "889", "890", "891", "892", "893", "894", "895", "896", "897", "898", "899", "900", "901", "902", "903", "904", "905", "906", "907", "908", "909", "910", "911", "912", "913", "914", "915", "916", "917", "918", "919", "920", "921", "922", "923", "924", "925", "926", "927", "928", "929", "930", "931", "932", "933", "934", "935", "936", "937", "938", "939", "940", "941", "942", "943", "944", "945", "946", "947", "948", "949", "950", "951", "952", "953", "954", "955", "956", "957", "958", "959", "960", "961", "962", "963", "964", "965", "966", "967", "968", "969", "970", "971", "972", "973", "974", "975", "976", "977", "978", "979", "980", "981", "982", "983", "984", "985", "986", "987", "988", "989", "990", "991", "992", "993", "994", "995", "996", "997", "998", "999", "1000", "1001", "1002", "1003", "1004", "1005", "1006", "1007", "1008", "1009", "1010", "1011", "1012", "1013", "1014", "1015", "1016", "1017", "1018", "1019", "1020", "1021", "1022", "1023", "1024", "1025", "1026", "1027", "1028", "1029", "1030", "1031", "1032", "1033", "1034", "1035", "1036", "1037", "1038", "1039", "1040", "1041", "1042", "1043", "1044", "1045", "1046", "1047", "1048", "1049", "1050", "1051", "1052", "1053", "1054", "1055", "1056", "1057", "1058", "1059", "1060", "1061", "1062", "1063", "1064", "1065", "1066", "1067", "1068", "1069", "1070", "1071", "1072", "1073", "1074", "1075", "1076", "1077", "1078", "1079", "1080", "1081", "1082", "1083", "1084", "1085", "1086", "1087", "1088", "1089", "1090", "1091", "1092", "1093", "1094", "1095", "1096", "1097", "1098", "1099", "1100", "1101", "1102", "1103", "1104", "1105", "1106", "1107", "1108", "1109", "1110", "1111", "1112", "1113", "1114", "1115", "1116", "1117", "1118", "1119", "1120", "1121", "1122", "1123", "1124", "1125", "1126", "1127", "1128", "1129", "1130", "1131", "1132", "1133", "1134", "1135", "1136", "1137", "1138", "1139", "1140", "1141", "1142", "1143", "1144", "1145", "1146", "1147", "1148", "1149", "1150", "1151", "1152", "1153", "1154", "1155", "1156", "1157", "1158", "1159", "1160", "1161", "1162", "1163", "1164", "1165", "1166", "1167", "1168", "1169", "1170", "1171", "1172", "1173", "1174", "1175", "1176", "1177", "1178", "1179", "1180", "1181", "1182", "1183", "1184", "1185", "1186", "1187", "1188", "1189", "1190", "1191", "1192", "1193", "1194", "1195", "1196", "1197", "1198", "1199", "1200", "1201", "1202", "1203", "1204", "1205", "1206", "1207", "1208", "1209", "1210", "1211", "1212", "1213", "1214", "1215", "1216", "1217", "1218", "1219", "1220", "1221", "1222", "1223", "1224", "1225", "1226", "1227", "1228", "1229", "1230", "1231", "1232", "1233", "1234", "1235", "1236", "1237", "1238", "1239", "1240", "1241", "1242", "1243", "1244", "1245", "1246", "1247", "1248", "1249", "1250", "1251", "1252", "1253", "1254", "1255", "1256", "1257", "1258", "1259", "1260", "1261", "1262", "1263", "1264", "1265", "1266", "1267", "1268", "1269", "1270", "1271", "1272", "1273", "1274", "1275", "1276", "1277", "1278", "1279", "1280", "1281", "1282", "1283", "1284", "1285", "1286", "1287", "1288", "1289", "1290", "1291", "1292", "1293", "1294", "1295", "1296", "1297", "1298", "1299", "1300", "1301", "1302", "1303", "1304", "1305", "1306", "1307", "1308", "1309", "1310", "1311", "1312", "1313", "1314", "1315", "1316", "1317", "1318", "1319", "1320", "1321", "1322", "1323", "1324", "1325", "1326", "1327", "1328", "1329", "1330", "1331", "1332", "1333", "1334", "1335", "1336", "1337", "1338", "1339", "1340", "1341", "1342", "1343", "1344", "1345", "1346", "1347", "1348", "1349", "1350", "1351", "1352", "1353", "1354", "1355", "1356", "1357", "1358", "1359", "1360", "1361", "1362", "1363", "1364", "1365", "1366", "1367", "1368", "1369", "1370", "1371", "1372", "1373", "1374", "1375", "1376", "1377", "1378", "1379", "1380", "1381", "1382", "1383", "1384", "1385", "1386", "1387", "1388", "1389", "1390", "1391", "1392", "1393", "1394", "1395", "1396", "1397", "1398", "1399", "1400", "1401", "1402", "1403", "1404", "1405", "1406", "1407", "1408", "1409", "1410", "1411", "1412", "1413", "1414", "1415", "1416", "1417", "1418", "1419", "1420", "1421", "1422", "1423", "1424", "1425", "1426", "1427", "1428", "1429", "1430", "1431", "1432", "1433", "1434", "1435", "1436", "1437", "1438", "1439", "1440", "1441", "1442", "1443", "1444", "1445", "1446", "1447", "1448", "1449", "1450", "1451", "1452", "1453", "1454", "1455", "1456", "1457", "1458", "1459", "1460", "1461", "1462", "1463", "1464", "1465", "1466", "1467", "1468", "1469", "1470", "1471", "1472", "1473", "1474", "1475", "1476", "1477", "1478", "1479", "1480", "1481", "1482", "1483", "1484", "1485", "1486", "1487", "1488", "1489", "1490", "1491", "1492", "1493", "1494", "1495", "1496", "1497", "1498", "1499", "1500", "1501", "1502", "1503", "1504", "1505", "1506", "1507", "1508", "1509", "1510", "1511", "1512", "1513", "1514", "1515", "1516", "1517", "1518", "1519", "1520", "1521", "1522", "1523", "1524", "1525", "1526", "1527", "1528", "1529", "1530", "1531", "1532", "1533", "1534", "1535", "1536", "1537", "1538", "1539", "1540", "1541", "1542", "1543", "1544", "1545", "1546", "1547", "1548", "1549", "1550", "1551", "1552", "1553", "1554", "1555", "1556", "1557", "1558", "1559", "1560", "1561", "1562", "1563", "1564", "1565", "1566", "1567", "1568", "1569", "1570", "1571", "1572", "1573", "1574", "1575", "1576", "1577", "1578", "1579", "1580", "1581", "1582", "1583", "1584", "1585", "1586", "1587", "1588", "1589", "1590", "1591", "1592", "1593", "1594", "1595", "1596", "1597", "1598", "1599", "1600", "1601", "1602", "1603", "1604", "1605", "1606", "1607", "1608", "1609", "1610", "1611", "1612", "1613", "1614", "1615", "1616", "1617", "1618", "1619", "1620", "1621", "1622", "1623", "1624", "1625", "1626", "1627", "1628", "1629", "1630", "1631", "1632", "1633", "1634", "1635", "1636", "1637", "1638", "1639", "1640", "1641", "1642", "1643", "1644", "1645", "1646", "1647", "1648", "1649", "1650", "1651", "1652", "1653", "1654", "1655", "1656", "1657", "1658", "1659", "1660", "1661", "1662", "1663", "1664", "1665", "1666", "1667", "1668", "1669", "1670", "1671", "1672", "1673", "1674", "1675", "1676", "1677", "1678", "1679", "1680", "1681", "1682", "1683", "1684", "1685", "1686", "1687", "1688", "1689", "1690", "1691", "1692", "1693", "1694", "1695", "1696", "1697", "1698", "1699", "1700", "1701", "1702", "1703", "1704", "1705", "1706", "1707", "1708", "1709", "1710", "1711", "1712", "1713", "1714", "1715", "1716", "1717", "1718", "1719", "1720", "1721", "1722", "1723", "1724", "1725", "1726", "1727", "1728", "1729", "1730", "1731", "1732", "1733", "1734", "1735", "1736", "1737", "1738", "1739", "1740", "1741", "1742", "1743", "1744", "1745", "1746", "1747", "1748", "1749", "1750", "1751", "1752", "1753", "1754", "1755", "1756", "1757", "1758", "1759", "1760", "1761", "1762", "1763", "1764", "1765", "1766", "1767", "1768", "1769", "1770", "1771", "1772", "1773", "1774", "1775", "1776", "1777", "1778", "1779", "1780", "1781", "1782", "1783", "1784", "1785", "1786", "1787", "1788", "1789", "1790", "1791", "1792", "1793", "1794", "1795", "1796", "1797", "1798", "1799", "1800", "1801", "1802", "1803", "1804", "1805", "1806", "1807", "1808", "1809", "1810", "1811", "1812", "1813", "1814", "1815", "1816", "1817", "1818", "1819", "1820", "1821", "1822", "1823", "1824", "1825", "1826", "1827", "1828", "1829", "1830", "1831", "1832", "1833", "1834", "1835", "1836", "1837", "1838", "1839", "1840", "1841", "1842", "1843", "1844", "1845", "1846", "1847", "1848", "1849", "1850", "1851", "1852", "1853", "1854", "1855", "1856", "1857", "1858", "1859", "1860", "1861", "1862", "1863", "1864", "1865", "1866", "1867", "1868", "1869", "1870", "1871", "1872", "1873", "1874", "1875", "1876", "1877", "1878", "1879", "1880", "1881", "1882", "1883", "1884", "1885", "1886", "1887", "1888", "1889", "1890", "1891", "1892", "1893", "1894", "1895", "1896", "1897", "1898", "1899", "1900", "1901", "1902", "1903", "1904", "1905", "1906", "1907", "1908", "1909", "1910", "1911", "1912", "1913", "1914", "1915", "1916", "1917", "1918", "1919", "1920", "1921", "1922", "1923", "1924", "1925", "1926", "1927", "1928", "1929", "1930", "1931", "1932", "1933", "1934", "1935", "1936", "1937", "1938", "1939", "1940", "1941", "1942", "1943", "1944", "1945", "1946", "1947", "1948", "1949", "1950", "1951", "1952", "1953", "1954", "1955", "1956", "1957", "1958", "1959", "1960", "1961", "1962", "1963", "1964", "1965", "1966", "1967", "1968", "1969", "1970", "1971", "1972", "1973", "1974", "1975", "1976", "1977", "1978", "1979", "1980", "1981", "1982", "1983", "1984", "1985", "1986", "1987", "1988", "1989", "1990", "1991", "1992", "1993", "1994", "1995", "1996", "1997", "1998", "1999"],
hideTicks: true
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
curve="linear"
legend="none"
zoom="both"
label="Sensor trace"
/>tooltipRenderer replaces the card’s content — the chart keeps owning the
card itself: its surface, elevation and placement. It’s a property, not an
attribute, so it’s set in JS.
The context describes the hovered x: dataIndex, axisValue, axisLabel,
series (those with a value there), missing (those without) and
focusedSeriesIndex. Return a Node, a string (set as text, so markup is
shown rather than parsed), { unsafeHtml }, undefined to fall back to the
built-in card, or null to draw none. See
the area chart’s custom tooltip for the
field-by-field reference — the contract is identical across charts.
<md-line-chart label="Sessions" curve="smooth" grid="horizontal" legend="bottom" show-marks></md-line-chart>
<script type="module">
const series = [
{
label: "Sessions",
color: "primary",
data: [1200, 1850, 1640, 2310, 2780, 2450]
},
{
label: "Signups",
color: "tertiary",
data: [180, 260, 240, 390, 480, 410]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
const tooltipRenderer = (ctx) => {
const el = (tag, css, text) => {
const n = document.createElement(tag);
if (css) n.style.cssText = css;
if (text != null) n.textContent = text;
return n;
};
const card = el('div', 'min-width:190px;font-variant-numeric:tabular-nums');
card.append(el('div',
'font-size:0.68em;letter-spacing:0.1em;text-transform:uppercase;opacity:0.55',
ctx.axisLabel));
ctx.series.forEach((r) => {
const row = el('div',
'display:grid;grid-template-columns:9px 1fr auto;gap:9px;align-items:center;padding:2.5px 0');
row.append(el('span', 'width:9px;height:9px;border-radius:3px;background:' + r.color));
row.append(el('span', null, r.label));
row.append(el('span', 'font-weight:700', r.formattedValue));
card.append(row);
});
// Series with no reading here get their own dimmed row rather than
// vanishing — an absence the reader can see beats a silent omission.
ctx.missing.forEach((r) => {
const row = el('div',
'display:grid;grid-template-columns:9px 1fr auto;gap:9px;align-items:center;padding:2.5px 0;opacity:0.45');
row.append(el('span', 'width:9px;height:9px;border-radius:3px;background:' + r.color));
row.append(el('span', null, r.label));
row.append(el('span', null, 'no reading'));
card.append(row);
});
return card;
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis, tooltipRenderer });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "Sessions",
color: "primary",
data: [1200, 1850, 1640, 2310, 2780, 2450]
},
{
label: "Signups",
color: "tertiary",
data: [180, 260, 240, 390, 480, 410]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
const tooltipRenderer = (ctx) => {
const el = (tag, css, text) => {
const n = document.createElement(tag);
if (css) n.style.cssText = css;
if (text != null) n.textContent = text;
return n;
};
const card = el('div', 'min-width:190px;font-variant-numeric:tabular-nums');
card.append(el('div',
'font-size:0.68em;letter-spacing:0.1em;text-transform:uppercase;opacity:0.55',
ctx.axisLabel));
ctx.series.forEach((r) => {
const row = el('div',
'display:grid;grid-template-columns:9px 1fr auto;gap:9px;align-items:center;padding:2.5px 0');
row.append(el('span', 'width:9px;height:9px;border-radius:3px;background:' + r.color));
row.append(el('span', null, r.label));
row.append(el('span', 'font-weight:700', r.formattedValue));
card.append(row);
});
// Series with no reading here get their own dimmed row rather than
// vanishing — an absence the reader can see beats a silent omission.
ctx.missing.forEach((r) => {
const row = el('div',
'display:grid;grid-template-columns:9px 1fr auto;gap:9px;align-items:center;padding:2.5px 0;opacity:0.45');
row.append(el('span', 'width:9px;height:9px;border-radius:3px;background:' + r.color));
row.append(el('span', null, r.label));
row.append(el('span', null, 'no reading'));
card.append(row);
});
return card;
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
tooltipRenderer={tooltipRenderer}
label="Sessions"
curve="smooth"
grid="horizontal"
legend="bottom"
show-marks
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
[tooltipRenderer]="tooltipRenderer"
label="Sessions"
curve="smooth"
grid="horizontal"
legend="bottom"
show-marks
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "Sessions",
color: "primary",
data: [1200, 1850, 1640, 2310, 2780, 2450]
},
{
label: "Signups",
color: "tertiary",
data: [180, 260, 240, 390, 480, 410]
}
];
xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
tooltipRenderer = (ctx) => {
const el = (tag, css, text) => {
const n = document.createElement(tag);
if (css) n.style.cssText = css;
if (text != null) n.textContent = text;
return n;
};
const card = el('div', 'min-width:190px;font-variant-numeric:tabular-nums');
card.append(el('div',
'font-size:0.68em;letter-spacing:0.1em;text-transform:uppercase;opacity:0.55',
ctx.axisLabel));
ctx.series.forEach((r) => {
const row = el('div',
'display:grid;grid-template-columns:9px 1fr auto;gap:9px;align-items:center;padding:2.5px 0');
row.append(el('span', 'width:9px;height:9px;border-radius:3px;background:' + r.color));
row.append(el('span', null, r.label));
row.append(el('span', 'font-weight:700', r.formattedValue));
card.append(row);
});
// Series with no reading here get their own dimmed row rather than
// vanishing — an absence the reader can see beats a silent omission.
ctx.missing.forEach((r) => {
const row = el('div',
'display:grid;grid-template-columns:9px 1fr auto;gap:9px;align-items:center;padding:2.5px 0;opacity:0.45');
row.append(el('span', 'width:9px;height:9px;border-radius:3px;background:' + r.color));
row.append(el('span', null, r.label));
row.append(el('span', null, 'no reading'));
card.append(row);
});
return card;
};
}<script setup lang="ts">
const series = [
{
label: "Sessions",
color: "primary",
data: [1200, 1850, 1640, 2310, 2780, 2450]
},
{
label: "Signups",
color: "tertiary",
data: [180, 260, 240, 390, 480, 410]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
const tooltipRenderer = (ctx) => {
const el = (tag, css, text) => {
const n = document.createElement(tag);
if (css) n.style.cssText = css;
if (text != null) n.textContent = text;
return n;
};
const card = el('div', 'min-width:190px;font-variant-numeric:tabular-nums');
card.append(el('div',
'font-size:0.68em;letter-spacing:0.1em;text-transform:uppercase;opacity:0.55',
ctx.axisLabel));
ctx.series.forEach((r) => {
const row = el('div',
'display:grid;grid-template-columns:9px 1fr auto;gap:9px;align-items:center;padding:2.5px 0');
row.append(el('span', 'width:9px;height:9px;border-radius:3px;background:' + r.color));
row.append(el('span', null, r.label));
row.append(el('span', 'font-weight:700', r.formattedValue));
card.append(row);
});
// Series with no reading here get their own dimmed row rather than
// vanishing — an absence the reader can see beats a silent omission.
ctx.missing.forEach((r) => {
const row = el('div',
'display:grid;grid-template-columns:9px 1fr auto;gap:9px;align-items:center;padding:2.5px 0;opacity:0.45');
row.append(el('span', 'width:9px;height:9px;border-radius:3px;background:' + r.color));
row.append(el('span', null, r.label));
row.append(el('span', null, 'no reading'));
card.append(row);
});
return card;
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
:tooltipRenderer="tooltipRenderer"
label="Sessions"
curve="smooth"
grid="horizontal"
legend="bottom"
show-marks
/>
</template><script lang="ts">
const series = [
{
label: "Sessions",
color: "primary",
data: [1200, 1850, 1640, 2310, 2780, 2450]
},
{
label: "Signups",
color: "tertiary",
data: [180, 260, 240, 390, 480, 410]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
const tooltipRenderer = (ctx) => {
const el = (tag, css, text) => {
const n = document.createElement(tag);
if (css) n.style.cssText = css;
if (text != null) n.textContent = text;
return n;
};
const card = el('div', 'min-width:190px;font-variant-numeric:tabular-nums');
card.append(el('div',
'font-size:0.68em;letter-spacing:0.1em;text-transform:uppercase;opacity:0.55',
ctx.axisLabel));
ctx.series.forEach((r) => {
const row = el('div',
'display:grid;grid-template-columns:9px 1fr auto;gap:9px;align-items:center;padding:2.5px 0');
row.append(el('span', 'width:9px;height:9px;border-radius:3px;background:' + r.color));
row.append(el('span', null, r.label));
row.append(el('span', 'font-weight:700', r.formattedValue));
card.append(row);
});
// Series with no reading here get their own dimmed row rather than
// vanishing — an absence the reader can see beats a silent omission.
ctx.missing.forEach((r) => {
const row = el('div',
'display:grid;grid-template-columns:9px 1fr auto;gap:9px;align-items:center;padding:2.5px 0;opacity:0.45');
row.append(el('span', 'width:9px;height:9px;border-radius:3px;background:' + r.color));
row.append(el('span', null, r.label));
row.append(el('span', null, 'no reading'));
card.append(row);
});
return card;
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
tooltipRenderer={tooltipRenderer}
label="Sessions"
curve="smooth"
grid="horizontal"
legend="bottom"
show-marks
/>A race sweeps the plot from the first sample to the last, revealing the line as
it goes. There is no race prop — you reassign series on a timer and the
chart redraws. Keep the x axis fixed across frames so it doesn’t rescale under
the animation.
The shape of it in every technology — a fixed x axis, a progress value driven
by requestAnimationFrame, and a series array rebuilt from it on each frame.
Two rules carry over unchanged: keep the whole axis present from the start
(only the data grows, with null for the rounds that have not happened yet), and
stop the loop when the element goes away.
<md-line-chart id="race" label="Championship" curve="linear" series-labels
no-animation legend="bottom" grid="horizontal"></md-line-chart>
<md-button id="race-play" variant="filled">Play</md-button>
<script type="module">
const ROUNDS = 10;
const DRIVERS = [
{ label: 'Antonelli', color: 'primary', cum: [0, 18, 47, 72, 100, 131, 156, 156, 171, 179, 204] },
{ label: 'Hamilton', color: 'error', cum: [0, 12, 33, 41, 51, 72, 90, 115, 125, 147, 159] },
{ label: 'Russell', color: 'tertiary', cum: [0, 25, 51, 63, 80, 88, 88, 106, 131, 154, 154] },
];
const chart = document.getElementById('race');
const xs = Array.from({ length: ROUNDS + 1 }, (_, r) => r);
// The FULL axis is set once and never changes — if it grew with the data the
// scale would rescale under the animation and the lines would slide sideways.
chart.xAxis = { data: xs, scale: 'value', label: 'Round' };
let progress = ROUNDS, raf = 0, last = 0;
function apply() {
chart.series = DRIVERS.map((d) => ({
label: d.label,
color: d.color,
data: xs.map((r) => (r <= progress ? d.cum[r] : null)),
}));
}
function frame(now) {
// A rAF loop outlives the element unless you stop it.
if (!chart.isConnected) return cancelAnimationFrame(raf);
if (!last) last = now;
progress = Math.min(ROUNDS, progress + (now - last) * (ROUNDS / 14000));
last = now;
apply();
raf = progress < ROUNDS ? requestAnimationFrame(frame) : 0;
}
document.getElementById('race-play').addEventListener('click', () => {
progress = 0;
last = 0;
raf = requestAnimationFrame(frame);
});
apply();
</script>import { useEffect, useRef, useState } from 'react';
import { MdLineChart, MdButton } from '@awc-ui/react';
const ROUNDS = 10;
const DRIVERS = [
{ label: 'Antonelli', color: 'primary', cum: [0, 18, 47, 72, 100, 131, 156, 156, 171, 179, 204] },
{ label: 'Hamilton', color: 'error', cum: [0, 12, 33, 41, 51, 72, 90, 115, 125, 147, 159] },
{ label: 'Russell', color: 'tertiary', cum: [0, 25, 51, 63, 80, 88, 88, 106, 131, 154, 154] },
];
const XS = Array.from({ length: ROUNDS + 1 }, (_, r) => r);
const X_AXIS = { data: XS, scale: 'value', label: 'Round' };
// The frame builder is pure, so it can live outside the component.
const frameAt = (progress) =>
DRIVERS.map((d) => ({
label: d.label,
color: d.color,
data: XS.map((r) => (r <= progress ? d.cum[r] : null)),
}));
export function Race() {
const [series, setSeries] = useState(() => frameAt(ROUNDS));
const raf = useRef(0);
// Effect cleanup is the teardown — React unmounts, the loop stops.
useEffect(() => () => cancelAnimationFrame(raf.current), []);
const play = () => {
let progress = 0;
let last = 0;
const step = (now) => {
if (!last) last = now;
progress = Math.min(ROUNDS, progress + (now - last) * (ROUNDS / 14000));
last = now;
setSeries(frameAt(progress));
if (progress < ROUNDS) raf.current = requestAnimationFrame(step);
};
raf.current = requestAnimationFrame(step);
};
return (
<>
<MdLineChart
label="Championship"
curve="linear"
seriesLabels
noAnimation
legend="bottom"
grid="horizontal"
xAxis={X_AXIS}
series={series}
/>
<MdButton variant="filled" onClick={play}>Play</MdButton>
</>
);
}import { Component, CUSTOM_ELEMENTS_SCHEMA, NgZone, OnDestroy } from '@angular/core';
const ROUNDS = 10;
const DRIVERS = [
{ label: 'Antonelli', color: 'primary', cum: [0, 18, 47, 72, 100, 131, 156, 156, 171, 179, 204] },
{ label: 'Hamilton', color: 'error', cum: [0, 12, 33, 41, 51, 72, 90, 115, 125, 147, 159] },
{ label: 'Russell', color: 'tertiary', cum: [0, 25, 51, 63, 80, 88, 88, 106, 131, 154, 154] },
];
const XS = Array.from({ length: ROUNDS + 1 }, (_, r) => r);
@Component({
selector: 'app-race',
schemas: [CUSTOM_ELEMENTS_SCHEMA],
template: `
<md-line-chart
label="Championship"
curve="linear"
series-labels
no-animation
legend="bottom"
grid="horizontal"
[xAxis]="xAxis"
[series]="series"
></md-line-chart>
<md-button variant="filled" (click)="play()">Play</md-button>
`,
})
export class RaceComponent implements OnDestroy {
xAxis = { data: XS, scale: 'value', label: 'Round' };
series = this.frameAt(ROUNDS);
private raf = 0;
// runOutsideAngular: 60 change-detection passes a second would dominate the
// frame budget, and the only thing the loop touches is one bound array.
constructor(private zone: NgZone) {}
play() {
this.zone.runOutsideAngular(() => {
let progress = 0;
let last = 0;
const step = (now: number) => {
if (!last) last = now;
progress = Math.min(ROUNDS, progress + (now - last) * (ROUNDS / 14000));
last = now;
this.series = this.frameAt(progress);
if (progress < ROUNDS) this.raf = requestAnimationFrame(step);
};
this.raf = requestAnimationFrame(step);
});
}
ngOnDestroy() { cancelAnimationFrame(this.raf); }
private frameAt(progress: number) {
return DRIVERS.map((d) => ({
label: d.label,
color: d.color,
data: XS.map((r) => (r <= progress ? d.cum[r] : null)),
}));
}
}<script setup lang="ts">
import { computed, onBeforeUnmount, ref } from 'vue';
const ROUNDS = 10;
const DRIVERS = [
{ label: 'Antonelli', color: 'primary', cum: [0, 18, 47, 72, 100, 131, 156, 156, 171, 179, 204] },
{ label: 'Hamilton', color: 'error', cum: [0, 12, 33, 41, 51, 72, 90, 115, 125, 147, 159] },
{ label: 'Russell', color: 'tertiary', cum: [0, 25, 51, 63, 80, 88, 88, 106, 131, 154, 154] },
];
const XS = Array.from({ length: ROUNDS + 1 }, (_, r) => r);
const xAxis = { data: XS, scale: 'value', label: 'Round' };
const progress = ref(ROUNDS);
const series = computed(() =>
DRIVERS.map((d) => ({
label: d.label,
color: d.color,
data: XS.map((r) => (r <= progress.value ? d.cum[r] : null)),
})),
);
let raf = 0;
function play() {
let last = 0;
progress.value = 0;
const step = (now: number) => {
if (!last) last = now;
progress.value = Math.min(ROUNDS, progress.value + (now - last) * (ROUNDS / 14000));
last = now;
if (progress.value < ROUNDS) raf = requestAnimationFrame(step);
};
raf = requestAnimationFrame(step);
}
onBeforeUnmount(() => cancelAnimationFrame(raf));
</script>
<template>
<md-line-chart
label="Championship"
curve="linear"
series-labels
no-animation
legend="bottom"
grid="horizontal"
.xAxis="xAxis"
.series="series"
/>
<md-button variant="filled" @click="play">Play</md-button>
</template><script lang="ts">
import { onDestroy } from 'svelte';
const ROUNDS = 10;
const DRIVERS = [
{ label: 'Antonelli', color: 'primary', cum: [0, 18, 47, 72, 100, 131, 156, 156, 171, 179, 204] },
{ label: 'Hamilton', color: 'error', cum: [0, 12, 33, 41, 51, 72, 90, 115, 125, 147, 159] },
{ label: 'Russell', color: 'tertiary', cum: [0, 25, 51, 63, 80, 88, 88, 106, 131, 154, 154] },
];
const XS = Array.from({ length: ROUNDS + 1 }, (_, r) => r);
const xAxis = { data: XS, scale: 'value', label: 'Round' };
let progress = ROUNDS;
let raf = 0;
// Reactive, so every frame that moves progress rebuilds the bound array.
$: series = DRIVERS.map((d) => ({
label: d.label,
color: d.color,
data: XS.map((r) => (r <= progress ? d.cum[r] : null)),
}));
function play() {
let last = 0;
progress = 0;
const step = (now) => {
if (!last) last = now;
progress = Math.min(ROUNDS, progress + (now - last) * (ROUNDS / 14000));
last = now;
if (progress < ROUNDS) raf = requestAnimationFrame(step);
};
raf = requestAnimationFrame(step);
}
onDestroy(() => cancelAnimationFrame(raf));
</script>
<md-line-chart
label="Championship"
curve="linear"
series-labels
no-animation
legend="bottom"
grid="horizontal"
{xAxis}
{series}
/>
<md-button variant="filled" on:click={play}>Play</md-button>| Event | Cancelable | Detail | Fires |
|---|---|---|---|
mdMarkerClick | no | MdChartClickDetail<MdChartXYSeries> | A data-point marker is clicked |
mdLineClick | no | MdChartClickDetail<MdChartXYSeries> | A series line is clicked between its points |
mdAreaClick | no | MdChartClickDetail<MdChartXYSeries> | A filled area is clicked |
mdAxisClick | no | MdChartAxisClickDetail | The plot background, or Enter / Space from the keyboard |
mdLegendClick | no | { seriesIndex, seriesId?, selected } | A legend chip toggles a series |
mdHover | no | MdChartHoverDetail | The hovered data index changes (rAF-throttled) |
mdZoom | no | { startIndex, endIndex, reset } | The zoom window changes (drag, slider, setZoom, resetZoom) |
mdReady | no | void | The engine has mounted and drawn |
The three click events share one payload, so one handler can serve markers, lines and areas. Every field is already in your coordinates — the series object you passed in, the index within it, the original axis value — so drill-down and selection need no re-mapping to chart internals.
// `T` defaults to `unknown`; md-line-chart emits it as// `MdChartClickDetail<MdChartXYSeries>`, so name the argument to get a typed// `series` back.interface MdChartClickDetail<T = unknown> { seriesIndex: number; // 0-based index into `series` seriesId?: string; // the series' `id`, when one was given dataIndex: number; // index of the point within that series value: number | null; // raw value — `null` for an empty slot axisValue?: string | number | Date; // original x value at that column series: T; // the series object you passed in nativeEvent: PointerEvent | MouseEvent | KeyboardEvent;}
interface MdChartAxisClickDetail { dataIndex: number; // nearest x position axisValue?: string | number | Date; // One row per VISIBLE series at that x — `dataIndex` is -1 where a series // has no point there. Series hidden by a legend toggle are left out. seriesValues: MdChartAxisSeriesValue[]; nativeEvent: PointerEvent | MouseEvent | KeyboardEvent;}
interface MdChartAxisSeriesValue { seriesIndex: number; seriesId?: string; label: string; dataIndex: number; value: number | null;}
interface MdChartHoverDetail { dataIndex: number; // highlighted x position axisValue?: string | number | Date; seriesIndices: number[]; // one entry under tooltip="item",} // every series at that x under "axis"This is the chart the snippets below wire up. Click a marker, click the plot background, toggle a legend chip or drag the zoom slider — each payload lands in the footer under the plot.
<md-line-chart id="sessions" label="Sessions" zoom="slider" grid="horizontal"
legend="top-end" show-marks></md-line-chart>
<script type="module">
const chart = document.getElementById('sessions');
chart.xAxis = { data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'] };
chart.series = [
{ label: 'Sessions', color: 'primary', data: [1200, 1850, 1640, 2310, 2780, 2450, 2900, 3120] },
{ label: 'Signups', color: 'tertiary', data: [180, 260, 240, 390, 480, 410, 520, 610] },
];
chart.markLines = [{ value: 4, label: 'Launch' }];
chart.valueFormatter = (v) => new Intl.NumberFormat('en-US').format(v ?? 0);
chart.addEventListener('mdMarkerClick', (e) =>
console.log(e.detail.series.label, e.detail.axisValue, e.detail.value));
chart.addEventListener('mdLineClick', (e) =>
console.log('line', e.detail.seriesIndex, e.detail.dataIndex));
chart.addEventListener('mdAxisClick', (e) =>
console.log('axis', e.detail.axisValue, e.detail.seriesValues));
chart.addEventListener('mdLegendClick', (e) =>
console.log('legend', e.detail.seriesIndex, e.detail.selected));
chart.addEventListener('mdZoom', (e) =>
console.log(e.detail.reset ? 'reset' : [e.detail.startIndex, e.detail.endIndex]));
</script>import { useMemo } from 'react';
import { MdLineChart } from '@awc-ui/react';
// Hoisted: these never change, so they keep one identity for the life of the
// module. An object literal written inline in JSX is a NEW value every render,
// and each of these is a @Watch-ed prop — the chart would rebuild its scene on
// every parent re-render.
const X_AXIS = { data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'] };
const MARK_LINES = [{ value: 4, label: 'Launch' }];
const FORMAT = (v) => new Intl.NumberFormat('en-US').format(v ?? 0);
export function SessionsChart({ sessions, signups }) {
// Derived from props, so it has to be memoised rather than hoisted.
const series = useMemo(
() => [
{ label: 'Sessions', color: 'primary', data: sessions },
{ label: 'Signups', color: 'tertiary', data: signups },
],
[sessions, signups],
);
// Direct props — no ref, no effect. The React wrapper is generated with
// createComponent(), which assigns non-primitive values as element
// PROPERTIES, so arrays, objects and functions arrive intact.
return (
<MdLineChart
label="Sessions"
zoom="slider"
grid="horizontal"
legend="top-end"
showMarks
xAxis={X_AXIS}
series={series}
markLines={MARK_LINES}
valueFormatter={FORMAT}
onMdMarkerClick={(e) => console.log(e.detail.series.label, e.detail.value)}
onMdLineClick={(e) => console.log('line', e.detail.seriesIndex)}
onMdAxisClick={(e) => console.log('axis', e.detail.axisValue, e.detail.seriesValues)}
onMdLegendClick={(e) => console.log('legend', e.detail.seriesIndex, e.detail.selected)}
onMdZoom={(e) => console.log(e.detail.startIndex, e.detail.endIndex)}
/>
);
}import { Component, CUSTOM_ELEMENTS_SCHEMA, Input, OnChanges } from '@angular/core';
@Component({
selector: 'app-sessions-chart',
// Without CUSTOM_ELEMENTS_SCHEMA the template compiler rejects every
// property binding below: "Can't bind to 'xAxis' since it isn't a known
// property of 'md-line-chart'". Import the generated @awc-ui/angular module
// instead if you prefer typed wrappers.
schemas: [CUSTOM_ELEMENTS_SCHEMA],
template: `
<md-line-chart
label="Sessions"
zoom="slider"
grid="horizontal"
legend="top-end"
show-marks
[xAxis]="xAxis"
[series]="series"
[markLines]="markLines"
[valueFormatter]="valueFormatter"
(mdMarkerClick)="onMarker($event)"
(mdLineClick)="onLine($event)"
(mdAxisClick)="onAxis($event)"
(mdLegendClick)="onLegend($event)"
(mdZoom)="onZoom($event)"
></md-line-chart>
`,
})
export class SessionsChartComponent implements OnChanges {
@Input() sessions: number[] = [];
@Input() signups: number[] = [];
// Property bindings on a custom element — Angular assigns these as DOM
// properties, so no ViewChild and no AfterViewInit are needed.
xAxis = { data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'] };
markLines = [{ value: 4, label: 'Launch' }];
valueFormatter = (v: number | null) => new Intl.NumberFormat('en-US').format(v ?? 0);
series: { label: string; color: string; data: number[] }[] = [];
// Rebuild in ngOnChanges, not a getter: a getter returning a fresh array runs
// on every change-detection pass and re-sets the prop each time.
ngOnChanges() {
this.series = [
{ label: 'Sessions', color: 'primary', data: this.sessions },
{ label: 'Signups', color: 'tertiary', data: this.signups },
];
}
onMarker(e: CustomEvent) { console.log(e.detail.series.label, e.detail.value); }
onLine(e: CustomEvent) { console.log('line', e.detail.seriesIndex); }
onAxis(e: CustomEvent) { console.log('axis', e.detail.axisValue, e.detail.seriesValues); }
onLegend(e: CustomEvent) { console.log('legend', e.detail.seriesIndex, e.detail.selected); }
onZoom(e: CustomEvent) { console.log(e.detail.startIndex, e.detail.endIndex); }
}<script setup lang="ts">
import { ref } from 'vue';
const series = ref([
{ label: 'Sessions', color: 'primary', data: [1200, 1850, 1640, 2310, 2780, 2450, 2900, 3120] },
{ label: 'Signups', color: 'tertiary', data: [180, 260, 240, 390, 480, 410, 520, 610] },
]);
const xAxis = ref({ data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'] });
const markLines = ref([{ value: 4, label: 'Launch' }]);
// A plain function, not a ref: it never changes, and wrapping it would only
// add a .value hop for the property binding to unwrap.
const valueFormatter = (v: number | null) => new Intl.NumberFormat('en-US').format(v ?? 0);
</script>
<template>
<md-line-chart
label="Sessions"
zoom="slider"
grid="horizontal"
legend="top-end"
show-marks
.series="series"
.xAxis="xAxis"
.markLines="markLines"
.valueFormatter="valueFormatter"
@mdMarkerClick="(e) => console.log(e.detail.series.label, e.detail.value)"
@mdLineClick="(e) => console.log('line', e.detail.seriesIndex)"
@mdAxisClick="(e) => console.log('axis', e.detail.axisValue, e.detail.seriesValues)"
@mdLegendClick="(e) => console.log('legend', e.detail.seriesIndex, e.detail.selected)"
@mdZoom="(e) => console.log(e.detail.startIndex, e.detail.endIndex)"
/>
</template><script lang="ts">
export let sessions: number[] = [];
export let signups: number[] = [];
const xAxis = { data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'] };
const markLines = [{ value: 4, label: 'Launch' }];
const valueFormatter = (v: number | null) => new Intl.NumberFormat('en-US').format(v ?? 0);
// Reactive, because it derives from props.
$: series = [
{ label: 'Sessions', color: 'primary', data: sessions },
{ label: 'Signups', color: 'tertiary', data: signups },
];
</script>
<!-- Svelte assigns these as PROPERTIES on an upgraded custom element, so the
shorthand carries arrays and functions through unchanged — no bind:this. -->
<md-line-chart
label="Sessions"
zoom="slider"
grid="horizontal"
legend="top-end"
show-marks
{xAxis}
{series}
{markLines}
{valueFormatter}
on:mdMarkerClick={(e) => console.log(e.detail.series.label, e.detail.value)}
on:mdLineClick={(e) => console.log('line', e.detail.seriesIndex)}
on:mdAxisClick={(e) => console.log('axis', e.detail.axisValue, e.detail.seriesValues)}
on:mdLegendClick={(e) => console.log('legend', e.detail.seriesIndex, e.detail.selected)}
on:mdZoom={(e) => console.log(e.detail.startIndex, e.detail.endIndex)}
/>| Property | Attribute | Type | Default | Reflects |
|---|---|---|---|---|
label | label | string | '' | — |
subtitle | subtitle | string | undefined | — | — |
markLines | JS only | MdChartMarkLine[] | undefined | — | — |
titleAlign | title-align | MdChartTitleAlign | 'start' | — |
series | JS only | MdChartXYSeries[] | [] | — |
xAxis | JS only | MdChartAxis | undefined | — | — |
yAxis | JS only | MdChartAxis | undefined | — | — |
yAxes | JS only | MdChartAxis[] | undefined | — | — |
curve | curve | 'linear' | 'smooth' | 'monotone' | 'step' | 'step-before' | 'step-middle' | 'smooth' | — |
stack | stack | MdChartStackMode | 'none' | — |
connectNulls | connect-nulls | boolean | false | — |
showMarks | show-marks | boolean | false | — |
lineWidth | line-width | number | — | — |
markSize | mark-size | number | — | — |
area | area | boolean | false | — |
showLine | show-line | boolean | true | — |
legend | legend | MdChartLegendPosition | 'none' | 'top-end' | Yes |
tooltip | tooltip | MdChartTooltipTrigger | 'axis' | — |
grid | grid | 'none' | 'horizontal' | 'vertical' | 'both' | 'horizontal' | — |
axisTicks | axis-ticks | boolean | false | — |
inverted | inverted | boolean | false | — |
showLabels | show-labels | boolean | false | — |
seriesLabels | series-labels | boolean | false | — |
zoom | zoom | 'none' | 'inside' | 'slider' | 'both' | 'none' | — |
locale | locale | string | '' | — |
labelEmpty | label-empty | string | 'No data to display' | — |
labelPlot | label-plot | string | 'Chart data. Use the arrow keys to move between points, Home and End for the first and last, Escape to leave.' | — |
labelPoint | label-point | string | '%x%: %values%' | — |
labelZoomStart | label-zoom-start | string | 'Zoom range start' | — |
labelZoomEnd | label-zoom-end | string | 'Zoom range end' | — |
summary | summary | string | '' | — |
tableLabels | JS only | { x?: string | — | — |
valueFormatter | JS only | (value: number | null | undefined) => string | — | — |
tooltipRenderer | JS only | MdChartTooltipRenderer | — | — |
heightProp | height | string | — | — |
noAnimation | no-animation | boolean | false | — |
animation | animation | MdChartAnimation | 'expressive' | — |
animationDuration | animation-duration | number | — | — |
loading | loading | boolean | false | Yes |
loadingLabel | loading-label | string | 'Loading chart…' | — |
density | density | 0 | -1 | -2 | -3 | -4 | 0 | Yes |
| Method | Parameters |
|---|---|
refreshTheme() | none |
resize() | none |
replay() | none |
toDataURL() | none |
getInstance() | none |
setZoom() | startIndex: number, endIndex: number |
resetZoom() | none |
| Slot | Description |
|---|---|
header | Renders above the plot |
empty | Empty-state content (overrides default text) |
loader | — |
loading | — |
footer | Renders below the plot |
Override on the host element for per-instance theming:
| Property | Description |
|---|---|
--md-line-chart-block-size | Chart block-size (default: aspect-ratio driven) |
--md-line-chart-min-block-size | Floor for the chart's height (default: 160px) |
--md-line-chart-aspect-ratio | Width:height ratio (default: 16/9) |
--md-line-chart-background | Surface behind the chart (default: --md-sys-color-surface-container-low; |
--md-line-chart-padding | Inset padding around the canvas (default: 16px) |
--md-line-chart-shape | Container corner radius (default: --md-sys-shape-corner-large) |
--md-line-chart-empty-color | Empty-state text colour |
--md-line-chart-empty-background | Empty-state surface (default: the chart's own background) |
--md-line-chart-empty-font | Empty-state font FAMILY — not a font shorthand |
--md-line-chart-empty-font-size | Empty-state font size (default: 14px) |
--md-line-chart-empty-icon-size | Slotted Material Symbols icon size (default: 40px) |
--md-line-chart-zoom-size | Height reserved for the zoom slider (default: 28px) |
--md-line-chart-zoom-track-color | Zoom slider track colour (md-slider inactive track) |
--md-line-chart-zoom-window-color | Zoom slider selected-window colour (md-slider active track) |
--md-line-chart-zoom-handle-color | Zoom slider thumb + drag-band edge colour |
--md-line-chart-zoom-band-color | Drag-to-zoom selection fill |
Style internal elements through shadow DOM with ::part():
| Part | Description |
|---|---|
zoom | Zoom slider container |
zoom-slider | The md-slider itself |
zoom-pan | Drag-to-pan grip over the window |
header | Header slot wrapper (title, toolbar) |
canvas | Plot canvas container |
empty | Empty-state container |
loading | — |
zoom-band | Drag-to-zoom selection band |
footer | Footer slot wrapper (caption, legend) |
zoom-track | Zoom slider track (forwarded) |
zoom-window | Selected window / active track (forwarded) |
zoom-handle | Zoom slider thumb (forwarded) |
role="figure" and an aria-label summary such as “Revenue,
line chart with 2 series, from Jan to Jun.” label, summary, label-plot
and label-point carry that description; tableLabels names the underlying
data dimensions. Treat them as required, not optional.<table> mirrors every data point. Provide the numbers as
a visible table wherever precision matters.Home / End jump to the ends, Escape leaves, and Enter / Space emits
mdAxisClick for the focused position. Arrows follow the reading direction,
so in RTL the left arrow advances.aria-live announcement.aria-pressed, so a screen reader
says whether a series is shown or hidden.series-labels, and
differing curve or mark styles all help.loading plus loading-label makes the fetch state perceivable.prefers-reduced-motion; no-animation forces the static path.
Inherits Windows high-contrast colours via forced-color-adjust: auto.<md-line-chart label="Sessions per week" summary="Sessions per week, line chart, 8 points from W1 to W8" legend="bottom" grid="horizontal" show-marks></md-line-chart>
<script type="module">
const series = [
{
label: "Sessions",
color: "primary",
data: [1200, 1850, 1640, 2310, 2780, 2450, 2900, 3120]
}
];
const xAxis = {
data: ["W1", "W2", "W3", "W4", "W5", "W6", "W7", "W8"]
};
const yAxis = {
label: "Sessions"
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis, yAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "Sessions",
color: "primary",
data: [1200, 1850, 1640, 2310, 2780, 2450, 2900, 3120]
}
];
const xAxis = {
data: ["W1", "W2", "W3", "W4", "W5", "W6", "W7", "W8"]
};
const yAxis = {
label: "Sessions"
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
yAxis={yAxis}
label="Sessions per week"
summary="Sessions per week, line chart, 8 points from W1 to W8"
legend="bottom"
grid="horizontal"
show-marks
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
[yAxis]="yAxis"
label="Sessions per week"
summary="Sessions per week, line chart, 8 points from W1 to W8"
legend="bottom"
grid="horizontal"
show-marks
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "Sessions",
color: "primary",
data: [1200, 1850, 1640, 2310, 2780, 2450, 2900, 3120]
}
];
xAxis = {
data: ["W1", "W2", "W3", "W4", "W5", "W6", "W7", "W8"]
};
yAxis = {
label: "Sessions"
};
}<script setup lang="ts">
const series = [
{
label: "Sessions",
color: "primary",
data: [1200, 1850, 1640, 2310, 2780, 2450, 2900, 3120]
}
];
const xAxis = {
data: ["W1", "W2", "W3", "W4", "W5", "W6", "W7", "W8"]
};
const yAxis = {
label: "Sessions"
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
:yAxis="yAxis"
label="Sessions per week"
summary="Sessions per week, line chart, 8 points from W1 to W8"
legend="bottom"
grid="horizontal"
show-marks
/>
</template><script lang="ts">
const series = [
{
label: "Sessions",
color: "primary",
data: [1200, 1850, 1640, 2310, 2780, 2450, 2900, 3120]
}
];
const xAxis = {
data: ["W1", "W2", "W3", "W4", "W5", "W6", "W7", "W8"]
};
const yAxis = {
label: "Sessions"
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
yAxis={yAxis}
label="Sessions per week"
summary="Sessions per week, line chart, 8 points from W1 to W8"
legend="bottom"
grid="horizontal"
show-marks
/>RTL — inside a dir="rtl" parent the whole plot mirrors: the value axis and
its labels move to the right, the category axis runs right-to-left, and the
tooltip opens along the reading direction. dataIndex, axisValue and every
event payload are identical in both directions — only pixels move. See
RTL.
<div dir="rtl"> <md-line-chart label="Sessions" legend="top-end"></md-line-chart></div>Direction, density and locale are all declarative, and none of them touches the data: the arrays stay in source order in every technology.
<md-line-chart id="sessions" dir="rtl" density="-2" locale="ar-EG"
label="الجلسات" legend="top-end" grid="horizontal" show-marks></md-line-chart>
<script type="module">
const chart = document.getElementById('sessions');
// Source order, never pre-reversed — the engine mirrors the scene, not the data.
chart.xAxis = { data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'] };
chart.series = [{ label: 'Sessions', color: 'primary', data: [400, 460, 520, 610, 580, 700] }];
</script>import { MdLineChart } from '@awc-ui/react';
const X_AXIS = { data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'] };
const SERIES = [{ label: 'Sessions', color: 'primary', data: [400, 460, 520, 610, 580, 700] }];
export function Sessions() {
return (
<MdLineChart
dir="rtl"
density={-2}
locale="ar-EG"
label="الجلسات"
legend="top-end"
grid="horizontal"
showMarks
xAxis={X_AXIS}
series={SERIES}
/>
);
}import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
@Component({
selector: 'app-sessions',
schemas: [CUSTOM_ELEMENTS_SCHEMA],
template: `
<md-line-chart
dir="rtl"
density="-2"
locale="ar-EG"
label="الجلسات"
legend="top-end"
grid="horizontal"
show-marks
[xAxis]="xAxis"
[series]="series"
></md-line-chart>
`,
})
export class SessionsComponent {
xAxis = { data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'] };
series = [{ label: 'Sessions', color: 'primary', data: [400, 460, 520, 610, 580, 700] }];
}<script setup lang="ts">
const xAxis = { data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'] };
const series = [{ label: 'Sessions', color: 'primary', data: [400, 460, 520, 610, 580, 700] }];
</script>
<template>
<md-line-chart
dir="rtl"
density="-2"
locale="ar-EG"
label="الجلسات"
legend="top-end"
grid="horizontal"
show-marks
.xAxis="xAxis"
.series="series"
/>
</template><script lang="ts">
const xAxis = { data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'] };
const series = [{ label: 'Sessions', color: 'primary', data: [400, 460, 520, 610, 580, 700] }];
</script>
<md-line-chart
dir="rtl"
density="-2"
locale="ar-EG"
label="الجلسات"
legend="top-end"
grid="horizontal"
show-marks
{xAxis}
{series}
/>The engine mirrors the scene — it never touches your arrays. So keep series
and xAxis.data in their natural order and let the direction do the work.
Reversing them by hand for an RTL page mirrors twice: the axis runs
right-to-left as it should, but the values are laid onto it backwards, so the
trend reads inverted and every dataIndex in an event payload points at the
wrong month.
<md-line-chart dir="rtl" density="-2" label="Sessions" legend="top-end" grid="horizontal" show-marks></md-line-chart>
<script type="module">
const series = [
{
label: "Sessions",
color: "primary",
data: [400, 460, 520, 610, 580, 700]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "Sessions",
color: "primary",
data: [400, 460, 520, 610, 580, 700]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
dir="rtl"
density="-2"
label="Sessions"
legend="top-end"
grid="horizontal"
show-marks
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
dir="rtl"
density="-2"
label="Sessions"
legend="top-end"
grid="horizontal"
show-marks
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "Sessions",
color: "primary",
data: [400, 460, 520, 610, 580, 700]
}
];
xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
}<script setup lang="ts">
const series = [
{
label: "Sessions",
color: "primary",
data: [400, 460, 520, 610, 580, 700]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
dir="rtl"
density="-2"
label="Sessions"
legend="top-end"
grid="horizontal"
show-marks
/>
</template><script lang="ts">
const series = [
{
label: "Sessions",
color: "primary",
data: [400, 460, 520, 610, 580, 700]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
dir="rtl"
density="-2"
label="Sessions"
legend="top-end"
grid="horizontal"
show-marks
/>Density — density="-1…-4" tightens padding and label sizes. See
Density.
i18n — number and date formatting follows the locale prop, not the
document’s lang: Intl with no locale resolves to the browser’s, which is
rarely what a localised page wants.
<md-line-chart locale="de-DE"></md-line-chart><!-- the axis reads 1.234,5 rather than 1,234.5 --><md-line-chart locale="de-DE" label="Umsatz" subtitle="Erstes Halbjahr" legend="bottom" grid="horizontal" show-marks label-point="%x%: %values%"></md-line-chart>
<script type="module">
const series = [
{
label: "Umsatz",
color: "primary",
data: [1234.5, 1810.25, 1640.75, 2310.5, 2780.4, 2450.9]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun"]
};
const yAxis = {
label: "EUR"
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis, yAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "Umsatz",
color: "primary",
data: [1234.5, 1810.25, 1640.75, 2310.5, 2780.4, 2450.9]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun"]
};
const yAxis = {
label: "EUR"
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
yAxis={yAxis}
locale="de-DE"
label="Umsatz"
subtitle="Erstes Halbjahr"
legend="bottom"
grid="horizontal"
show-marks
label-point="%x%: %values%"
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
[yAxis]="yAxis"
locale="de-DE"
label="Umsatz"
subtitle="Erstes Halbjahr"
legend="bottom"
grid="horizontal"
show-marks
label-point="%x%: %values%"
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "Umsatz",
color: "primary",
data: [1234.5, 1810.25, 1640.75, 2310.5, 2780.4, 2450.9]
}
];
xAxis = {
data: ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun"]
};
yAxis = {
label: "EUR"
};
}<script setup lang="ts">
const series = [
{
label: "Umsatz",
color: "primary",
data: [1234.5, 1810.25, 1640.75, 2310.5, 2780.4, 2450.9]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun"]
};
const yAxis = {
label: "EUR"
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
:yAxis="yAxis"
locale="de-DE"
label="Umsatz"
subtitle="Erstes Halbjahr"
legend="bottom"
grid="horizontal"
show-marks
label-point="%x%: %values%"
/>
</template><script lang="ts">
const series = [
{
label: "Umsatz",
color: "primary",
data: [1234.5, 1810.25, 1640.75, 2310.5, 2780.4, 2450.9]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun"]
};
const yAxis = {
label: "EUR"
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
yAxis={yAxis}
locale="de-DE"
label="Umsatz"
subtitle="Erstes Halbjahr"
legend="bottom"
grid="horizontal"
show-marks
label-point="%x%: %values%"
/>Every string the chart renders itself is a prop, so it can be handed over from
whatever i18n engine the app already uses: label, subtitle, summary
(replaces the generated aria-label), label-empty, loading-label,
label-plot, label-point, label-zoom-start / label-zoom-end, and
tableLabels (a property — it takes an object). label-point uses the
%x% / %values% percent tokens; keep them when translating.
Two of these are not namespaced to the component. The axis and gridlines are drawn by the shared chart engine, so they read family-wide properties that every chart type honours:
| Custom property | Draws | Default |
|---|---|---|
--md-chart-axis-color | The axis line and its ticks | --md-sys-color-outline-variant |
--md-chart-grid-color | The gridlines across the plot | --md-sys-color-outline-variant at 50% alpha |
Both fall back to the same role — MD3 data-viz keeps chart chrome light — but the gridlines are dimmed to half alpha so they read as faint guides beneath a slightly more present axis line. An explicit override is used verbatim, not dimmed.
They’re read off the element’s computed style, so setting them on any ancestor tints every chart beneath it — a dashboard section, or the whole page — without touching each component.
.dashboard { --md-chart-axis-color: #7c6fd6; --md-chart-grid-color: rgba(124, 111, 214, 0.22);}<md-line-chart label="Signups" grid="both" legend="none" show-marks></md-line-chart>
<script type="module">
const series = [
{
label: "Signups",
color: "#7c6fd6",
data: [12, 19, 15, 24, 28, 22, 30]
}
];
const xAxis = {
data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "Signups",
color: "#7c6fd6",
data: [12, 19, 15, 24, 28, 22, 30]
}
];
const xAxis = {
data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
label="Signups"
grid="both"
legend="none"
show-marks
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
label="Signups"
grid="both"
legend="none"
show-marks
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "Signups",
color: "#7c6fd6",
data: [12, 19, 15, 24, 28, 22, 30]
}
];
xAxis = {
data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
};
}<script setup lang="ts">
const series = [
{
label: "Signups",
color: "#7c6fd6",
data: [12, 19, 15, 24, 28, 22, 30]
}
];
const xAxis = {
data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
label="Signups"
grid="both"
legend="none"
show-marks
/>
</template><script lang="ts">
const series = [
{
label: "Signups",
color: "#7c6fd6",
data: [12, 19, 15, 24, 28, 22, 30]
}
];
const xAxis = {
data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
label="Signups"
grid="both"
legend="none"
show-marks
/>The rest are namespaced to the component:
| Custom property | Purpose | Default |
|---|---|---|
--md-line-chart-block-size | Chart box height | auto (the aspect ratio drives it) |
--md-line-chart-min-block-size | Height floor | max(120px, 160px + density × 8px) |
--md-line-chart-aspect-ratio | Width : height | 16 / 9 |
--md-line-chart-background | Surface behind the chart | --md-sys-color-surface-container-low |
--md-line-chart-padding | Inset around the canvas | max(8px, 16px + density × 2px) |
--md-line-chart-shape | Container corner radius | max(8px, 16px + density × 2px) |
--md-line-chart-empty-color | Empty-state text | --md-sys-color-on-surface-variant |
--md-line-chart-empty-background | Empty-state surface | the chart’s own background |
--md-line-chart-empty-font | Empty-state font family (not a shorthand) | --md-sys-typescale-body-medium-font-family |
--md-line-chart-empty-font-size | Empty-state font size | --md-sys-typescale-body-medium-font-size (14px) |
--md-line-chart-empty-icon-size | Slotted empty-state icon | 40px |
--md-line-chart-zoom-size | Height reserved for the zoom slider | 28px |
--md-line-chart-zoom-track-color | Slider track | --md-sys-color-surface-container-highest |
--md-line-chart-zoom-window-color | Selected window | --md-sys-color-secondary-container |
--md-line-chart-zoom-handle-color | Thumbs and drag-band edges | --md-sys-color-primary |
--md-line-chart-zoom-band-color | Drag-to-zoom selection fill | --md-sys-color-primary at 16% |
md-line-chart.dashboard { --md-line-chart-background: var(--md-sys-color-surface-container); --md-line-chart-padding: 16px; --md-line-chart-shape: 16px; --md-line-chart-aspect-ratio: 16 / 6;}<md-line-chart label="Sessions" legend="top-end" grid="horizontal" show-marks style="--md-line-chart-background: var(--md-sys-color-surface-container); --md-line-chart-padding: 16px; --md-line-chart-shape: 16px; --md-line-chart-aspect-ratio: 16 / 6;"></md-line-chart>
<script type="module">
const series = [
{
label: "Sessions",
color: "primary",
data: [400, 460, 520, 610, 580, 700]
},
{
label: "Signups",
color: "tertiary",
data: [120, 150, 140, 210, 190, 260]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
const el = document.querySelector("md-line-chart");
Object.assign(el, { series, xAxis });
</script>import { MdLineChart } from '@awc-ui/react';
const series = [
{
label: "Sessions",
color: "primary",
data: [400, 460, 520, 610, 580, 700]
},
{
label: "Signups",
color: "tertiary",
data: [120, 150, 140, 210, 190, 260]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
export function Chart() {
return (
<MdLineChart
series={series}
xAxis={xAxis}
label="Sessions"
legend="top-end"
grid="horizontal"
show-marks
/>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-chart',
template: `
<md-line-chart
[series]="series"
[xAxis]="xAxis"
label="Sessions"
legend="top-end"
grid="horizontal"
show-marks
></md-line-chart>
`,
})
export class ChartComponent {
series = [
{
label: "Sessions",
color: "primary",
data: [400, 460, 520, 610, 580, 700]
},
{
label: "Signups",
color: "tertiary",
data: [120, 150, 140, 210, 190, 260]
}
];
xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
}<script setup lang="ts">
const series = [
{
label: "Sessions",
color: "primary",
data: [400, 460, 520, 610, 580, 700]
},
{
label: "Signups",
color: "tertiary",
data: [120, 150, 140, 210, 190, 260]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
</script>
<template>
<md-line-chart
:series="series"
:xAxis="xAxis"
label="Sessions"
legend="top-end"
grid="horizontal"
show-marks
/>
</template><script lang="ts">
const series = [
{
label: "Sessions",
color: "primary",
data: [400, 460, 520, 610, 580, 700]
},
{
label: "Signups",
color: "tertiary",
data: [120, 150, 140, 210, 190, 260]
}
];
const xAxis = {
data: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
};
</script>
<md-line-chart
series={series}
xAxis={xAxis}
label="Sessions"
legend="top-end"
grid="horizontal"
show-marks
/>Series colours are best customised with the per-series color field, which
accepts an MD3 role (primary, tertiary, …) or any CSS colour.
CSS parts — header, canvas, footer, empty, loading, zoom,
zoom-slider, zoom-pan, zoom-band, plus three forwarded from the zoom
slider: zoom-track, zoom-window, zoom-handle. Slots — header,
footer, empty, loader (older alias loading).
md-line-chart.framed::part(canvas) { border: 1px dashed var(--md-sys-color-outline-variant); border-radius: 12px;}md-line-chart.framed::part(footer) { border-block-start: 1px solid var(--md-sys-color-outline-variant); padding-block-start: 8px;}The parts are addressed from a stylesheet, so the wiring is the same everywhere —
give the element a class, style ::part() outside the shadow root, and put the
caption in the footer slot.
<style>
.framed::part(canvas) {
border: 1px dashed var(--md-sys-color-outline-variant);
border-radius: 12px;
}
.framed::part(footer) {
border-block-start: 1px solid var(--md-sys-color-outline-variant);
padding-block-start: 8px;
}
</style>
<md-line-chart id="framed" class="framed" label="Sessions" legend="top-end"
grid="horizontal" show-marks>
<span slot="footer">Source: internal analytics, sampled hourly</span>
</md-line-chart>
<script type="module">
const chart = document.getElementById('framed');
chart.series = [{ label: 'Sessions', color: 'primary', data: [400, 460, 520, 610, 580, 700] }];
chart.xAxis = { data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'] };
</script>import { MdLineChart } from '@awc-ui/react';
import './framed.css'; // holds the ::part() rules — they cannot be inline styles
const X_AXIS = { data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'] };
const SERIES = [{ label: 'Sessions', color: 'primary', data: [400, 460, 520, 610, 580, 700] }];
export function FramedChart() {
return (
<MdLineChart
className="framed"
label="Sessions"
legend="top-end"
grid="horizontal"
showMarks
xAxis={X_AXIS}
series={SERIES}
>
<span slot="footer">Source: internal analytics, sampled hourly</span>
</MdLineChart>
);
}import { Component, CUSTOM_ELEMENTS_SCHEMA, ViewEncapsulation } from '@angular/core';
@Component({
selector: 'app-framed-chart',
schemas: [CUSTOM_ELEMENTS_SCHEMA],
// ::part() has to escape Angular's emulated encapsulation — either turn it
// off for this component, or put the rules in the global stylesheet.
encapsulation: ViewEncapsulation.None,
styles: [`
.framed::part(canvas) {
border: 1px dashed var(--md-sys-color-outline-variant);
border-radius: 12px;
}
.framed::part(footer) {
border-block-start: 1px solid var(--md-sys-color-outline-variant);
padding-block-start: 8px;
}
`],
template: `
<md-line-chart
class="framed"
label="Sessions"
legend="top-end"
grid="horizontal"
show-marks
[xAxis]="xAxis"
[series]="series"
>
<span slot="footer">Source: internal analytics, sampled hourly</span>
</md-line-chart>
`,
})
export class FramedChartComponent {
xAxis = { data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'] };
series = [{ label: 'Sessions', color: 'primary', data: [400, 460, 520, 610, 580, 700] }];
}<script setup lang="ts">
const xAxis = { data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'] };
const series = [{ label: 'Sessions', color: 'primary', data: [400, 460, 520, 610, 580, 700] }];
</script>
<template>
<md-line-chart
class="framed"
label="Sessions"
legend="top-end"
grid="horizontal"
show-marks
.xAxis="xAxis"
.series="series"
>
<span slot="footer">Source: internal analytics, sampled hourly</span>
</md-line-chart>
</template>
<!-- Not scoped: a scoped block adds a data attribute the shadow part never
carries, so the rule would never match. -->
<style>
.framed::part(canvas) {
border: 1px dashed var(--md-sys-color-outline-variant);
border-radius: 12px;
}
.framed::part(footer) {
border-block-start: 1px solid var(--md-sys-color-outline-variant);
padding-block-start: 8px;
}
</style><script lang="ts">
const xAxis = { data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'] };
const series = [{ label: 'Sessions', color: 'primary', data: [400, 460, 520, 610, 580, 700] }];
</script>
<md-line-chart
class="framed"
label="Sessions"
legend="top-end"
grid="horizontal"
show-marks
{xAxis}
{series}
>
<span slot="footer">Source: internal analytics, sampled hourly</span>
</md-line-chart>
<style>
/* :global, because Svelte scopes styles per component and would otherwise
strip a selector it cannot see used in the markup. */
:global(.framed::part(canvas)) {
border: 1px dashed var(--md-sys-color-outline-variant);
border-radius: 12px;
}
:global(.framed::part(footer)) {
border-block-start: 1px solid var(--md-sys-color-outline-variant);
padding-block-start: 8px;
}
</style>md-area-chart ·
md-bar-chart ·
md-pie-chart ·
md-sparkline ·
md-slider ·
md-progress-indicator
md-line-chartTwo artefacts to give your AI agent so it generates correct UI with this component. The per-component spec answers "how do I use this exact tag?". The main-llm spec answers "which tag should I pick in the first place?".
md-line-chart spec card
Identity · when to use / when NOT · decision cues · behavioural contract · do/don't · anti-patterns · full API. Paste into your agent when you're implementing with this component.
System-prompt preamble · decision matrix · token reference · page recipes · anti-patterns. Paste into the system prompt at the start of a piece of work.