【ucharts】超详细介绍使用ucharts图表

编 写 不 易 , 还 希 望 各 位 大 佬 支 持 一 下 \textcolor{gray}{编写不易,还希望各位大佬支持一下}

📃 个 人 主 页 : \textcolor{green}{个人主页:} 沉默小管

📃 个 人 网 站 : \textcolor{green}{个人网站:} 沉默小管

🔥 技 术 交 流 Q Q 群 : 837051545 \textcolor{green}{技术交流QQ群:837051545} QQ837051545

👍 点 赞 , 你 的 认 可 是 我 创 作 的 动 力 ! \textcolor{green}{点赞,你的认可是我创作的动力!}

⭐️ 收 藏 , 你 的 青 睐 是 我 努 力 的 方 向 ! \textcolor{green}{收藏,你的青睐是我努力的方向!}

✏️ 评 论 , 你 的 意 见 是 我 进 步 的 财 富 ! \textcolor{green}{评论,你的意见是我进步的财富!}

如果有不懂可以留言,我看到了应该会回复
如有错误,请多多指教

使用背景

公司要求在taro框架中使用图表,同时我自己的导航网(react+ts)也要用图表。一开始呢,我肯定是跟着大家一样用echarts的或者使用taro市场插件里的图表的。但是神奇的事发生了,不兼容!!!taro3版本。我强颜欢笑,我就疯狂的查找其他好用的图表,最后找到了牛叉的ucharts。为什么说他牛叉呢?首先他适合多端开发,其次他的文档有对应的代码,你直接ctrl+cv就ok了。如下图:
在这里插入图片描述
okok,你肯定说我不想贴在自己代码里调试,我就想看看他每个属性的怎么用的,有没有在线调试,在线文档看的呀。一开始我呢,其实跟大家一样想的,后来我发现,居然真的有在线调试的功能!!我只能说,作者已经给开发者做到了保姆级别了!
在这里插入图片描述

1.介绍uCharts

1.ucharts最新官网
https://www.ucharts.cn/v2/#/
在这里插入图片描述
2.适合多端开发(taro,uniapp,微信,qq,百度,支付宝,字节跳动,快手,web,vue)。你想要的他都有了!
3.ucharts有在线调试功能,在线图表属性介绍文档。
4.ucharts还有自己的模板,让你快速上手,妈妈再也不为我的学习所烦恼了。

2.使用ucharts

基于我的react+typescript项目为例

2.1下载ucharts

网址:https://www.ucharts.cn/v2/#/dwonload/index

npm i @qiun/ucharts
2.2项目中引入

废话不多说,直接上代码
home.tsx–父类

import G_LINE_INTERACT from "@/components/v1/common/ucharts/line/LineInteract"
class Home extends Component{
    lineRef:any;
    constructor(props:any>) {
        super(props)
        this.lineRef = createRef();
    }
     componentDidMount(): void {
     //加载ucharts,父类调用子类方法
        this.lineRef.current.getServerData()
    }
    render() {
		return (
			<>
				 <G_LINE_INTERACT ref={this.lineRef} />
			</>
		)
	}
}

LineInteract.tsx–子类

//coding = utf-8
//@Time : 2022-04-30 18:38
//@Author : 沉默小管
//@File : LineInteract.tsx
//@web  : www.php-china.com
//@Software: WebStorm
import { resInterface } from "@/network/v1/network/networkInterface";
import React, {forwardRef, MutableRefObject, useImperativeHandle, useRef, useState} from "react"
import uCharts from "@qiun/ucharts"
import styles from "./LineInteract.module.less"
/**
 * 组件类
 * @returns
 */
var uChartsInstance = {};
const LineInteract = forwardRef((props: any,ref:any) => {
    let [uChartsId, setUChartsId] = useState<string>("uChartsId");
    let [cWidth, setCWidth] = useState<number>(750);
    let [cHeight, setCHeight] = useState<number>(500);
    useImperativeHandle(ref,()=>({
        getServerData
    }))

    const getServerData = ()=>{
        //模拟从服务器获取数据时的延时
        setTimeout(() => {
            //模拟服务器返回数据,如果数据格式和标准格式不同,需自行按下面的格式拼接
            let res = {
                categories: ["2020-12-10","2020-12-11","2020-12-12","2020-12-13","2020-12-14","2020-12-15","2020-12-16","2020-12-17","2020-12-18"],
                series: [
                    {
                        name: "日新增用户量",
                        data: [10,5,1,8,0,1,30,20,13]
                    }
                ]
            };
            showCharts(uChartsId, res);
        }, 500);
    }
    const showCharts=(id,data)=>{
        const canvas = document.getElementById(id) as HTMLCanvasElement;
        const ctx = canvas?.getContext("2d");
        canvas.width = canvas.offsetWidth;
        canvas.height = canvas.offsetHeight;
        uChartsInstance[id] = new uCharts({
            type: "line",
            context: ctx,
            width: canvas.width,
            height: canvas.height,
            categories: data.categories,
            series: data.series,
            animation: true,
            background: "#FFFFFF",
            color: ["#1890FF","#91CB74","#FAC858","#EE6666","#73C0DE","#3CA272","#FC8452","#9A60B4","#ea7ccc"],
            padding: [15,10,0,15],
            legend: {},
            xAxis: {
                disableGrid: true,
                labelCount: 4
            },
            yAxis: {
                gridType: "dash",
                dashLength: 2
            },
            extra: {
                line: {
                    type: "straight",
                    width: 2
                }
            }
        });
        canvas.onclick = (e:any)=>{
            uChartsInstance[uChartsId].touchLegend(getH5Offset(e));
            uChartsInstance[uChartsId].showToolTip(getH5Offset(e));
        };
        canvas.onmousemove=(e:any)=>{
            uChartsInstance[uChartsId].showToolTip(getH5Offset(e));
        };
    }
    const getH5Offset=(e)=>{
        e.mp = {
            changedTouches: []
        };
        e.mp.changedTouches.push({
            x: e.offsetX,
            y: e.offsetY
        });
        return e;
    }
    return (<>
        <canvas id={uChartsId} className={styles.charts}></canvas>
    </>)
})
export default LineInteract

最终效果
在这里插入图片描述

更多使用ucharts请进入官网查看
https://www.ucharts.cn/v2/#/

uCharts是一个高性能的跨平台图表库,支持H5、APP、小程序(微信小程序、支付宝小程序、钉钉小程序、百度小程序、头条小程序、QQ小程序、360小程序)、Vue、Taro等更多支持canvas的框架平台,支持饼图、圆环图、线图、柱状图、区域图、雷达图、圆弧进度图、仪表盘、K线图、条状图、混合图、玫瑰图、漏斗图、词云图、时序图、散点图、气泡图、地图。 为解决开发者使用可视化组件的困扰,uCharts官方特推出可视化通用组件,本组件具备以下特点: 1、极简单的调用方式,默认配置下只需要传入图表类型及图表数据即可全端显示。 2、提供强大的在线配置生成工具,可视化中的可视化,鼠标点一点就可以生成图表,可视化从此不再难配。 3、兼容ECharts,并解决了ECharts无法使用formatter的问题,可选择PC端或APP端单独使用ECharts引擎渲染图表。 4、H5及App采用renderjs渲染图表,动画流畅、性能翻倍。 5、根据父容器尺寸弹性显示图表,再也不必为宽高匹配及多端适配问题发愁。 6、支持加载状态loading及error展示,避免数据读取显示空白的尴尬。 7、chartData配置与数据解耦,即便使用ECharts引擎也不必担心拼接option的困扰。 8、localdata后端数据直接渲染,无需自行拼接chartData的categories及series,从后端拿回的数据简单处理即可生成图表。 9、小程序端不必担心包体积过大问题,ECharts引擎将不会编译到各小程序端,u-charts.js编译后仅为93kb。 10、未来将支持通过HbuilderX的schema2code自动生成全端全平台图表,敬请期待!!! 11、uCharts官方拥有3个2000人的QQ群支持,庞大的用户量证明我们一直在努力,本组件将持续更新,请各位放心使用,本组件问题请在QQ3群反馈,您的宝贵建议是我们努力的动力!! 安装注意前提条件【版本要求:HBuilderX 3.1.0+】 1、插件市场点击右侧绿色按钮【使用HBuilderX导入插件】,或者【使用HBuilderX导入示例项目】查看完整示例工程 2、依赖uniapp的vue-cli项目:请将uni-modules目录复制到src目录,即src/uni_modules。(请升级uniapp依赖为最新版本) 3、页面中直接按下面用法直接调用即可,无需在页面中注册组件qiun-data-charts 4、注意父元\u7d20class='charts-box'这个样式需要有宽高
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉默小管

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值