@visactor/vseed 0.1.40 → 0.1.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs +3 -3
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/builder/builder/builder.d.ts +2788 -286
- package/dist/esm/pipeline/advanced/chart/pipeline/column.js +3 -2
- package/dist/esm/pipeline/advanced/chart/pipeline/column.js.map +1 -1
- package/dist/esm/pipeline/advanced/chart/pipeline/scatter.js +3 -2
- package/dist/esm/pipeline/advanced/chart/pipeline/scatter.js.map +1 -1
- package/dist/esm/pipeline/advanced/chart/pipes/regressionLine/regressionLine.js +28 -1
- package/dist/esm/pipeline/advanced/chart/pipes/regressionLine/regressionLine.js.map +1 -1
- package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithBoxplotEncoding.js +0 -1
- package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithBoxplotEncoding.js.map +1 -1
- package/dist/esm/pipeline/spec/chart/pipeline/column.js +5 -3
- package/dist/esm/pipeline/spec/chart/pipeline/column.js.map +1 -1
- package/dist/esm/pipeline/spec/chart/pipeline/histogram.js +5 -3
- package/dist/esm/pipeline/spec/chart/pipeline/histogram.js.map +1 -1
- package/dist/esm/pipeline/spec/chart/pipeline/scatter.js +9 -3
- package/dist/esm/pipeline/spec/chart/pipeline/scatter.js.map +1 -1
- package/dist/esm/pipeline/spec/chart/pipes/regressionLine/columnRegressionLine.d.ts +2 -0
- package/dist/esm/pipeline/spec/chart/pipes/regressionLine/columnRegressionLine.js +150 -0
- package/dist/esm/pipeline/spec/chart/pipes/regressionLine/columnRegressionLine.js.map +1 -0
- package/dist/esm/pipeline/spec/chart/pipes/regressionLine/common.d.ts +4 -0
- package/dist/esm/pipeline/spec/chart/pipes/regressionLine/common.js +21 -0
- package/dist/esm/pipeline/spec/chart/pipes/regressionLine/common.js.map +1 -0
- package/dist/esm/pipeline/spec/chart/pipes/regressionLine/ecdfRegressionLine.d.ts +2 -0
- package/dist/esm/pipeline/spec/chart/pipes/regressionLine/ecdfRegressionLine.js +98 -0
- package/dist/esm/pipeline/spec/chart/pipes/regressionLine/ecdfRegressionLine.js.map +1 -0
- package/dist/esm/pipeline/spec/chart/pipes/regressionLine/index.d.ts +4 -1
- package/dist/esm/pipeline/spec/chart/pipes/regressionLine/index.js +4 -1
- package/dist/esm/pipeline/spec/chart/pipes/regressionLine/kdeRegressionLine.d.ts +2 -0
- package/dist/esm/pipeline/spec/chart/pipes/regressionLine/kdeRegressionLine.js +98 -0
- package/dist/esm/pipeline/spec/chart/pipes/regressionLine/kdeRegressionLine.js.map +1 -0
- package/dist/esm/pipeline/spec/chart/pipes/regressionLine/linearRegressionLine.d.ts +16 -0
- package/dist/esm/pipeline/spec/chart/pipes/regressionLine/linearRegressionLine.js +159 -0
- package/dist/esm/pipeline/spec/chart/pipes/regressionLine/linearRegressionLine.js.map +1 -0
- package/dist/esm/theme/common/regressionLine.d.ts +8 -4
- package/dist/esm/theme/common/regressionLine.js +60 -8
- package/dist/esm/theme/common/regressionLine.js.map +1 -1
- package/dist/esm/theme/dark/dark.js +6 -4
- package/dist/esm/theme/dark/dark.js.map +1 -1
- package/dist/esm/theme/light/light.js +6 -4
- package/dist/esm/theme/light/light.js.map +1 -1
- package/dist/esm/types/advancedVSeed.d.ts +908 -37
- package/dist/esm/types/advancedVSeed.js +2 -2
- package/dist/esm/types/advancedVSeed.js.map +1 -1
- package/dist/esm/types/chartType/column/column.d.ts +6 -1
- package/dist/esm/types/chartType/column/zColumn.d.ts +25 -0
- package/dist/esm/types/chartType/column/zColumn.js +2 -1
- package/dist/esm/types/chartType/column/zColumn.js.map +1 -1
- package/dist/esm/types/chartType/histogram/histogram.d.ts +7 -3
- package/dist/esm/types/chartType/histogram/zHistogram.d.ts +19 -4
- package/dist/esm/types/chartType/histogram/zHistogram.js +3 -2
- package/dist/esm/types/chartType/histogram/zHistogram.js.map +1 -1
- package/dist/esm/types/chartType/scatter/scatter.d.ts +21 -1
- package/dist/esm/types/chartType/scatter/zScatter.d.ts +94 -0
- package/dist/esm/types/chartType/scatter/zScatter.js +5 -1
- package/dist/esm/types/chartType/scatter/zScatter.js.map +1 -1
- package/dist/esm/types/properties/config/column.d.ts +132 -2
- package/dist/esm/types/properties/config/column.js +6 -3
- package/dist/esm/types/properties/config/column.js.map +1 -1
- package/dist/esm/types/properties/config/config.d.ts +389 -9
- package/dist/esm/types/properties/config/histogram.d.ts +129 -9
- package/dist/esm/types/properties/config/histogram.js +2 -2
- package/dist/esm/types/properties/config/histogram.js.map +1 -1
- package/dist/esm/types/properties/config/scatter.d.ts +130 -0
- package/dist/esm/types/properties/config/scatter.js +3 -1
- package/dist/esm/types/properties/config/scatter.js.map +1 -1
- package/dist/esm/types/properties/regressionLine/{histogramRegressionLine.d.ts → ecdfRegressionLine.d.ts} +2 -7
- package/dist/esm/types/properties/regressionLine/index.d.ts +7 -2
- package/dist/esm/types/properties/regressionLine/index.js +1 -1
- package/dist/esm/types/properties/regressionLine/kdeRegressionLine.d.ts +40 -0
- package/dist/esm/types/properties/regressionLine/kdeRegressionLine.js +0 -0
- package/dist/esm/types/properties/regressionLine/linearRegressionLine.d.ts +53 -0
- package/dist/esm/types/properties/regressionLine/linearRegressionLine.js +0 -0
- package/dist/esm/types/properties/regressionLine/logisticRegressionLine.d.ts +53 -0
- package/dist/esm/types/properties/regressionLine/logisticRegressionLine.js +0 -0
- package/dist/esm/types/properties/regressionLine/lowessRegressionLine.d.ts +53 -0
- package/dist/esm/types/properties/regressionLine/lowessRegressionLine.js +0 -0
- package/dist/esm/types/properties/regressionLine/polynomialRegressionLine.d.ts +57 -0
- package/dist/esm/types/properties/regressionLine/polynomialRegressionLine.js +0 -0
- package/dist/esm/types/properties/regressionLine/zRegressionLine.d.ts +199 -0
- package/dist/esm/types/properties/regressionLine/zRegressionLine.js +32 -0
- package/dist/esm/types/properties/regressionLine/zRegressionLine.js.map +1 -0
- package/dist/esm/types/properties/theme/customTheme.d.ts +778 -18
- package/dist/esm/types/zVseed.d.ts +138 -4
- package/dist/umd/index.js +1144 -131
- package/dist/umd/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/esm/pipeline/spec/chart/pipes/regressionLine/histogramRegressionLine.d.ts +0 -2
- package/dist/esm/pipeline/spec/chart/pipes/regressionLine/histogramRegressionLine.js +0 -126
- package/dist/esm/pipeline/spec/chart/pipes/regressionLine/histogramRegressionLine.js.map +0 -1
- package/dist/esm/types/properties/regressionLine/zHistogramRegressionLine.d.ts +0 -11
- package/dist/esm/types/properties/regressionLine/zHistogramRegressionLine.js +0 -17
- package/dist/esm/types/properties/regressionLine/zHistogramRegressionLine.js.map +0 -1
- /package/dist/esm/types/properties/regressionLine/{histogramRegressionLine.js → ecdfRegressionLine.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline/spec/chart/pipes/regressionLine/ecdfRegressionLine.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/regressionLine/ecdfRegressionLine.ts"],"sourcesContent":["import type { ICartesianSeries, IChart, IHistogramChartSpec, IVChart } from '@visactor/vchart'\nimport { isNullish, uniqueBy } from 'remeda'\nimport { ecdf, array } from '@visactor/vutils'\nimport type { Datum, Dimension, SpecPipe, Encoding, RegressionLineConfig, EcdfRegressionLine } from 'src/types'\nimport { defaultRegressionLineColor, defaultRegressionLineLabelX, defaultRegressionLineLabelY } from './common'\n\nexport const ecdfRegressionLine: SpecPipe = (spec, context) => {\n const result = { ...spec } as IHistogramChartSpec\n const { advancedVSeed, vseed } = context\n const { chartType, encoding = {} as Encoding, dimensions, regressionLine } = advancedVSeed\n const { dataset } = vseed\n const lineTheme = advancedVSeed.config[chartType as 'histogram']?.regressionLine as RegressionLineConfig\n\n if (!regressionLine || !regressionLine.ecdfRegressionLine) {\n return result\n }\n\n const rowColumnFields = uniqueBy(\n dimensions.filter((dim: Dimension) => dim.encoding === 'row' || dim.encoding === 'column'),\n (item: Dimension) => item.id,\n )\n\n const lineList = array(regressionLine.ecdfRegressionLine)\n\n if (!result.customMark) {\n result.customMark = []\n }\n\n lineList.forEach((line, lineIndex) => {\n const theme = (lineTheme?.ecdfRegressionLine ?? {}) as EcdfRegressionLine\n const { color, lineWidth, lineDash, text, textColor, textFontSize, textFontWeight } = line as EcdfRegressionLine\n\n const childrenMarks: any[] = []\n\n ;(result.customMark as any[]).push({\n type: 'group',\n interactive: false,\n zIndex: 500,\n name: `ecdfRegressionLine-${lineIndex}`,\n style: {\n data: (datum: any, ctx: any) => {\n const vchart = ctx.vchart as IVChart\n const chart = vchart.getChart() as IChart\n const series = chart.getAllSeries().filter((s: any) => s.type === 'bar')\n\n // 直方图使用的是bar系列\n if (series && series.length) {\n const s = series[0] as ICartesianSeries\n const region = s.getRegion().getLayoutStartPoint()\n\n const fieldX = s.fieldX?.[0]\n const scaleY = s.getYAxisHelper().getScale?.(0)\n const viewData = s.getViewData()?.latestData\n\n if (!dataset || !dataset.length || !viewData || !viewData.length || !scaleY) {\n return null\n }\n const simpleData = dataset\n .filter((entry: Datum) => {\n return rowColumnFields.length\n ? rowColumnFields.every((dim: Dimension) => {\n return entry[dim.id] === viewData[0][dim.id]\n })\n : true\n })\n .map((d: Datum) => (d as any)[encoding.value?.[0] as string]) as number[]\n const res = ecdf(simpleData)\n const N = Math.max(3, Math.floor(simpleData.length / 4))\n const lineData = res.evaluateGrid(N)\n const yRange = scaleY.range()\n const y0 = yRange[0]\n const y1 = yRange[yRange.length - 1]\n const scaleR = (e: number) => {\n return y0 + (y1 - y0) * e\n }\n\n const linePoints = lineData.map((ld: Datum) => {\n const d = { [fieldX]: ld.x }\n return {\n x: s.dataToPositionX(d)! + region.x,\n y: scaleR(ld.y as number) + region.y,\n }\n })\n\n return {\n linePoints,\n color: color ?? s.getOption().globalScale.getScale('color')?.scale(s.getSeriesKeys()[0]),\n }\n }\n return null\n },\n },\n children: childrenMarks,\n })\n\n childrenMarks.push({\n type: 'line',\n interactive: false,\n zIndex: 500,\n style: {\n lineWidth: lineWidth ?? theme.lineWidth,\n lineDash: lineDash ?? theme.lineDash,\n stroke: color ?? defaultRegressionLineColor,\n points: (datum: any, ctx: any, opt: any) => {\n const parentNode = opt.mark?._product?.parent\n\n if (parentNode?.attribute?.data) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return parentNode.attribute.data.linePoints\n }\n\n return []\n },\n },\n })\n\n if (!isNullish(text)) {\n childrenMarks.push({\n type: 'text',\n interactive: false,\n zIndex: 500,\n style: {\n textAlign: 'end',\n fill: textColor ?? theme.textColor,\n fontSize: textFontSize ?? theme.textFontSize,\n fontWeight: textFontWeight ?? theme.textFontWeight,\n text: text,\n x: defaultRegressionLineLabelX,\n y: defaultRegressionLineLabelY,\n },\n })\n }\n })\n\n return result\n}\n"],"names":["ecdfRegressionLine","spec","context","result","advancedVSeed","vseed","chartType","encoding","dimensions","regressionLine","dataset","lineTheme","rowColumnFields","uniqueBy","dim","item","lineList","array","line","lineIndex","theme","color","lineWidth","lineDash","text","textColor","textFontSize","textFontWeight","childrenMarks","datum","ctx","vchart","chart","series","s","region","fieldX","scaleY","viewData","simpleData","entry","d","res","ecdf","N","Math","lineData","yRange","y0","y1","scaleR","e","linePoints","ld","defaultRegressionLineColor","opt","parentNode","isNullish","defaultRegressionLineLabelX","defaultRegressionLineLabelY"],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { isNullish, uniqueBy } from "remeda";
|
|
2
|
+
import { array, kde } from "@visactor/vutils";
|
|
3
|
+
import { BinEndMeasureId, BinStartMeasureId } from "../../../../../dataReshape/index.js";
|
|
4
|
+
import { defaultRegressionLineColor, defaultRegressionLineLabelX, defaultRegressionLineLabelY } from "./common.js";
|
|
5
|
+
const kdeRegressionLine = (spec, context)=>{
|
|
6
|
+
const result = {
|
|
7
|
+
...spec
|
|
8
|
+
};
|
|
9
|
+
const { advancedVSeed, vseed } = context;
|
|
10
|
+
const { chartType, encoding = {}, dimensions, regressionLine } = advancedVSeed;
|
|
11
|
+
const { dataset } = vseed;
|
|
12
|
+
const lineTheme = advancedVSeed.config[chartType]?.regressionLine;
|
|
13
|
+
if (!regressionLine || !regressionLine.kdeRegressionLine) return result;
|
|
14
|
+
const rowColumnFields = uniqueBy(dimensions.filter((dim)=>'row' === dim.encoding || 'column' === dim.encoding), (item)=>item.id);
|
|
15
|
+
const lineList = array(regressionLine.kdeRegressionLine);
|
|
16
|
+
if (!result.customMark) result.customMark = [];
|
|
17
|
+
lineList.forEach((line, lineIndex)=>{
|
|
18
|
+
const theme = lineTheme.kdeRegressionLine ?? {};
|
|
19
|
+
const { color, lineWidth, lineDash, text, textColor, textFontSize, textFontWeight } = line;
|
|
20
|
+
const childrenMarks = [];
|
|
21
|
+
result.customMark.push({
|
|
22
|
+
type: 'group',
|
|
23
|
+
interactive: false,
|
|
24
|
+
zIndex: 500,
|
|
25
|
+
name: `kdeRegressionLine-${lineIndex}`,
|
|
26
|
+
style: {
|
|
27
|
+
data: (datum, ctx)=>{
|
|
28
|
+
const vchart = ctx.vchart;
|
|
29
|
+
const chart = vchart.getChart();
|
|
30
|
+
const series = chart.getAllSeries().filter((s)=>'bar' === s.type);
|
|
31
|
+
if (series && series.length) {
|
|
32
|
+
const s = series[0];
|
|
33
|
+
const region = s.getRegion().getLayoutStartPoint();
|
|
34
|
+
const fieldX = s.fieldX?.[0];
|
|
35
|
+
const scaleY = s.getYAxisHelper().getScale?.(0);
|
|
36
|
+
const viewData = s.getViewData()?.latestData;
|
|
37
|
+
if (!dataset || !dataset.length || !viewData || !viewData.length || !scaleY) return null;
|
|
38
|
+
const simpleData = dataset.filter((entry)=>rowColumnFields.length ? rowColumnFields.every((dim)=>entry[dim.id] === viewData[0][dim.id]) : true).map((d)=>d[encoding.value?.[0]]);
|
|
39
|
+
const res = kde(simpleData, {
|
|
40
|
+
bandwidth: Math.abs(viewData[0][BinEndMeasureId] - viewData[0][BinStartMeasureId])
|
|
41
|
+
});
|
|
42
|
+
const N = Math.max(3, Math.floor(simpleData.length / 4));
|
|
43
|
+
const lineData = res.evaluateGrid(N);
|
|
44
|
+
const scaleR = (k)=>scaleY.scale(k * simpleData.length * res.bandwidth);
|
|
45
|
+
const linePoints = lineData.map((ld)=>{
|
|
46
|
+
const d = {
|
|
47
|
+
[fieldX]: ld.x
|
|
48
|
+
};
|
|
49
|
+
return {
|
|
50
|
+
x: s.dataToPositionX(d) + region.x,
|
|
51
|
+
y: scaleR(ld.y) + region.y
|
|
52
|
+
};
|
|
53
|
+
});
|
|
54
|
+
return {
|
|
55
|
+
linePoints,
|
|
56
|
+
color: color ?? s.getOption().globalScale.getScale('color')?.scale(s.getSeriesKeys()[0])
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
children: childrenMarks
|
|
63
|
+
});
|
|
64
|
+
childrenMarks.push({
|
|
65
|
+
type: 'line',
|
|
66
|
+
interactive: false,
|
|
67
|
+
zIndex: 500,
|
|
68
|
+
style: {
|
|
69
|
+
lineWidth: lineWidth ?? theme.lineWidth,
|
|
70
|
+
lineDash: lineDash ?? theme.lineDash,
|
|
71
|
+
stroke: color ?? defaultRegressionLineColor,
|
|
72
|
+
points: (datum, ctx, opt)=>{
|
|
73
|
+
const parentNode = opt.mark?._product?.parent;
|
|
74
|
+
if (parentNode?.attribute?.data) return parentNode.attribute.data.linePoints;
|
|
75
|
+
return [];
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
if (!isNullish(text)) childrenMarks.push({
|
|
80
|
+
type: 'text',
|
|
81
|
+
interactive: false,
|
|
82
|
+
zIndex: 500,
|
|
83
|
+
style: {
|
|
84
|
+
textAlign: 'end',
|
|
85
|
+
fill: textColor ?? theme.textColor,
|
|
86
|
+
fontSize: textFontSize ?? theme.textFontSize,
|
|
87
|
+
fontWeight: textFontWeight ?? theme.textFontWeight,
|
|
88
|
+
text: text,
|
|
89
|
+
x: defaultRegressionLineLabelX,
|
|
90
|
+
y: defaultRegressionLineLabelY
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
return result;
|
|
95
|
+
};
|
|
96
|
+
export { kdeRegressionLine };
|
|
97
|
+
|
|
98
|
+
//# sourceMappingURL=kdeRegressionLine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline/spec/chart/pipes/regressionLine/kdeRegressionLine.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/regressionLine/kdeRegressionLine.ts"],"sourcesContent":["import type { ICartesianSeries, IChart, IHistogramChartSpec, IVChart } from '@visactor/vchart'\nimport type { KDEOptions } from '@visactor/vutils'\nimport { isNullish, uniqueBy } from 'remeda'\nimport { kde, array } from '@visactor/vutils'\nimport { BinEndMeasureId, BinStartMeasureId } from 'src/dataReshape'\nimport type { Datum, Dimension, SpecPipe, Encoding, RegressionLineConfig, KdeRegressionLine } from 'src/types'\nimport { defaultRegressionLineColor, defaultRegressionLineLabelX, defaultRegressionLineLabelY } from './common'\n\nexport const kdeRegressionLine: SpecPipe = (spec, context) => {\n const result = { ...spec } as IHistogramChartSpec\n const { advancedVSeed, vseed } = context\n const { chartType, encoding = {} as Encoding, dimensions, regressionLine } = advancedVSeed\n const { dataset } = vseed\n const lineTheme = advancedVSeed.config[chartType as 'histogram']?.regressionLine as RegressionLineConfig\n\n if (!regressionLine || !regressionLine.kdeRegressionLine) {\n return result\n }\n\n const rowColumnFields = uniqueBy(\n dimensions.filter((dim: Dimension) => dim.encoding === 'row' || dim.encoding === 'column'),\n (item: Dimension) => item.id,\n )\n\n const lineList = array(regressionLine.kdeRegressionLine)\n\n if (!result.customMark) {\n result.customMark = []\n }\n\n lineList.forEach((line, lineIndex) => {\n const theme = (lineTheme.kdeRegressionLine ?? {}) as KdeRegressionLine\n const { color, lineWidth, lineDash, text, textColor, textFontSize, textFontWeight } = line as KdeRegressionLine\n\n const childrenMarks: any[] = []\n\n ;(result.customMark as any[]).push({\n type: 'group',\n interactive: false,\n zIndex: 500,\n name: `kdeRegressionLine-${lineIndex}`,\n style: {\n data: (datum: any, ctx: any) => {\n const vchart = ctx.vchart as IVChart\n const chart = vchart.getChart() as IChart\n const series = chart.getAllSeries().filter((s: any) => s.type === 'bar')\n\n // 直方图使用的是bar系列\n if (series && series.length) {\n const s = series[0] as ICartesianSeries\n const region = s.getRegion().getLayoutStartPoint()\n\n const fieldX = s.fieldX?.[0]\n const scaleY = s.getYAxisHelper().getScale?.(0)\n const viewData = s.getViewData()?.latestData\n\n if (!dataset || !dataset.length || !viewData || !viewData.length || !scaleY) {\n return null\n }\n const simpleData = dataset\n .filter((entry: Datum) => {\n return rowColumnFields.length\n ? rowColumnFields.every((dim: Dimension) => {\n return entry[dim.id] === viewData[0][dim.id]\n })\n : true\n })\n .map((d: Datum) => (d as any)[encoding.value?.[0] as string]) as number[]\n const res = kde(simpleData, {\n bandwidth: Math.abs(viewData[0][BinEndMeasureId] - viewData[0][BinStartMeasureId]),\n } as KDEOptions)\n const N = Math.max(3, Math.floor(simpleData.length / 4))\n const lineData = res.evaluateGrid(N)\n const scaleR = (k: number) => {\n return scaleY.scale(k * simpleData.length * res.bandwidth)\n }\n\n const linePoints = lineData.map((ld: Datum) => {\n const d = { [fieldX]: ld.x }\n return {\n x: s.dataToPositionX(d)! + region.x,\n y: scaleR(ld.y as number) + region.y,\n }\n })\n\n return {\n linePoints,\n color: color ?? s.getOption().globalScale.getScale('color')?.scale(s.getSeriesKeys()[0]),\n }\n }\n return null\n },\n },\n children: childrenMarks,\n })\n\n childrenMarks.push({\n type: 'line',\n interactive: false,\n zIndex: 500,\n style: {\n lineWidth: lineWidth ?? theme.lineWidth,\n lineDash: lineDash ?? theme.lineDash,\n stroke: color ?? defaultRegressionLineColor,\n points: (datum: any, ctx: any, opt: any) => {\n const parentNode = opt.mark?._product?.parent\n\n if (parentNode?.attribute?.data) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return parentNode.attribute.data.linePoints\n }\n\n return []\n },\n },\n })\n\n if (!isNullish(text)) {\n childrenMarks.push({\n type: 'text',\n interactive: false,\n zIndex: 500,\n style: {\n textAlign: 'end',\n fill: textColor ?? theme.textColor,\n fontSize: textFontSize ?? theme.textFontSize,\n fontWeight: textFontWeight ?? theme.textFontWeight,\n text: text,\n x: defaultRegressionLineLabelX,\n y: defaultRegressionLineLabelY,\n },\n })\n }\n })\n\n return result\n}\n"],"names":["kdeRegressionLine","spec","context","result","advancedVSeed","vseed","chartType","encoding","dimensions","regressionLine","dataset","lineTheme","rowColumnFields","uniqueBy","dim","item","lineList","array","line","lineIndex","theme","color","lineWidth","lineDash","text","textColor","textFontSize","textFontWeight","childrenMarks","datum","ctx","vchart","chart","series","s","region","fieldX","scaleY","viewData","simpleData","entry","d","res","kde","Math","BinEndMeasureId","BinStartMeasureId","N","lineData","scaleR","k","linePoints","ld","defaultRegressionLineColor","opt","parentNode","isNullish","defaultRegressionLineLabelX","defaultRegressionLineLabelY"],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Datum, SpecPipe } from '../../../../../types';
|
|
2
|
+
export declare const generateRegressionLinePipe: (type: "linearRegressionLine" | "lowessRegressionLine" | "polynomialRegressionLine" | "logisticRegressionLine", regressionFunction: (arr: Datum[], xAccessor: (d: Datum) => number, yAccessor: (d: Datum) => number, options?: any) => {
|
|
3
|
+
confidenceInterval: (N: number) => {
|
|
4
|
+
lower: number;
|
|
5
|
+
upper: number;
|
|
6
|
+
x: number;
|
|
7
|
+
}[];
|
|
8
|
+
evaluateGrid: (N: number) => {
|
|
9
|
+
x: number;
|
|
10
|
+
y: number;
|
|
11
|
+
}[];
|
|
12
|
+
}, getOptions?: (lineConfig: any) => any) => SpecPipe;
|
|
13
|
+
export declare const linearRegressionLine: SpecPipe;
|
|
14
|
+
export declare const lowessRegressionLine: SpecPipe;
|
|
15
|
+
export declare const polynomialRegressionLine: SpecPipe;
|
|
16
|
+
export declare const logisticRegressionLine: SpecPipe;
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { isNullish } from "remeda";
|
|
2
|
+
import { array, clamper, regressionLinear, regressionLogistic, regressionLowess, regressionPolynomial } from "@visactor/vutils";
|
|
3
|
+
const generateRegressionLinePipe = (type, regressionFunction, getOptions)=>(spec, context)=>{
|
|
4
|
+
const result = {
|
|
5
|
+
...spec
|
|
6
|
+
};
|
|
7
|
+
const { advancedVSeed } = context;
|
|
8
|
+
const { chartType, regressionLine } = advancedVSeed;
|
|
9
|
+
const lineTheme = advancedVSeed.config[chartType]?.regressionLine;
|
|
10
|
+
if (!regressionLine || !regressionLine[type]) return result;
|
|
11
|
+
const lineList = array(regressionLine[type]);
|
|
12
|
+
if (!result.customMark) result.customMark = [];
|
|
13
|
+
lineList.forEach((line, lineIndex)=>{
|
|
14
|
+
const theme = lineTheme.linearRegressionLine ?? {};
|
|
15
|
+
const { color, lineWidth, lineDash, text, textColor, textFontSize, textFontWeight, confidenceIntervalOpacity, confidenceIntervalVisible = theme.confidenceIntervalVisible } = line;
|
|
16
|
+
const childrenMarks = [];
|
|
17
|
+
result.customMark.push({
|
|
18
|
+
type: 'group',
|
|
19
|
+
interactive: false,
|
|
20
|
+
zIndex: 500,
|
|
21
|
+
name: `${type}-${lineIndex}`,
|
|
22
|
+
style: {
|
|
23
|
+
data: (datum, ctx)=>{
|
|
24
|
+
const vchart = ctx.vchart;
|
|
25
|
+
const chart = vchart.getChart();
|
|
26
|
+
const s = chart.getAllSeries()[0];
|
|
27
|
+
if (s) {
|
|
28
|
+
const rect = s.getRegion().getLayoutRect();
|
|
29
|
+
const segments = [];
|
|
30
|
+
if (0 === rect.width || 0 === rect.height) return segments;
|
|
31
|
+
const start = s.getRegion().getLayoutStartPoint();
|
|
32
|
+
const yClamper = clamper(start.y, start.y + rect.height);
|
|
33
|
+
const colorAttrOptions = s.getColorAttribute();
|
|
34
|
+
const groups = s.getSeriesKeys();
|
|
35
|
+
const data = s.getViewData()?.latestData;
|
|
36
|
+
const fieldX = s.fieldX?.[0];
|
|
37
|
+
const fieldY = s.fieldY?.[0];
|
|
38
|
+
if (!groups.length) groups.push(void 0);
|
|
39
|
+
groups.forEach((group)=>{
|
|
40
|
+
const groupData = data.filter((d)=>d[colorAttrOptions?.field] === group);
|
|
41
|
+
if (!groupData.length) return;
|
|
42
|
+
const { confidenceInterval, evaluateGrid } = regressionFunction(groupData, (datum)=>datum?.[fieldX], (datum)=>datum?.[fieldY], getOptions?.(line));
|
|
43
|
+
const N = Math.max(3, Math.floor(groupData.length / 4));
|
|
44
|
+
const mainColor = color ?? colorAttrOptions?.scale?.scale(group);
|
|
45
|
+
const lineData = evaluateGrid(N);
|
|
46
|
+
const linePoints = lineData.map((ld)=>{
|
|
47
|
+
const d = {
|
|
48
|
+
[fieldX]: ld.x,
|
|
49
|
+
[fieldY]: ld.y
|
|
50
|
+
};
|
|
51
|
+
return {
|
|
52
|
+
x: s.dataToPositionX(d) + start.x,
|
|
53
|
+
y: yClamper(s.dataToPositionY(d) + start.y)
|
|
54
|
+
};
|
|
55
|
+
});
|
|
56
|
+
segments.push({
|
|
57
|
+
color: mainColor,
|
|
58
|
+
linePoints
|
|
59
|
+
});
|
|
60
|
+
if (confidenceIntervalVisible) {
|
|
61
|
+
const intervalData = confidenceInterval(N);
|
|
62
|
+
const areaPoints = intervalData.map((datum)=>{
|
|
63
|
+
const d = {
|
|
64
|
+
[fieldX]: datum.x,
|
|
65
|
+
[fieldY]: datum.lower
|
|
66
|
+
};
|
|
67
|
+
return {
|
|
68
|
+
x: s.dataToPositionX(d) + start.x,
|
|
69
|
+
y: yClamper(s.dataToPositionY(d) + start.y),
|
|
70
|
+
y1: yClamper(s.dataToPositionY({
|
|
71
|
+
[fieldY]: datum.upper
|
|
72
|
+
}) + start.y)
|
|
73
|
+
};
|
|
74
|
+
});
|
|
75
|
+
segments[segments.length - 1].areaPoints = areaPoints;
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
return segments;
|
|
79
|
+
}
|
|
80
|
+
return [];
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
children: childrenMarks
|
|
84
|
+
});
|
|
85
|
+
if (confidenceIntervalVisible) childrenMarks.push({
|
|
86
|
+
type: 'area',
|
|
87
|
+
interactive: false,
|
|
88
|
+
zIndex: 500,
|
|
89
|
+
style: {
|
|
90
|
+
lineWidth: lineWidth ?? theme.lineWidth,
|
|
91
|
+
lineDash: lineDash ?? theme.lineDash,
|
|
92
|
+
fillOpacity: confidenceIntervalOpacity ?? theme.confidenceIntervalOpacity,
|
|
93
|
+
fill: 'red',
|
|
94
|
+
segments: (datum, ctx, opt)=>{
|
|
95
|
+
const parentNode = opt.mark?._product?.parent;
|
|
96
|
+
if (parentNode?.attribute?.data?.length) return parentNode.attribute.data.map((d)=>({
|
|
97
|
+
points: d.areaPoints ?? [],
|
|
98
|
+
fill: d.color
|
|
99
|
+
}));
|
|
100
|
+
return [];
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
childrenMarks.push({
|
|
105
|
+
type: 'line',
|
|
106
|
+
interactive: false,
|
|
107
|
+
zIndex: 500,
|
|
108
|
+
style: {
|
|
109
|
+
lineWidth: lineWidth ?? theme.lineWidth,
|
|
110
|
+
lineDash: lineDash ?? theme.lineDash,
|
|
111
|
+
stroke: 'red',
|
|
112
|
+
segments: (datum, ctx, opt)=>{
|
|
113
|
+
const parentNode = opt.mark?._product?.parent;
|
|
114
|
+
if (parentNode?.attribute?.data?.length) return parentNode.attribute.data.map((d)=>({
|
|
115
|
+
points: d.linePoints,
|
|
116
|
+
stroke: d.color
|
|
117
|
+
}));
|
|
118
|
+
return [];
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
if (!isNullish(text)) childrenMarks.push({
|
|
123
|
+
type: 'text',
|
|
124
|
+
interactive: false,
|
|
125
|
+
zIndex: 500,
|
|
126
|
+
style: {
|
|
127
|
+
textAlign: 'end',
|
|
128
|
+
fill: textColor ?? theme.textColor,
|
|
129
|
+
fontSize: textFontSize ?? theme.textFontSize,
|
|
130
|
+
fontWeight: textFontWeight ?? theme.textFontWeight,
|
|
131
|
+
text: text,
|
|
132
|
+
x: (datum, ctx, opt)=>{
|
|
133
|
+
const parentNode = opt.mark?._product?.parent;
|
|
134
|
+
if (parentNode?.attribute?.data?.length) {
|
|
135
|
+
const point = parentNode.attribute.data[parentNode.attribute.data.length - 1].linePoints;
|
|
136
|
+
return point[point.length - 1]?.x;
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
y: (datum, ctx, opt)=>{
|
|
140
|
+
const parentNode = opt.mark?._product?.parent;
|
|
141
|
+
if (parentNode?.attribute?.data?.length) {
|
|
142
|
+
const point = parentNode.attribute.data[parentNode.attribute.data.length - 1].linePoints;
|
|
143
|
+
return point[point.length - 1]?.y;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
return result;
|
|
150
|
+
};
|
|
151
|
+
const linearRegressionLine = generateRegressionLinePipe('linearRegressionLine', regressionLinear);
|
|
152
|
+
const lowessRegressionLine = generateRegressionLinePipe('lowessRegressionLine', regressionLowess);
|
|
153
|
+
const polynomialRegressionLine = generateRegressionLinePipe('polynomialRegressionLine', regressionPolynomial, (lineConfig)=>({
|
|
154
|
+
degree: lineConfig.degree ?? 2
|
|
155
|
+
}));
|
|
156
|
+
const logisticRegressionLine = generateRegressionLinePipe('logisticRegressionLine', regressionLogistic);
|
|
157
|
+
export { generateRegressionLinePipe, linearRegressionLine, logisticRegressionLine, lowessRegressionLine, polynomialRegressionLine };
|
|
158
|
+
|
|
159
|
+
//# sourceMappingURL=linearRegressionLine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline/spec/chart/pipes/regressionLine/linearRegressionLine.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/regressionLine/linearRegressionLine.ts"],"sourcesContent":["import type { ICartesianSeries, IChart, IScatterChartSpec, IVChart } from '@visactor/vchart'\nimport { isNullish } from 'remeda'\nimport {\n array,\n clamper,\n regressionLinear,\n regressionLowess,\n regressionPolynomial,\n regressionLogistic,\n} from '@visactor/vutils'\nimport type {\n Datum,\n SpecPipe,\n RegressionLineConfig,\n LinearRegressionLine,\n SpecPipelineContext,\n PolynomialRegressionLine,\n} from 'src/types'\n\nexport const generateRegressionLinePipe = (\n type: 'linearRegressionLine' | 'lowessRegressionLine' | 'polynomialRegressionLine' | 'logisticRegressionLine',\n regressionFunction: (\n arr: Datum[],\n xAccessor: (d: Datum) => number,\n yAccessor: (d: Datum) => number,\n options?: any,\n ) => {\n confidenceInterval: (N: number) => { lower: number; upper: number; x: number }[]\n evaluateGrid: (N: number) => { x: number; y: number }[]\n },\n getOptions?: (lineConfig: any) => any,\n): SpecPipe => {\n return ((spec: Partial<IScatterChartSpec>, context: SpecPipelineContext): Partial<IScatterChartSpec> => {\n const result = { ...spec }\n const { advancedVSeed } = context\n const { chartType, regressionLine } = advancedVSeed\n const lineTheme = advancedVSeed.config[chartType as 'scatter']?.regressionLine as RegressionLineConfig\n\n if (!regressionLine || !regressionLine[type]) {\n return result\n }\n\n const lineList = array(regressionLine[type])\n\n if (!result.customMark) {\n result.customMark = []\n }\n\n lineList.forEach((line, lineIndex) => {\n const theme = (lineTheme.linearRegressionLine ?? {}) as LinearRegressionLine\n const {\n color,\n lineWidth,\n lineDash,\n text,\n textColor,\n textFontSize,\n textFontWeight,\n confidenceIntervalOpacity,\n confidenceIntervalVisible = theme.confidenceIntervalVisible,\n } = line as LinearRegressionLine\n\n const childrenMarks: any[] = []\n\n ;(result.customMark as any[]).push({\n type: 'group',\n interactive: false,\n zIndex: 500,\n name: `${type}-${lineIndex}`,\n style: {\n data: (datum: any, ctx: any) => {\n const vchart = ctx.vchart as IVChart\n const chart = vchart.getChart() as IChart\n const s = chart.getAllSeries()[0] as ICartesianSeries\n\n if (s) {\n const rect = s.getRegion().getLayoutRect()\n const segments: {\n areaPoints?: { x: number; y: number; y1: number }[]\n linePoints: { x: number; y: number }[]\n color: string\n }[] = []\n\n if (rect.width === 0 || rect.height === 0) {\n return segments\n }\n\n const start = s.getRegion().getLayoutStartPoint()\n const yClamper = clamper(start.y, start.y + rect.height)\n const colorAttrOptions = s.getColorAttribute()\n const groups: (string | undefined)[] = s.getSeriesKeys()\n const data = s.getViewData()?.latestData as Datum[]\n const fieldX = s.fieldX?.[0]\n const fieldY = s.fieldY?.[0]\n\n if (!groups.length) {\n groups.push(undefined)\n }\n\n groups.forEach((group) => {\n const groupData = data.filter((d: Datum) => d[colorAttrOptions?.field] === group)\n\n if (!groupData.length) {\n return\n }\n const { confidenceInterval, evaluateGrid } = regressionFunction(\n groupData,\n (datum: Datum) => datum?.[fieldX],\n (datum: Datum) => datum?.[fieldY],\n getOptions?.(line),\n )\n const N = Math.max(3, Math.floor(groupData.length / 4))\n const mainColor = color ?? colorAttrOptions?.scale?.scale(group)\n\n const lineData = evaluateGrid(N)\n const linePoints = lineData.map((ld: Datum) => {\n const d = { [fieldX]: ld.x, [fieldY]: ld.y }\n return {\n x: s.dataToPositionX(d)! + start.x,\n y: yClamper(s.dataToPositionY(d)! + start.y),\n }\n })\n\n segments.push({\n color: mainColor,\n linePoints,\n })\n\n if (confidenceIntervalVisible) {\n const intervalData = confidenceInterval(N)\n const areaPoints = intervalData.map((datum: Datum) => {\n const d = { [fieldX]: datum.x, [fieldY]: datum.lower }\n return {\n x: s.dataToPositionX(d)! + start.x,\n y: yClamper(s.dataToPositionY(d)! + start.y),\n y1: yClamper(s.dataToPositionY({ [fieldY]: datum.upper })! + start.y),\n }\n })\n\n segments[segments.length - 1].areaPoints = areaPoints\n }\n })\n\n return segments\n }\n return []\n },\n },\n children: childrenMarks,\n })\n\n if (confidenceIntervalVisible) {\n childrenMarks.push({\n type: 'area',\n interactive: false,\n zIndex: 500,\n style: {\n lineWidth: lineWidth ?? theme.lineWidth,\n lineDash: lineDash ?? theme.lineDash,\n fillOpacity: confidenceIntervalOpacity ?? theme.confidenceIntervalOpacity,\n fill: 'red', // vrender bug,必须要设置一个全局的fill,才会绘制\n segments: (datum: any, ctx: any, opt: any) => {\n const parentNode = opt.mark?._product?.parent\n\n if (parentNode?.attribute?.data?.length) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call\n return parentNode.attribute.data.map((d: any) => {\n return {\n points: d.areaPoints ?? [],\n fill: d.color,\n }\n })\n }\n\n return []\n },\n },\n })\n }\n\n childrenMarks.push({\n type: 'line',\n interactive: false,\n zIndex: 500,\n style: {\n lineWidth: lineWidth ?? theme.lineWidth,\n lineDash: lineDash ?? theme.lineDash,\n stroke: 'red', // vrender bug,必须要设置一个全局的stroke,才会绘制\n segments: (datum: any, ctx: any, opt: any) => {\n const parentNode = opt.mark?._product?.parent\n\n if (parentNode?.attribute?.data?.length) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call\n return parentNode.attribute.data.map((d: any) => {\n return {\n points: d.linePoints,\n stroke: d.color,\n }\n })\n }\n\n return []\n },\n },\n })\n\n if (!isNullish(text)) {\n childrenMarks.push({\n type: 'text',\n interactive: false,\n zIndex: 500,\n style: {\n textAlign: 'end',\n fill: textColor ?? theme.textColor,\n fontSize: textFontSize ?? theme.textFontSize,\n fontWeight: textFontWeight ?? theme.textFontWeight,\n text: text,\n x: (datum: any, ctx: any, opt: any) => {\n const parentNode = opt.mark?._product?.parent\n\n if (parentNode?.attribute?.data?.length) {\n const point = parentNode.attribute.data[parentNode.attribute.data.length - 1].linePoints\n return point[point.length - 1]?.x\n }\n\n return undefined\n },\n y: (datum: any, ctx: any, opt: any) => {\n const parentNode = opt.mark?._product?.parent\n\n if (parentNode?.attribute?.data?.length) {\n const point = parentNode.attribute.data[parentNode.attribute.data.length - 1].linePoints\n return point[point.length - 1]?.y\n }\n\n return undefined\n },\n },\n })\n }\n })\n\n return result\n }) as SpecPipe\n}\n\nexport const linearRegressionLine: SpecPipe = generateRegressionLinePipe('linearRegressionLine', regressionLinear)\nexport const lowessRegressionLine: SpecPipe = generateRegressionLinePipe('lowessRegressionLine', regressionLowess)\nexport const polynomialRegressionLine: SpecPipe = generateRegressionLinePipe(\n 'polynomialRegressionLine',\n regressionPolynomial,\n (lineConfig: PolynomialRegressionLine) => {\n return { degree: lineConfig.degree ?? 2 }\n },\n)\nexport const logisticRegressionLine: SpecPipe = generateRegressionLinePipe('logisticRegressionLine', regressionLogistic)\n"],"names":["generateRegressionLinePipe","type","regressionFunction","getOptions","spec","context","result","advancedVSeed","chartType","regressionLine","lineTheme","lineList","array","line","lineIndex","theme","color","lineWidth","lineDash","text","textColor","textFontSize","textFontWeight","confidenceIntervalOpacity","confidenceIntervalVisible","childrenMarks","datum","ctx","vchart","chart","s","rect","segments","start","yClamper","clamper","colorAttrOptions","groups","data","fieldX","fieldY","undefined","group","groupData","d","confidenceInterval","evaluateGrid","N","Math","mainColor","lineData","linePoints","ld","intervalData","areaPoints","opt","parentNode","isNullish","point","linearRegressionLine","regressionLinear","lowessRegressionLine","regressionLowess","polynomialRegressionLine","regressionPolynomial","lineConfig","logisticRegressionLine","regressionLogistic"],"mappings":"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"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare const
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import type { RegressionLineConfig } from '../../types/properties/regressionLine';
|
|
2
|
+
export declare const getDefaultRegressionLine: () => {
|
|
3
|
+
lineWidth: number;
|
|
4
|
+
textFontSize: number;
|
|
5
|
+
textFontWeight: number;
|
|
6
|
+
};
|
|
7
|
+
export declare const getLightRegressionLine: () => Partial<RegressionLineConfig>;
|
|
8
|
+
export declare const getDarkRegressionLine: () => Partial<RegressionLineConfig>;
|
|
@@ -1,16 +1,68 @@
|
|
|
1
|
-
const
|
|
1
|
+
const getDefaultRegressionLine = ()=>({
|
|
2
2
|
lineWidth: 2,
|
|
3
3
|
textFontSize: 12,
|
|
4
4
|
textFontWeight: 400
|
|
5
5
|
});
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
const getLightRegressionLine = ()=>({
|
|
7
|
+
kdeRegressionLine: {
|
|
8
|
+
...getDefaultRegressionLine(),
|
|
9
|
+
textColor: '#364159'
|
|
10
|
+
},
|
|
11
|
+
ecdfRegressionLine: {
|
|
12
|
+
...getDefaultRegressionLine(),
|
|
13
|
+
textColor: '#364159'
|
|
14
|
+
},
|
|
15
|
+
linearRegressionLine: {
|
|
16
|
+
...getDefaultRegressionLine(),
|
|
17
|
+
textColor: '#364159',
|
|
18
|
+
confidenceIntervalOpacity: 0.2
|
|
19
|
+
},
|
|
20
|
+
lowessRegressionLine: {
|
|
21
|
+
...getDefaultRegressionLine(),
|
|
22
|
+
textColor: '#364159',
|
|
23
|
+
confidenceIntervalOpacity: 0.2
|
|
24
|
+
},
|
|
25
|
+
polynomialRegressionLine: {
|
|
26
|
+
...getDefaultRegressionLine(),
|
|
27
|
+
textColor: '#364159',
|
|
28
|
+
confidenceIntervalOpacity: 0.2
|
|
29
|
+
},
|
|
30
|
+
logisticRegressionLine: {
|
|
31
|
+
...getDefaultRegressionLine(),
|
|
32
|
+
textColor: '#364159',
|
|
33
|
+
confidenceIntervalOpacity: 0.2
|
|
34
|
+
}
|
|
9
35
|
});
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
36
|
+
const getDarkRegressionLine = ()=>({
|
|
37
|
+
kdeRegressionLine: {
|
|
38
|
+
...getDefaultRegressionLine(),
|
|
39
|
+
textColor: '#FFFFFF'
|
|
40
|
+
},
|
|
41
|
+
ecdfRegressionLine: {
|
|
42
|
+
...getDefaultRegressionLine(),
|
|
43
|
+
textColor: '#FFFFFF'
|
|
44
|
+
},
|
|
45
|
+
linearRegressionLine: {
|
|
46
|
+
...getDefaultRegressionLine(),
|
|
47
|
+
textColor: '#FFFFFF',
|
|
48
|
+
confidenceIntervalOpacity: 0.2
|
|
49
|
+
},
|
|
50
|
+
lowessRegressionLine: {
|
|
51
|
+
...getDefaultRegressionLine(),
|
|
52
|
+
textColor: '#FFFFFF',
|
|
53
|
+
confidenceIntervalOpacity: 0.2
|
|
54
|
+
},
|
|
55
|
+
polynomialRegressionLine: {
|
|
56
|
+
...getDefaultRegressionLine(),
|
|
57
|
+
textColor: '#FFFFFF',
|
|
58
|
+
confidenceIntervalOpacity: 0.2
|
|
59
|
+
},
|
|
60
|
+
logisticRegressionLine: {
|
|
61
|
+
...getDefaultRegressionLine(),
|
|
62
|
+
textColor: '#FFFFFF',
|
|
63
|
+
confidenceIntervalOpacity: 0.2
|
|
64
|
+
}
|
|
13
65
|
});
|
|
14
|
-
export {
|
|
66
|
+
export { getDarkRegressionLine, getDefaultRegressionLine, getLightRegressionLine };
|
|
15
67
|
|
|
16
68
|
//# sourceMappingURL=regressionLine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme/common/regressionLine.js","sources":["webpack://@visactor/vseed/./src/theme/common/regressionLine.ts"],"sourcesContent":["import type {
|
|
1
|
+
{"version":3,"file":"theme/common/regressionLine.js","sources":["webpack://@visactor/vseed/./src/theme/common/regressionLine.ts"],"sourcesContent":["import type { RegressionLineConfig } from 'src/types/properties/regressionLine'\n\nexport const getDefaultRegressionLine = () => {\n return {\n lineWidth: 2,\n textFontSize: 12,\n textFontWeight: 400,\n }\n}\n\nexport const getLightRegressionLine = (): Partial<RegressionLineConfig> => {\n return {\n kdeRegressionLine: {\n ...getDefaultRegressionLine(),\n textColor: '#364159',\n },\n ecdfRegressionLine: {\n ...getDefaultRegressionLine(),\n textColor: '#364159',\n },\n linearRegressionLine: {\n ...getDefaultRegressionLine(),\n textColor: '#364159',\n confidenceIntervalOpacity: 0.2,\n },\n lowessRegressionLine: {\n ...getDefaultRegressionLine(),\n textColor: '#364159',\n confidenceIntervalOpacity: 0.2,\n },\n polynomialRegressionLine: {\n ...getDefaultRegressionLine(),\n textColor: '#364159',\n confidenceIntervalOpacity: 0.2,\n },\n logisticRegressionLine: {\n ...getDefaultRegressionLine(),\n textColor: '#364159',\n confidenceIntervalOpacity: 0.2,\n },\n }\n}\n\nexport const getDarkRegressionLine = (): Partial<RegressionLineConfig> => {\n return {\n kdeRegressionLine: {\n ...getDefaultRegressionLine(),\n textColor: '#FFFFFF',\n },\n ecdfRegressionLine: {\n ...getDefaultRegressionLine(),\n textColor: '#FFFFFF',\n },\n linearRegressionLine: {\n ...getDefaultRegressionLine(),\n textColor: '#FFFFFF',\n confidenceIntervalOpacity: 0.2,\n },\n lowessRegressionLine: {\n ...getDefaultRegressionLine(),\n textColor: '#FFFFFF',\n confidenceIntervalOpacity: 0.2,\n },\n polynomialRegressionLine: {\n ...getDefaultRegressionLine(),\n textColor: '#FFFFFF',\n confidenceIntervalOpacity: 0.2,\n },\n logisticRegressionLine: {\n ...getDefaultRegressionLine(),\n textColor: '#FFFFFF',\n confidenceIntervalOpacity: 0.2,\n },\n }\n}\n"],"names":["getDefaultRegressionLine","getLightRegressionLine","getDarkRegressionLine"],"mappings":"AAEO,MAAMA,2BAA2B,IAC/B;QACL,WAAW;QACX,cAAc;QACd,gBAAgB;IAClB;AAGK,MAAMC,yBAAyB,IAC7B;QACL,mBAAmB;YACjB,GAAGD,0BAA0B;YAC7B,WAAW;QACb;QACA,oBAAoB;YAClB,GAAGA,0BAA0B;YAC7B,WAAW;QACb;QACA,sBAAsB;YACpB,GAAGA,0BAA0B;YAC7B,WAAW;YACX,2BAA2B;QAC7B;QACA,sBAAsB;YACpB,GAAGA,0BAA0B;YAC7B,WAAW;YACX,2BAA2B;QAC7B;QACA,0BAA0B;YACxB,GAAGA,0BAA0B;YAC7B,WAAW;YACX,2BAA2B;QAC7B;QACA,wBAAwB;YACtB,GAAGA,0BAA0B;YAC7B,WAAW;YACX,2BAA2B;QAC7B;IACF;AAGK,MAAME,wBAAwB,IAC5B;QACL,mBAAmB;YACjB,GAAGF,0BAA0B;YAC7B,WAAW;QACb;QACA,oBAAoB;YAClB,GAAGA,0BAA0B;YAC7B,WAAW;QACb;QACA,sBAAsB;YACpB,GAAGA,0BAA0B;YAC7B,WAAW;YACX,2BAA2B;QAC7B;QACA,sBAAsB;YACpB,GAAGA,0BAA0B;YAC7B,WAAW;YACX,2BAA2B;QAC7B;QACA,0BAA0B;YACxB,GAAGA,0BAA0B;YAC7B,WAAW;YACX,2BAA2B;QAC7B;QACA,wBAAwB;YACtB,GAAGA,0BAA0B;YAC7B,WAAW;YACX,2BAA2B;QAC7B;IACF"}
|
|
@@ -4,7 +4,7 @@ import { getDarkBandAxis, getDarkLinearAxis } from "../common/axes.js";
|
|
|
4
4
|
import { getDarkAnnotation } from "../common/annotaion.js";
|
|
5
5
|
import { getDarkFunnelTransformTheme } from "../common/funnelTransform.js";
|
|
6
6
|
import { getDarkHeatmapCellTheme } from "../common/heatmapCell.js";
|
|
7
|
-
import {
|
|
7
|
+
import { getDarkRegressionLine } from "../common/regressionLine.js";
|
|
8
8
|
const darkTheme = ()=>{
|
|
9
9
|
const linearAxis = getDarkLinearAxis();
|
|
10
10
|
const bandAxis = getDarkBandAxis();
|
|
@@ -55,7 +55,8 @@ const darkTheme = ()=>{
|
|
|
55
55
|
0
|
|
56
56
|
],
|
|
57
57
|
pivotGrid: getDarkPivotChartGridConfig(),
|
|
58
|
-
annotation: getDarkAnnotation()
|
|
58
|
+
annotation: getDarkAnnotation(),
|
|
59
|
+
regressionLine: getDarkRegressionLine()
|
|
59
60
|
},
|
|
60
61
|
columnParallel: {
|
|
61
62
|
...baseConfig,
|
|
@@ -170,7 +171,8 @@ const darkTheme = ()=>{
|
|
|
170
171
|
showValuePercent: false
|
|
171
172
|
},
|
|
172
173
|
pivotGrid: getDarkPivotChartGridConfig(),
|
|
173
|
-
annotation: getDarkAnnotation()
|
|
174
|
+
annotation: getDarkAnnotation(),
|
|
175
|
+
regressionLine: getDarkRegressionLine()
|
|
174
176
|
},
|
|
175
177
|
dualAxis: {
|
|
176
178
|
...baseConfig,
|
|
@@ -253,7 +255,7 @@ const darkTheme = ()=>{
|
|
|
253
255
|
crosshairRect: crosshairRect,
|
|
254
256
|
pivotGrid: getDarkPivotChartGridConfig(),
|
|
255
257
|
annotation: getDarkAnnotation(),
|
|
256
|
-
|
|
258
|
+
regressionLine: getDarkRegressionLine()
|
|
257
259
|
},
|
|
258
260
|
boxPlot: {
|
|
259
261
|
...baseConfig,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme/dark/dark.js","sources":["webpack://@visactor/vseed/./src/theme/dark/dark.ts"],"sourcesContent":["import type { CustomThemeConfig, YBandAxis } from 'src/types'\nimport {\n getDarkColor,\n getDarkCrosshairLine,\n getDarkCrosshairRect,\n getDarkTableConfig,\n getDefaultLegend,\n getDarkPivotChartGridConfig,\n getDarkLabel,\n} from '../common'\nimport { getDefaultTooltip } from '../common/tooltip'\nimport { getDarkBandAxis, getDarkLinearAxis } from '../common/axes'\nimport { getDarkAnnotation } from '../common/annotaion'\nimport { getDarkFunnelTransformTheme } from '../common/funnelTransform'\nimport { getDarkHeatmapCellTheme } from '../common/heatmapCell'\nimport { getDarkHistogramRegressionLine } from '../common/regressionLine'\n\nexport const darkTheme = (): CustomThemeConfig => {\n const linearAxis = getDarkLinearAxis()\n const bandAxis = getDarkBandAxis()\n const barBandAxis: YBandAxis = {\n ...bandAxis,\n labelAutoHide: false,\n labelAutoHideGap: 1,\n labelAutoLimit: false,\n labelAutoLimitLength: undefined,\n labelAutoRotate: false,\n labelAutoRotateAngleRange: [0, -45, -90],\n }\n const crosshairLine = getDarkCrosshairLine()\n const crosshairRect = getDarkCrosshairRect()\n\n const baseConfig = {\n backgroundColor: 'transparent',\n color: getDarkColor(),\n label: getDarkLabel(),\n legend: getDefaultLegend(),\n tooltip: getDefaultTooltip(),\n }\n\n const tableConfig = getDarkTableConfig()\n\n return {\n config: {\n table: tableConfig,\n pivotTable: tableConfig,\n\n // cartesian\n line: {\n ...baseConfig,\n xAxis: bandAxis,\n yAxis: linearAxis,\n crosshairLine: crosshairLine,\n pivotGrid: getDarkPivotChartGridConfig(),\n annotation: getDarkAnnotation(),\n },\n column: {\n ...baseConfig,\n\n xAxis: bandAxis,\n yAxis: linearAxis,\n crosshairRect: crosshairRect,\n stackCornerRadius: [4, 4, 0, 0],\n pivotGrid: getDarkPivotChartGridConfig(),\n annotation: getDarkAnnotation(),\n },\n columnParallel: {\n ...baseConfig,\n\n xAxis: bandAxis,\n yAxis: linearAxis,\n crosshairRect: crosshairRect,\n stackCornerRadius: [4, 4, 0, 0],\n pivotGrid: getDarkPivotChartGridConfig(),\n annotation: getDarkAnnotation(),\n },\n columnPercent: {\n ...baseConfig,\n\n xAxis: bandAxis,\n yAxis: linearAxis,\n crosshairRect: crosshairRect,\n stackCornerRadius: [4, 4, 0, 0],\n pivotGrid: getDarkPivotChartGridConfig(),\n annotation: getDarkAnnotation(),\n },\n bar: {\n ...baseConfig,\n\n xAxis: linearAxis,\n yAxis: barBandAxis,\n crosshairRect: crosshairRect,\n stackCornerRadius: [0, 4, 4, 0],\n pivotGrid: getDarkPivotChartGridConfig(),\n annotation: getDarkAnnotation(),\n },\n barParallel: {\n ...baseConfig,\n\n xAxis: linearAxis,\n yAxis: barBandAxis,\n crosshairRect: crosshairRect,\n stackCornerRadius: [0, 4, 4, 0],\n pivotGrid: getDarkPivotChartGridConfig(),\n annotation: getDarkAnnotation(),\n },\n barPercent: {\n ...baseConfig,\n\n xAxis: linearAxis,\n yAxis: barBandAxis,\n crosshairRect: crosshairRect,\n stackCornerRadius: [0, 4, 4, 0],\n pivotGrid: getDarkPivotChartGridConfig(),\n annotation: getDarkAnnotation(),\n },\n area: {\n ...baseConfig,\n\n xAxis: bandAxis,\n yAxis: linearAxis,\n crosshairLine: crosshairLine,\n pivotGrid: getDarkPivotChartGridConfig(),\n annotation: getDarkAnnotation(),\n },\n areaPercent: {\n ...baseConfig,\n\n xAxis: bandAxis,\n yAxis: linearAxis,\n crosshairLine: crosshairLine,\n pivotGrid: getDarkPivotChartGridConfig(),\n annotation: getDarkAnnotation(),\n },\n scatter: {\n ...baseConfig,\n crosshairLine,\n sizeRange: [8, 24],\n xAxis: {\n ...linearAxis,\n line: {\n ...linearAxis.line,\n visible: true,\n },\n },\n yAxis: {\n ...linearAxis,\n line: {\n ...linearAxis.line,\n visible: true,\n },\n },\n label: {\n ...baseConfig.label,\n showValue: false,\n showValuePercent: false,\n },\n pivotGrid: getDarkPivotChartGridConfig(),\n annotation: getDarkAnnotation(),\n },\n dualAxis: {\n ...baseConfig,\n xAxis: bandAxis,\n primaryYAxis: linearAxis,\n secondaryYAxis: { ...linearAxis, grid: { visible: false } },\n dualChartType: {\n primary: 'column',\n secondary: 'line',\n },\n crosshairRect,\n pivotGrid: getDarkPivotChartGridConfig(),\n annotation: getDarkAnnotation(),\n },\n // polar\n pie: {\n ...baseConfig,\n label: {\n ...baseConfig.label,\n showValuePercent: true,\n labelLayout: 'labelLine',\n showDimension: true,\n },\n pivotGrid: getDarkPivotChartGridConfig(),\n },\n donut: {\n ...baseConfig,\n label: {\n ...baseConfig.label,\n showValuePercent: true,\n labelLayout: 'labelLine',\n showDimension: true,\n },\n pivotGrid: getDarkPivotChartGridConfig(),\n },\n radar: {\n ...baseConfig,\n pivotGrid: getDarkPivotChartGridConfig(),\n },\n rose: {\n ...baseConfig,\n label: {\n ...baseConfig.label,\n showValuePercent: true,\n showDimension: true,\n },\n pivotGrid: getDarkPivotChartGridConfig(),\n },\n roseParallel: {\n ...baseConfig,\n label: {\n ...baseConfig.label,\n showValuePercent: true,\n showDimension: true,\n },\n\n pivotGrid: getDarkPivotChartGridConfig(),\n },\n // other\n funnel: {\n ...baseConfig,\n transform: getDarkFunnelTransformTheme(),\n\n pivotGrid: getDarkPivotChartGridConfig(),\n },\n heatmap: {\n ...baseConfig,\n label: {\n ...baseConfig.label,\n labelColorSmartInvert: true,\n },\n\n cell: getDarkHeatmapCellTheme(),\n pivotGrid: getDarkPivotChartGridConfig(),\n },\n histogram: {\n ...baseConfig,\n\n xAxis: linearAxis,\n yAxis: linearAxis,\n crosshairRect: crosshairRect,\n pivotGrid: getDarkPivotChartGridConfig(),\n annotation: getDarkAnnotation(),\n histogramRegressionLine: getDarkHistogramRegressionLine(),\n },\n boxPlot: {\n ...baseConfig,\n\n xAxis: bandAxis,\n yAxis: linearAxis,\n crosshairRect: crosshairRect,\n pivotGrid: getDarkPivotChartGridConfig(),\n annotation: getDarkAnnotation(),\n },\n },\n }\n}\n"],"names":["darkTheme","linearAxis","getDarkLinearAxis","bandAxis","getDarkBandAxis","barBandAxis","undefined","crosshairLine","getDarkCrosshairLine","crosshairRect","getDarkCrosshairRect","baseConfig","getDarkColor","getDarkLabel","getDefaultLegend","getDefaultTooltip","tableConfig","getDarkTableConfig","getDarkPivotChartGridConfig","getDarkAnnotation","getDarkFunnelTransformTheme","getDarkHeatmapCellTheme","getDarkHistogramRegressionLine"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"theme/dark/dark.js","sources":["webpack://@visactor/vseed/./src/theme/dark/dark.ts"],"sourcesContent":["import type { CustomThemeConfig, YBandAxis } from 'src/types'\nimport {\n getDarkColor,\n getDarkCrosshairLine,\n getDarkCrosshairRect,\n getDarkTableConfig,\n getDefaultLegend,\n getDarkPivotChartGridConfig,\n getDarkLabel,\n} from '../common'\nimport { getDefaultTooltip } from '../common/tooltip'\nimport { getDarkBandAxis, getDarkLinearAxis } from '../common/axes'\nimport { getDarkAnnotation } from '../common/annotaion'\nimport { getDarkFunnelTransformTheme } from '../common/funnelTransform'\nimport { getDarkHeatmapCellTheme } from '../common/heatmapCell'\nimport { getDarkRegressionLine } from '../common/regressionLine'\n\nexport const darkTheme = (): CustomThemeConfig => {\n const linearAxis = getDarkLinearAxis()\n const bandAxis = getDarkBandAxis()\n const barBandAxis: YBandAxis = {\n ...bandAxis,\n labelAutoHide: false,\n labelAutoHideGap: 1,\n labelAutoLimit: false,\n labelAutoLimitLength: undefined,\n labelAutoRotate: false,\n labelAutoRotateAngleRange: [0, -45, -90],\n }\n const crosshairLine = getDarkCrosshairLine()\n const crosshairRect = getDarkCrosshairRect()\n\n const baseConfig = {\n backgroundColor: 'transparent',\n color: getDarkColor(),\n label: getDarkLabel(),\n legend: getDefaultLegend(),\n tooltip: getDefaultTooltip(),\n }\n\n const tableConfig = getDarkTableConfig()\n\n return {\n config: {\n table: tableConfig,\n pivotTable: tableConfig,\n\n // cartesian\n line: {\n ...baseConfig,\n xAxis: bandAxis,\n yAxis: linearAxis,\n crosshairLine: crosshairLine,\n pivotGrid: getDarkPivotChartGridConfig(),\n annotation: getDarkAnnotation(),\n },\n column: {\n ...baseConfig,\n\n xAxis: bandAxis,\n yAxis: linearAxis,\n crosshairRect: crosshairRect,\n stackCornerRadius: [4, 4, 0, 0],\n pivotGrid: getDarkPivotChartGridConfig(),\n annotation: getDarkAnnotation(),\n\n regressionLine: getDarkRegressionLine(),\n },\n columnParallel: {\n ...baseConfig,\n\n xAxis: bandAxis,\n yAxis: linearAxis,\n crosshairRect: crosshairRect,\n stackCornerRadius: [4, 4, 0, 0],\n pivotGrid: getDarkPivotChartGridConfig(),\n annotation: getDarkAnnotation(),\n },\n columnPercent: {\n ...baseConfig,\n\n xAxis: bandAxis,\n yAxis: linearAxis,\n crosshairRect: crosshairRect,\n stackCornerRadius: [4, 4, 0, 0],\n pivotGrid: getDarkPivotChartGridConfig(),\n annotation: getDarkAnnotation(),\n },\n bar: {\n ...baseConfig,\n\n xAxis: linearAxis,\n yAxis: barBandAxis,\n crosshairRect: crosshairRect,\n stackCornerRadius: [0, 4, 4, 0],\n pivotGrid: getDarkPivotChartGridConfig(),\n annotation: getDarkAnnotation(),\n },\n barParallel: {\n ...baseConfig,\n\n xAxis: linearAxis,\n yAxis: barBandAxis,\n crosshairRect: crosshairRect,\n stackCornerRadius: [0, 4, 4, 0],\n pivotGrid: getDarkPivotChartGridConfig(),\n annotation: getDarkAnnotation(),\n },\n barPercent: {\n ...baseConfig,\n\n xAxis: linearAxis,\n yAxis: barBandAxis,\n crosshairRect: crosshairRect,\n stackCornerRadius: [0, 4, 4, 0],\n pivotGrid: getDarkPivotChartGridConfig(),\n annotation: getDarkAnnotation(),\n },\n area: {\n ...baseConfig,\n\n xAxis: bandAxis,\n yAxis: linearAxis,\n crosshairLine: crosshairLine,\n pivotGrid: getDarkPivotChartGridConfig(),\n annotation: getDarkAnnotation(),\n },\n areaPercent: {\n ...baseConfig,\n\n xAxis: bandAxis,\n yAxis: linearAxis,\n crosshairLine: crosshairLine,\n pivotGrid: getDarkPivotChartGridConfig(),\n annotation: getDarkAnnotation(),\n },\n scatter: {\n ...baseConfig,\n crosshairLine,\n sizeRange: [8, 24],\n xAxis: {\n ...linearAxis,\n line: {\n ...linearAxis.line,\n visible: true,\n },\n },\n yAxis: {\n ...linearAxis,\n line: {\n ...linearAxis.line,\n visible: true,\n },\n },\n label: {\n ...baseConfig.label,\n showValue: false,\n showValuePercent: false,\n },\n pivotGrid: getDarkPivotChartGridConfig(),\n annotation: getDarkAnnotation(),\n regressionLine: getDarkRegressionLine(),\n },\n dualAxis: {\n ...baseConfig,\n xAxis: bandAxis,\n primaryYAxis: linearAxis,\n secondaryYAxis: { ...linearAxis, grid: { visible: false } },\n dualChartType: {\n primary: 'column',\n secondary: 'line',\n },\n crosshairRect,\n pivotGrid: getDarkPivotChartGridConfig(),\n annotation: getDarkAnnotation(),\n },\n // polar\n pie: {\n ...baseConfig,\n label: {\n ...baseConfig.label,\n showValuePercent: true,\n labelLayout: 'labelLine',\n showDimension: true,\n },\n pivotGrid: getDarkPivotChartGridConfig(),\n },\n donut: {\n ...baseConfig,\n label: {\n ...baseConfig.label,\n showValuePercent: true,\n labelLayout: 'labelLine',\n showDimension: true,\n },\n pivotGrid: getDarkPivotChartGridConfig(),\n },\n radar: {\n ...baseConfig,\n pivotGrid: getDarkPivotChartGridConfig(),\n },\n rose: {\n ...baseConfig,\n label: {\n ...baseConfig.label,\n showValuePercent: true,\n showDimension: true,\n },\n pivotGrid: getDarkPivotChartGridConfig(),\n },\n roseParallel: {\n ...baseConfig,\n label: {\n ...baseConfig.label,\n showValuePercent: true,\n showDimension: true,\n },\n\n pivotGrid: getDarkPivotChartGridConfig(),\n },\n // other\n funnel: {\n ...baseConfig,\n transform: getDarkFunnelTransformTheme(),\n\n pivotGrid: getDarkPivotChartGridConfig(),\n },\n heatmap: {\n ...baseConfig,\n label: {\n ...baseConfig.label,\n labelColorSmartInvert: true,\n },\n\n cell: getDarkHeatmapCellTheme(),\n pivotGrid: getDarkPivotChartGridConfig(),\n },\n histogram: {\n ...baseConfig,\n\n xAxis: linearAxis,\n yAxis: linearAxis,\n crosshairRect: crosshairRect,\n pivotGrid: getDarkPivotChartGridConfig(),\n annotation: getDarkAnnotation(),\n regressionLine: getDarkRegressionLine(),\n },\n boxPlot: {\n ...baseConfig,\n\n xAxis: bandAxis,\n yAxis: linearAxis,\n crosshairRect: crosshairRect,\n pivotGrid: getDarkPivotChartGridConfig(),\n annotation: getDarkAnnotation(),\n },\n },\n }\n}\n"],"names":["darkTheme","linearAxis","getDarkLinearAxis","bandAxis","getDarkBandAxis","barBandAxis","undefined","crosshairLine","getDarkCrosshairLine","crosshairRect","getDarkCrosshairRect","baseConfig","getDarkColor","getDarkLabel","getDefaultLegend","getDefaultTooltip","tableConfig","getDarkTableConfig","getDarkPivotChartGridConfig","getDarkAnnotation","getDarkRegressionLine","getDarkFunnelTransformTheme","getDarkHeatmapCellTheme"],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { getLightBandAxis, getLightLinearAxis } from "../common/axes.js";
|
|
|
4
4
|
import { getLightAnnotation } from "../common/annotaion.js";
|
|
5
5
|
import { getLightFunnelTransformTheme } from "../common/funnelTransform.js";
|
|
6
6
|
import { getLightHeatmapCellTheme } from "../common/heatmapCell.js";
|
|
7
|
-
import {
|
|
7
|
+
import { getLightRegressionLine } from "../common/regressionLine.js";
|
|
8
8
|
const lightTheme = ()=>{
|
|
9
9
|
const linearAxis = getLightLinearAxis();
|
|
10
10
|
const bandAxis = getLightBandAxis();
|
|
@@ -55,7 +55,8 @@ const lightTheme = ()=>{
|
|
|
55
55
|
0
|
|
56
56
|
],
|
|
57
57
|
pivotGrid: getLightPivotChartGridConfig(),
|
|
58
|
-
annotation: getLightAnnotation()
|
|
58
|
+
annotation: getLightAnnotation(),
|
|
59
|
+
regressionLine: getLightRegressionLine()
|
|
59
60
|
},
|
|
60
61
|
columnParallel: {
|
|
61
62
|
...baseConfig,
|
|
@@ -176,7 +177,8 @@ const lightTheme = ()=>{
|
|
|
176
177
|
showValuePercent: false
|
|
177
178
|
},
|
|
178
179
|
pivotGrid: getLightPivotChartGridConfig(),
|
|
179
|
-
annotation: getLightAnnotation()
|
|
180
|
+
annotation: getLightAnnotation(),
|
|
181
|
+
regressionLine: getLightRegressionLine()
|
|
180
182
|
},
|
|
181
183
|
dualAxis: {
|
|
182
184
|
...baseConfig,
|
|
@@ -259,7 +261,7 @@ const lightTheme = ()=>{
|
|
|
259
261
|
crosshairRect,
|
|
260
262
|
pivotGrid: getLightPivotChartGridConfig(),
|
|
261
263
|
annotation: getLightAnnotation(),
|
|
262
|
-
|
|
264
|
+
regressionLine: getLightRegressionLine()
|
|
263
265
|
},
|
|
264
266
|
boxPlot: {
|
|
265
267
|
...baseConfig,
|