antv g2plot 画一个折柱图,并且还带有slider,他的handler还是圆形,slider还在legend的上边一点
时间: 2023-08-06 22:10:02 浏览: 123
以下是使用 antv G2Plot 绘制折柱图,并带有滑块和自定义样式的代码示例:
```javascript
import { Chart } from '@antv/g2';
import { Slider } from '@antv/g2-plugin-slider';
import { getInterpolation } from '@antv/g2/lib/geometry/shape/util/get-path';
// 数据源
const data = [
{ year: '1991', value: 3 },
{ year: '1992', value: 4 },
{ year: '1993', value: 3.5 },
{ year: '1994', value: 5 },
{ year: '1995', value: 4.9 },
{ year: '1996', value: 6 },
{ year: '1997', value: 7 },
{ year: '1998', value: 9 },
{ year: '1999', value: 13 }
];
// 创建图表实例
const chart = new Chart({
container: 'container',
autoFit: true,
height: 500,
});
// 设置数据源
chart.data(data);
// 创建主题视图
const view = chart.createView();
// 绘制柱状图
view.interval().position('year*value');
// 绘制折线图
view.line().position('year*value').shape('smooth');
// 设置滑块样式
const slider = new Slider({
container: 'slider-container',
height: 30,
start: 0,
end: 1,
data: data.map((d) => d.year),
backgroundChart: {
type: 'line',
options: {
data,
xField: 'year',
yField: 'value',
smooth: true,
lineStyle: {
lineWidth: 1,
stroke: '#B4B4B4',
},
point: {
shape: ({ x, y }) => {
const path = getInterpolation('smooth')(data);
const point = { x, y };
const nextPoint = { x: point.x + 0.001, y: point.y + 0.001 };
let angle = 0;
let radius = 3;
for (let i = 0; i < path.length - 1; i++) {
const p1 = path[i];
const p2 = path[i + 1];
if (
(p1.x <= point.x && point.x <= p2.x) ||
(p2.x <= point.x && point.x <= p1.x)
) {
angle =
((p2.y - p1.y) / (p2.x - p1.x)) *
(point.x - p1.x) +
p1.y -
point.y;
radius = Math.sqrt(angle ** 2 + 9);
break;
}
}
return [
['M', point.x, point.y - radius],
['a', radius, radius, 0, 1, 1, 0, 2 * radius],
['a', radius, radius, 0, 1, 1, 0, -2 * radius],
['z'],
];
},
size: 6,
style: {
fill: '#fff',
stroke: '#B4B4B4',
lineWidth: 1,
},
},
},
},
foregroundChart: {
type: 'line',
options: {
data,
xField: 'year',
yField: 'value',
smooth: true,
lineStyle: {
lineWidth: 2,
stroke: '#1890ff',
},
point: false,
},
},
onChange: (range) => {
const start = range[0];
const end = range[1];
view.scale({
year: {
type: 'timeCat',
range: [start, end],
},
});
chart.render();
},
});
// 设置 slider 样式
slider.slider.component.update({
style: {
backgroundColor: '#f5f5f5',
},
});
slider.slider.component.get('handler').update({
style: {
width: 16,
height: 16,
borderRadius: 8,
backgroundColor: '#1890ff',
marginTop: -6,
marginLeft: -8,
boxShadow: '0 0 4px #666',
},
});
// 隐藏 slider 的 tooltip
slider.slider.component.tooltip(false);
// 将 slider 放置在图例上方
const legend = chart.getComponents().filter((c) => c.type === 'legend')[0];
slider.container.style.top = `${legend.container.getBBox().minY - 20}px`;
// 渲染图表
chart.render();
```
在上述代码示例中,我们定义了一个数据源 `data`,并创建了一个基础的 G2Plot 图表实例 `chart`。接着,我们创建了一个主题视图 `view`,并在视图中绘制了柱状图和折线图。然后,我们使用 `@antv/g2-plugin-slider` 插件创建了一个滑块 `slider`,并将其放置在图例上方。最后,我们对滑块和滑块 handler 的样式进行了自定义,并隐藏了 tooltip。最终,我们渲染了图表并展示了折柱图、滑块和自定义样式。
阅读全文