{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/plots/violin/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { groupBy, max, min } from '@antv/util';\nimport pdf from 'pdfast';\nimport { quantile } from '../../utils/transform/quantile';\nimport { ViolinOptions } from './types';\n\nexport type ViolinData = {\n /** X轴 */\n x: string;\n\n /** 小提琴轮廓的 size 通道数据 */\n violinSize: number[];\n /** 小提琴轮廓的 y 通道数据 */\n violinY: number[];\n\n // 箱线图基础数据\n /** 最大值 */\n high: number;\n /** 最小值 */\n low: number;\n /** 上四分位数 */\n q1: number;\n /** 下四分位数 */\n q3: number;\n /** 箱线图中的中位值 */\n median: number[];\n\n /** 箱线图中的上线边缘线 */\n minMax: number[];\n /** 箱线图中的上下四分位点 */\n quantile: number[];\n};\n\nexport type PdfOptions = {\n min: number;\n max: number;\n size: number;\n width: number;\n};\n\nexport const toBoxValue = (values: number[]) => {\n return {\n low: min(values),\n high: max(values),\n q1: quantile(values, 0.25),\n q3: quantile(values, 0.75),\n median: quantile(values, [0.5]),\n minMax: [min(values), max(values)],\n quantile: [quantile(values, 0.25), quantile(values, 0.75)],\n };\n};\n\nexport const toViolinValue = (values: number[], pdfOptions: PdfOptions) => {\n const pdfResults: Array<{ x: number; y: number }> = pdf.create(values, pdfOptions);\n return {\n violinSize: pdfResults.map((result) => result.y),\n violinY: pdfResults.map((result) => result.x),\n };\n};\n\nexport const transformViolinData = (options: ViolinOptions): ViolinData[] => {\n const { xField, yField, seriesField, data, kde } = options;\n\n /** 生成概率密度函数的配置 */\n const pdfOptions: PdfOptions = {\n min: kde.min,\n max: kde.max,\n size: kde.sampleSize,\n width: kde.width,\n };\n\n // 无拆分\n if (!seriesField) {\n const group = groupBy(data, xField);\n return Object.keys(group).map((x) => {\n const records = group[x];\n const values = records.map((record) => record[yField]);\n return {\n x,\n ...toViolinValue(values, pdfOptions),\n ...toBoxValue(values),\n };\n });\n }\n\n // 有拆分\n const resultList: ViolinData[] = [];\n const seriesGroup = groupBy(data, seriesField);\n Object.keys(seriesGroup).forEach((series) => {\n const group = groupBy(seriesGroup[series], xField);\n return Object.keys(group).forEach((key) => {\n const records = group[key];\n const values = records.map((record) => record[yField]);\n resultList.push({\n x: key,\n [seriesField]: series,\n ...toViolinValue(values, pdfOptions),\n ...toBoxValue(values),\n });\n });\n });\n return resultList;\n};\n"]}