在vue中使用antV-G2展示柱状图

2023-11-05

介绍

G2 是一套基于图形语法理论的可视化底层引擎,以数据驱动,提供图形语法与交互语法,具有高度的易用性和扩展性。使用 G2,你可以无需关注图表各种繁琐的实现细节,一条语句即可使用 Canvas 或 SVG 构建出各种各样的可交互的统计图表。

一、安装 antV-G2

通过 npm 安装

npm install @antv/g2 --save

成功安装完成之后,即可使用 import 或 require 进行引用。

import { Chart } from '@antv/g2';

浏览器引入

既可以通过将脚本下载到本地也可以直接引入在线资源:

<!-- 引入在线资源,选择你需要的 g2 版本以替换 version 变量 -->
<script src="https://gw.alipayobjects.com/os/lib/antv/g2/{{version}}/dist/g2.min.js"></script>
<!-- 引入本地脚本 -->
<script src="./g2.js"></script>

使用 script 标签引入 G2 资源时,挂载在 window 上的变量名为 G2,所以在上述实例中需要加上 G2 的前缀。如下:

const chart = new G2.Chart({
  /* your options */
});

二、在vue中使用antV-G2展示柱状图

创建 div 图表容器

//html布局
<template>
<div class="container" id="container"></div>
</template>

//对应的CSS样式
<style lang="scss">
body{ background: #222;}
.container{width:800px; height: 800px; margin: 100px auto;}
</style>

在data(){}中准备好将要展示的图表数据

data(){
    return {
        chart:null,//图表对象
        showData:[//图表中将要显示的数据
                    {
                        "year": "1951 年",
                        "sales": 38
                    },
                    {
                        "year": "1952 年",
                        "sales": 52
                    },
                    {
                        "year": "1956 年",
                        "sales": 61
                    },
                    {
                        "year": "1957 年",
                        "sales": 145
                    },
                    {
                        "year": "1958 年",
                        "sales": 48
                    },
                    {
                        "year": "1959 年",
                        "sales": 38
                    },
                    {
                        "year": "1960 年",
                        "sales": 38
                    },
                    {
                        "year": "1962 年",
                        "sales": 38
                    }
                ],
    }
},

创建chart

//创建chart
createChart(){
    this.chart = new Chart({
        container: 'container',
        autoFit: false,
        width: 800,
        height: 400,
        padding: [40, 40, 40, 40],
    });
},

设置展示数据 showData

//设置数据
setChartData(){
    this.chart.data(this.showData);
},

设置坐标轴

//设置坐标轴
setChartAxis(){
    this.chart.scale("sales", {//Y轴 字段是 度量
        nice: true,
    });
    //设置Y轴
    //this.chart.axis("sales",false);//不需要Y轴,可以设置false
    this.chart.axis("sales", {//Y轴样式
                grid:{
                    line:{
                    type:"line",
                    style:{
                        // fill:'#ff0000',
                        stroke:"#fff",
                        opacity:0.3,
                        lineDash:[1,3],//虚线
                    }
                    },
                },
                label:{
                    style:{
                    fill:"#fff",//文字颜色
                    fontFamily: "Microsoft YaHei",//文字字体
                    fontWeight: 400,//文字粗细
                    fontSize: 12,//文字大小
                    }
                },
                line:{
                    style:{
                    stroke:"#fff",//坐标轴颜色
                    }
                },
                tickLine: {
                    style:{
                    stroke:"#fff",//刻度线颜色
                    }
                },
                subTickLine:{
                    style:{
                    stroke:"#fff",//小刻度颜色
                    }
                }
            });

    //设置X轴
    //this.chart.axis("year",false);//不需要Y轴,可以设置false
    this.chart.axis("year", {//X轴样式

        label: {
            formatter: (val) => {
            return val;
            // return +val * 100 + '%';
            },
            style:{
            fill:"#fff",//文字颜色
            fontFamily: "Microsoft YaHei",//文字字体
            fontWeight: 400,//文字粗细
            fontSize: 12,//文字大小
            }
        },
        line:{
            style:{
            stroke:"#fff",//坐标轴颜色
            }
        },
        tickLine: {
            style:{
            stroke:"#fff",//刻度线颜色
            }
        },
        subTickLine:{
            style:{
            stroke:"#fff",//小刻度颜色
            }
        }
    });
},

设置提示框信息样式

//设置提示框信息样式
setChartTooltip(){
    this.chart.tooltip({
        showMarkers: false,
        domStyles:{
            'g2-tooltip':{
                background:"rgba(00, 00, 00,0.5)",//背景RGBA形式的值
                color:"#ffffff",//文字颜色
                boxShadow:"0px 0px 5px #000000",//阴影大小 阴影颜色 
            },
        },
        customItems: (items) => {//自定义显示的内容格式
            // console.log("items")
            // console.log(items)
            items[0].name="sales";
            return items;
        },
    });
},

设置图表样式

this.chart.interaction('element-active');//设置图表样式

设置图表柱子相关属性【柱子样式】

//设置图表柱子相关属性【柱子样式】
setChartStyle(){
    var line=this.chart.interval({
    background: {
        style: {
        radius: 0,//圆角
        fill:"#2681ff",//柱背景色
        },
    },
    });
    
    line.state({
    // selected:{
    //   style:{
    //     stroke:'red',
    //   }
    // }
    active:{
        style:{
        stroke:"#2681ff",//鼠标经过 边框颜色
        }
    }
    })
    .position("year"+"*"+"sales")//X轴 * Y轴
    .color("sales", (val) => {//X轴 上柱颜色
        // if (val === '10-30分' || val === '30+分') {
        // return '#ff4d4f';
        // }
        return "#2681ff";//柱填充色
    });

    //柱子上是否显示值标签
    //line.label(false);//不需要显示,可以设置false
    line.label("sales", {//标签值
            content: (originData) => {
                return originData["sales"]+"万";//设置值标签最终显示的内容
            },
            style: {
                fill: "#fff",
                fontFamily: "Microsoft YaHei",
                fontWeight: 400,
                fontSize: 16,
                // fill: "#ffffff",
            },
            position:"top",//显示位置
        })
},

设置图例

this.chart.legend(false);//设置为false,表示不显示图例

设置动画

this.chart.animate(false);//设置为false,表示不使用动画效果

渲染图表

//渲染图表
this.chart.render();

三、效果预览

 四、完整vue代码文件

<template>
<div class="container" id="container"></div>
</template>
<script>
import { Chart } from '@antv/g2';

//进度池
export default {
  components: {},
    name:"test",
    data(){
        return {
            showData:[
                        {
                            "year": "1951 年",
                            "sales": 38
                        },
                        {
                            "year": "1952 年",
                            "sales": 52
                        },
                        {
                            "year": "1956 年",
                            "sales": 61
                        },
                        {
                            "year": "1957 年",
                            "sales": 145
                        },
                        {
                            "year": "1958 年",
                            "sales": 48
                        },
                        {
                            "year": "1959 年",
                            "sales": 38
                        },
                        {
                            "year": "1960 年",
                            "sales": 38
                        },
                        {
                            "year": "1962 年",
                            "sales": 38
                        }
                    ],
        }
    },
    created(){
        
    },
    mounted(){
        this.init();
    },
    methods:{
        // 初始化
        init(){
            
            this.createChart();//创建chart
            this.setChartData();//设置字段和数据

            this.setChartAxis();//设置坐标轴和度量
            this.setChartTooltip();//设置提示信息

            this.chart.interaction('element-active');//设置图表样式

            this.setChartStyle();//设置图表柱子相关属性
            this.chart.legend(false);//设置为false,表示不显示图例
            this.chart.animate(false);//设置为false,表示不使用动画效果

            //渲染图表
            this.chart.render();
        },
        //创建chart
        createChart(){
            this.chart = new Chart({
                container: 'container',
                autoFit: false,
                width: 800,
                height: 400,
                padding: [40, 40, 40, 40],
            });
        },
        //设置数据
        setChartData(){
            this.chart.data(this.showData);
        },
        //设置坐标轴
        setChartAxis(){
            this.chart.scale("sales", {//Y轴 字段是 度量
                nice: true,
            });
            //设置Y轴
            //this.chart.axis("sales",false);//不需要Y轴,可以设置false
            this.chart.axis("sales", {//Y轴样式
                        grid:{
                            line:{
                            type:"line",
                            style:{
                                // fill:'#ff0000',
                                stroke:"#fff",
                                opacity:0.3,
                                lineDash:[1,3],//虚线
                            }
                            },
                        },
                        label:{
                            style:{
                            fill:"#fff",//文字颜色
                            fontFamily: "Microsoft YaHei",//文字字体
                            fontWeight: 400,//文字粗细
                            fontSize: 12,//文字大小
                            }
                        },
                        line:{
                            style:{
                            stroke:"#fff",//坐标轴颜色
                            }
                        },
                        tickLine: {
                            style:{
                            stroke:"#fff",//刻度线颜色
                            }
                        },
                        subTickLine:{
                            style:{
                            stroke:"#fff",//小刻度颜色
                            }
                        }
                    });

            //设置X轴
            //this.chart.axis("year",false);//不需要Y轴,可以设置false
            this.chart.axis("year", {//X轴样式

                label: {
                    formatter: (val) => {
                    return val;
                    // return +val * 100 + '%';
                    },
                    style:{
                    fill:"#fff",//文字颜色
                    fontFamily: "Microsoft YaHei",//文字字体
                    fontWeight: 400,//文字粗细
                    fontSize: 12,//文字大小
                    }
                },
                line:{
                    style:{
                    stroke:"#fff",//坐标轴颜色
                    }
                },
                tickLine: {
                    style:{
                    stroke:"#fff",//刻度线颜色
                    }
                },
                subTickLine:{
                    style:{
                    stroke:"#fff",//小刻度颜色
                    }
                }
            });
        },
        //设置提示框信息样式
        setChartTooltip(){
            this.chart.tooltip({
                showMarkers: false,
                domStyles:{
                    'g2-tooltip':{
                        background:"rgba(00, 00, 00,0.5)",//背景RGBA形式的值
                        color:"#ffffff",//文字颜色
                        boxShadow:"0px 0px 5px #000000",//阴影大小 阴影颜色 
                    },
                },
                customItems: (items) => {//自定义显示的内容格式
                    // console.log("items")
                    // console.log(items)
                    items[0].name="sales";
                    return items;
                },
            });
        },
        //设置图表柱子相关属性【柱子样式】
        setChartStyle(){
            var line=this.chart.interval({
            background: {
                style: {
                radius: 0,//圆角
                fill:"#2681ff",//柱背景色
                },
            },
            });
            
            line.state({
            // selected:{
            //   style:{
            //     stroke:'red',
            //   }
            // }
            active:{
                style:{
                stroke:"#2681ff",//鼠标经过 边框颜色
                }
            }
            })
            .position("year"+"*"+"sales")//X轴 * Y轴
            .color("sales", (val) => {//X轴 上柱颜色
                // if (val === '10-30分' || val === '30+分') {
                // return '#ff4d4f';
                // }
                return "#2681ff";//柱填充色
            });

            //柱子上是否显示值标签
            //line.label(false);//不需要显示,可以设置false
            line.label("sales", {//标签值
                    content: (originData) => {
                        return originData["sales"]+"万";//设置值标签最终显示的内容
                    },
                    style: {
                        fill: "#fff",
                        fontFamily: "Microsoft YaHei",
                        fontWeight: 400,
                        fontSize: 16,
                        // fill: "#ffffff",
                    },
                    position:"top",//显示位置
                })
        },
        //设置图例
    },
}
</script>

<style lang="scss">
body{ background: #222;}
.container{width:800px; height: 800px; margin: 100px auto;}
</style>

数据可视化工具推荐

基于VUE实现拖拽制作数据可视化大屏

基于SpringBoot+Vue3+mysql开发,支持多种数据源:excel、api接口、mysql、oracle、SqlServer等多种类型的数据源,支持数据模型转换,图形化编辑界面:拖拽即可完成大屏制作和数据配置,无需编程就能轻松搭建数据大屏。私有化部署:使用私有化部署的方式,保障贵公司的数据安全,数据大屏支持加密发布

界面展示

  1. 大屏编辑界面  (https://www.51qingtian.com)
  2. 可视化大屏  (https://www.51qingtian.com)
  3. 数据模型  (https://www.51qingtian.com)
  4. 数据源  (https://www.51qingtian.com)

模板展示

  1. 健身数据报告

(https://www.51qingtian.com)

  1. 智慧园区数据统计中心

(https://www.51qingtian.com)

  1. 交通安全主题

(https://www.51qingtian.com)

  1. 财务数据大屏

(https://www.51qingtian.com)

  1. 智慧医疗大数据可视化大屏

(https://www.51qingtian.com)

官网

  1. 情天数据可视化 www.51qingtian.com
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在vue中使用antV-G2展示柱状图 的相关文章

随机推荐

  • 3.1 代码审核机制

    一次咨询活动 同一朋友交流基于复用的架构设计理念时 他说 你讲的那个很好 但离我们现状有点远 我现在每天要编码 要开会 要出差 要交流 要带人 要流程 招个能干的人可难了 而刚做顺手的就想跑 留一堆代码让我擦屁股 一段话不知道出了多少一线工
  • 三极管相关知识

    NPN型三极管 NPN型三极管 由三块半导体构成 其中两块N型和一块P型半导体组成 P型半导体在中间 两块N型半导体在两侧 三极管是电子电路中最重要的器件 它最主要的功能是电流 放大和开关作用 半导体三极管也称为晶体三极管 可以说它是电子电
  • Riverbed补齐最后一块拼图

    如果你知道APM Application Performance Management 应用性能管理 和NPM Network Performance Management 网络性能管理 应该知道它很重要 道理很简单 很多问题都是管理问题
  • C++:std::thread

    1 std thread的用法 头文件为 include
  • 【Computer Science】标准输入输出重定向

    本文介绍终端里的输入输出重定向 Windows 下的 cmd 和 Linux 下的 shell 相同 Command 功能 command gt filename 把标准输出重定向到一个文件中 command gt gt filename
  • 软件测试实习面试都问啥?

    软件测试实习面试都问啥 面试问的问题 Day1 April 8th Day2 April 9th Day3 April 10th 面试前的准备 color red heartsuit 实习面试结束 happy 这周我总共面试了三个软件测试的
  • Linux--vim使用

    普通文件编辑 vim 文件名 普通文件 命令行模式 ESC 插入模式 a i o O进入插入模式 末行模式 进入末行模式 q退出 q 强制退出 w保存 wq保存退出 w newfile另存 vim使用进阶 命令行模式下的命令 1 对于光标的
  • 从0到1构建新闻长文本分类系统

    新闻分类系统概述 新闻分类系统 顾名思义 就是对于一片新闻或者是一片文章 进行自动的分类 例如政治 财经 娱乐等等 从技术角度讲 其实属于自然语言处理中比较经典的文本分类问题 当然在一个工业级别的分类系统当中 会遇到各种各样的问题 例如语料
  • 【vulntarget】系列:vulntarget-g 练习WP

    本文仅为学习 vulntarget 在本地环境测试验证 无其它目的 请勿进行未经授权的测试 一 靶场信息 下载地址 百度云链接 链接 https pan baidu com s 1R 9udIuoPavsTI18 lPP3Q pwd ics
  • endl和"\n"的区别

    在C 中 打印字符串时 cout不会自动移到下一行 而想要换行 有两种方式 一种是控制符endl 一种是换行符 n 下面来介绍下两种方式 endl是一个C 符号 表示重起一行 在输出流中插入endl将导致屏幕光标移到下一行开头 C 中还提供
  • 使用带Arduino IDE & WIZ820io的ATmega1284P

    使用带Arduino IDE WIZ820io的ATmega1284P 2013 07 04 Filed under IO模块 and tagged with arduino Arduino IDE atmega1284p RAM问题 W5
  • 解决git push 错误error: src refspec master does not match any. error: failed to push some refs to

    解决git push 错误error src refspec master does not match any error failed to push some refs to 在和远程仓库关联后 我们通过 push 命令将本地仓库的文
  • 装机:MSDT & HEDT 的区别

    MSDT Main Stream Desktop 主流桌面平台 HEDT High End Desktop 高端桌面平台 HEDT平台在很多方面的性能都要比MSDT平台强很多 相对于MSDT平台 HEDT平台通常拥有更多的核心数量 更多的内
  • C#查询ACCESS数据库字段和时间字段

    查询表的所有字段 string Format SELECT FROM 0 TableName 查询表中的一个字段 在ACCESS中将字段用CStr 转换成字符串来判断 string Format SELECT FROM 0 WHERE CS
  • 多协议服务器,多协议远程连接服务器

    多协议远程连接服务器 内容精选 换一换 远程连接Linux云服务器报错 Access denied帐号或密码输入错误 SSH服务端配置了禁止root用户登录的策略 帐号或密码输入错误 检查输入的用户名或密码 Linux云服务器默认用户名ro
  • unity——小球酷跑游戏制作

    课堂课程记录 小球滚动 所有变量与物体名的命名原则都是见名知意 一 创建一个unity项目 二 Create所需3Dobject 1 Player 2 walls 三 添加属性 1 添加在Player上 a 添加Rigidbody组件 b
  • 折半查找

    什么是折半查找 折半查找其实通过字面上的意思就是大致就可以理解为每次查找的时候 选取中间下标的值进行查找 如果找不到 就判断这个要查找的数大于还是小于这个这个中间下标的值 如果大于 就把这个中间值的下标 1给到左边的下标 中间下标 就等于
  • 子域访问计数

    class Solution 利用hash表 对子域名计数 注意对字符串的划分 def subdomainVisits self cpdomains count for domain in cpdomains visits int doma
  • 第十三届蓝桥杯大赛真题PythonB组详解 内含周末献血日记

    前言 今天上午去献血啦 在成都市血液中心 待遇很好 体检通过后先发了一些食物 防止一会饿或者来之前空腹的童鞋 可以看出吃的还是比较不错的 正常的早饭也不会吃那么多 但是泡面的油包不能放 水是甜的加了糖之类的 面包不太好吃 就是纯面包 吃不了
  • 在vue中使用antV-G2展示柱状图

    介绍 G2 是一套基于图形语法理论的可视化底层引擎 以数据驱动 提供图形语法与交互语法 具有高度的易用性和扩展性 使用 G2 你可以无需关注图表各种繁琐的实现细节 一条语句即可使用 Canvas 或 SVG 构建出各种各样的可交互的统计图表