/** * 根据位置获取这个点在图表的哪个轴线上 * @param offsetX * @param offsetY */ export function getXAxisAndYAxisByPosition(chart, offsetX, offsetY, seriesIndex = 0) { const pointInPixel = [offsetX, offsetY] if ( chart.containPixel( { seriesIndex: 0 }, pointInPixel ) ) { const [xAxis, yAxis] = chart.convertFromPixel({ seriesIndex }, pointInPixel) return [xAxis, yAxis] } return null } /** * 将图表导出为图片 * @param {import("echarts").ECharts} chartInstance * @param {'png' | 'jpeg' | 'svg'} type */ export function exportEchartImg(chartInstance, type = 'png', backgroundColor = '#022024') { const dataURL = chartInstance.getDataURL({ type, pixelRatio: 2, backgroundColor }); const link = document.createElement('a') link.style.display = 'none' link.href = dataURL link.setAttribute('download', 'export.png') document.body.appendChild(link) link.click() document.body.removeChild(link) //下载完成移除元素 } /** * 按份数分割轴线 * @param {Number} max * @param {Number} min * @param {Number} cnt * @param {Number} maxBoundaryGap */ export function splitAxis(max, min, cnt, maxBoundaryGap = 1.1) { const _min = Math.floor(min) const interval = Math.ceil((Math.ceil(max * maxBoundaryGap) - _min) / cnt) const _max = _min + interval * cnt return { min: _min, interval, max: _max } } /** * 构建线形series * @param {*} name * @param {*} data * @param {*} color * @param {*} extra * @returns */ export function buildLineSeries(name, data, color, extra = {}) { return { name, type: 'line', data, itemStyle: { color }, lineStyle: { width: 1 }, symbol: 'none', symbolSize: 1, emphasis: { disabled: true }, animation: false, ...extra } } // 根据name查找series export function findSeriesByName(series, seriesName) { return series.find(item => item.name == seriesName) } /** * 限定数字在一定范围 * @param {Number} min * @param {Number} max * @returns {(num: number) => number } */ export function rangeNumber(min, max) { return num => { return num > max ? max : num < min ? min : num } } /** * 获取图表某条轴线的最大值 * @param {import("echarts").ECharts} chartInstance * @param {'xAxis' | 'yAxis'} axis * @returns */ export function getAxisMax(chartInstance, axis) { return chartInstance.getModel().getComponent(axis).axis.scale._extent[1] }