import React from "react";
import {
Chart,
Geom,
Axis,
Tooltip,
Legend
} from "bizcharts";
// @ts-ignore
import Slider from 'bizcharts-plugin-slider';
// @ts-ignore
import DataSet from '@antv/data-set';
import {dealSliderChange, filterSliderData} from "@/pages/charts/utils/chartsCommon";
interface ICuredProps {
data: any[]; // 数据源
xAxis: string; // x轴坐标
yAxis: string; // y轴坐标
legendName: string; // 图例对应的变量(数据中表示种类的字段)
color?: string[];
height?:number;
maxLen?:number;
}
/**
* 多折线图(两条及两条以上折线图,可设置滚动条)
* @param props
* @constructor
*/
const Cured:React.FC=(props)=>{
const {height=400,xAxis,yAxis,data,maxLen,color,legendName}=props;
let flag:boolean=false;
let dv:any;
let ds:any;
// 获取数据中横坐标的个数,作为是否出现滚动条的依据;
if(maxLen){
const xAxisData=[...new Set(data.map((item)=>item[xAxis]))];
// 设置一个flag,用来判断是否出现滚动条(以及是否需要处理数据)
flag=xAxisData.length>maxLen;
if(flag){
const startLength = 0;
const endLength = maxLen - 1;
/*
此处处理区别于单条折线图
初始化时,应取xAxisData中的第1个(index为0)作为start,取所能展示的最后一个(index为max-1)作为end
*/
ds=new DataSet({
state: {
start: xAxisData[startLength],
end: xAxisData[endLength],
},
});
dv=ds.createView()
.source(data)
.transform({
type: 'filter',
// eslint-disable-next-line consistent-return
callback: (obj: any) => filterSliderData(flag,ds,data,obj,xAxis),
});
}
}
return (
<>
{
flag &&dealSliderChange(obj,ds)}
height={20}
width="auto"
xAxis={xAxis}
yAxis={yAxis}
data={data}
start={ds.state.start}
end={ds.state.end}
padding={[50]}
textStyle={
{
fontSize: '0',
}}
backgroundChart={
{
type: 'heatmap',
}}
/>
}
>
);
}
export default Cured;
import React,{memo} from 'react';
import Cured from "@/pages/charts/compnent/Curved";
import {maxLen} from "@/pages/charts/utils/chartsCommon";
const CuredMemo=memo(Cured);
const curedData= [
{
month: "Jan",
city: "Tokyo",
temperature: 7
},
{
month: "Jan",
city: "London",
temperature: 3.9
},
{
month: "Feb",
city: "Tokyo",
temperature: 6.9
},
{
month: "Feb",
city: "London",
temperature: 4.2
},
{
month: "Mar",
city: "Tokyo",
temperature: 9.5
},
{
month: "Mar",
city: "London",
temperature: 5.7
},
{
month: "Apr",
city: "Tokyo",
temperature: 14.5
},
{
month: "Apr",
city: "London",
temperature: 8.5
},
{
month: "May",
city: "Tokyo",
temperature: 18.4
},
{
month: "May",
city: "London",
temperature: 11.9
},
{
month: "Jun",
city: "Tokyo",
temperature: 21.5
},
{
month: "Jun",
city: "London",
temperature: 15.2
},
{
month: "Jul",
city: "Tokyo",
temperature: 25.2
},
{
month: "Jul",
city: "London",
temperature: 17
},
{
month: "Aug",
city: "Tokyo",
temperature: 26.5
},
{
month: "Aug",
city: "London",
temperature: 16.6
},
{
month: "Sep",
city: "Tokyo",
temperature: 23.3
},
{
month: "Sep",
city: "London",
temperature: 14.2
},
{
month: "Oct",
city: "Tokyo",
temperature: 18.3
},
{
month: "Oct",
city: "London",
temperature: 10.3
},
{
month: "Nov",
city: "Tokyo",
temperature: 13.9
},
{
month: "Nov",
city: "London",
temperature: 6.6
},
{
month: "Dec",
city: "Tokyo",
temperature: 9.6
},
{
month: "Dec",
city: "London",
temperature: 4.8
}
];
const ChartsIndex:React.FC<{}>=()=>{
return(
bizCharts图表封装
折线图-多条
);
}
export default ChartsIndex;
https://blog.csdn.net/wuChiSha/article/details/106548389