在react中用g2plot画折线和柱状图,在一个canvas上,并且折线数据和柱状图数据不一样,加上slider
时间: 2024-02-25 12:52:29 浏览: 62
好的,针对您的问题,我可以为您提供以下解决方案:
首先,您需要安装g2plot和react-g2plot库,可以使用以下命令进行安装:
```
npm install @antv/g2plot react-g2plot --save
```
接下来,您可以创建一个React组件,并在组件中引入g2plot和react-g2plot库:
```jsx
import React, { useState, useEffect } from 'react';
import { Chart } from '@antv/g2';
import { Line, Column } from 'react-g2plot';
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 lineData = [
{ 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 columnData = [
{ year: '1991', value: 10 },
{ year: '1992', value: 15 },
{ year: '1993', value: 20 },
{ year: '1994', value: 25 },
{ year: '1995', value: 30 },
{ year: '1996', value: 35 },
{ year: '1997', value: 40 },
{ year: '1998', value: 45 },
{ year: '1999', value: 50 },
];
const LineColumnChart = () => {
const [chart, setChart] = useState(null);
const [slider, setSlider] = useState(null);
useEffect(() => {
const container = document.getElementById('canvas-container');
const c = new Chart({
container,
autoFit: true,
height: 500,
padding: [20, 100, 50, 80],
});
const scale = {
year: {
range: [0.05, 0.95],
},
value: {
nice: true,
},
};
c.scale(scale);
c.tooltip({
showCrosshairs: true,
shared: true,
});
const linePlot = new Line({
data: lineData,
xField: 'year',
yField: 'value',
smooth: true,
animation: {
appear: {
animation: 'path-in',
duration: 1000,
},
},
});
const columnPlot = new Column({
data: columnData,
xField: 'year',
yField: 'value',
columnSize: 20,
animation: {
appear: {
animation: 'scale-in-x',
duration: 1000,
},
},
});
c.interaction('brush-x');
setChart(c);
setSlider(linePlot.slider);
}, []);
useEffect(() => {
if (chart && slider) {
slider.bind(chart);
}
}, [chart, slider]);
return (
<div>
<div id="canvas-container" />
<Line data={lineData} xField="year" yField="value" smooth animation={false} />
<Column data={columnData} xField="year" yField="value" columnSize={20} />
</div>
);
};
export default LineColumnChart;
```
在这个组件中,我们创建了一个包含折线图和柱状图的canvas,并使用useState和useEffect钩子来管理图表和slider的状态。
在useEffect中,我们创建了一个Chart实例,并在其中创建了一个折线图和一个柱状图。我们还使用brush-x交互来允许用户选择数据点。
在返回的JSX中,我们渲染了一个包含id为“canvas-container”的div,以及一个包含Line和Column组件的div。我们还从Line组件中提取了slider,并将其存储在状态中,以便稍后绑定到Chart实例中。
最后,我们将LineColumnChart组件导出以供其他组件使用。
希望这个解决方案能够帮助到您!
阅读全文