log
上一篇
linear
下一篇
ordinal
Loading...
G2 中 对数比例尺(log scale) 是使用对数函数进行数据映射,基于指数关系的非线性分布,针对呈现指数增长的数据。当 data
中的数值范围跨度很大而导致部分图形密集或者空白过多时,可以优先考虑使用。
基于数学公式 y = log(base) + b
。
线性比例尺(linear scale)
对数比例尺(log scale)
import { Chart } from '@antv/g2';const chart = new Chart({container: 'container',});chart.options({type: 'view',autoFit: true,height: 300,data: [{ year: '1991', value: 1 },{ year: '1992', value: 10 },{ year: '1993', value: 100 },{ year: '1994', value: 1000 },{ year: '1995', value: 10000 },],encode: { x: 'year', y: 'value' },scale: {y: {type: 'log',// 刻度数tickCount: 5,// 生成均匀的刻度tickMethod: (min, max, count, base) => {// 计算对数范围const logMin = Math.log(min) / Math.log(base);const logMax = Math.log(max) / Math.log(base);// 计算对数步长const logStep = (logMax - logMin) / (count - 1);// 生成刻度数组const ticks = [];for (let i = 0; i < count; i++) {const logValue = logMin + i * logStep;const value = Math.pow(base, logValue);// 过滤超出范围的值if (value >= min && value <= max) {ticks.push(Math.round(value));}}return ticks;},},},children: [{ type: 'line', labels: [{ text: 'value', style: { dx: -10, dy: -12 } }] },{ type: 'point', style: { fill: 'white' }, tooltip: false },],});chart.render(); // 渲染图标
属性 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
domain | 设置数据的定义域范围 | number[] | 输入数据的最大最小值范围 | |
domainMin | 设置数据的定义域最小值 | number | 输入数据的最小值 | |
domainMax | 设置数据的定义域最大值 | number | 输入数据的最大 | |
range | 设置数据映射的值域范围 | number[] | string[] | [0, 1] | |
rangeMin | 设置数据映射的值域最小值 | number | string | 0 | |
rangeMax | 设置数据映射的值域最大值 | number | string | 1 | |
unknown | 对于 undefined , NaN ,null 空值,返回的数据 | any | undefined | |
tickCount | 设置推荐的 tick 生成数量,tickCount 只是建议值,不会完全按照这个值产生 tick | number | 5 | |
tickMethod | 设置生成 tick 的方法,常用于自定义 tick | (min: number, max: number, count: number) => number[] | calculateLogTicks | |
round | 输出值去四舍五入 | boolean | false | |
clamp | 将映射值限定在 range 的范围内 | boolean | false | |
nice | 扩展 domain 范围,让输出的 tick 展示得更加友好 | boolean | false | |
interpolate | 自定义差值函数 | (a: number, b: number) => (t: number) => T | (a, b) => (t) => a * (1 - t) + b * t | |
base | 设定对数底 | number | 10 |
配置及注意事项:
{scale: {y: {type: 'log', // 注意 当数据返回跨度正负数的时候,请勿使用 log。domainMin: 10,domainMax: 1000,base: 100, // 设置 base 底数为 100,}}}
如果需要最小值 domainMin:0
的情况, 可参考 图表示例 - 对数柱形图页面。
linear
import { Chart } from '@antv/g2';const chart = new Chart({container: 'container',});chart.options({type: 'view',autoFit: true,height: 300,data: [{ year: '1991', value: 1 },{ year: '1992', value: 10 },{ year: '1993', value: 1000 },{ year: '1994', value: 0.1 },{ year: '1995', value: 100 },],encode: { x: 'year', y: 'value' },scale: { x: { range: [0, 1] }, y: { type: 'log', tickCount: 4 } },axis: {y: {labelFormatter: (v) => {return Math.log10(v) + 1;},},},children: [{type: 'line',labels: [{text: 'value',formatter: (v) => {return Math.log10(v) + 1;},style: { dx: -10, dy: -12 },},],},{ type: 'point', style: { fill: 'white' }, tooltip: false },],});chart.render(); // 渲染图标