目录
  • 关于g2图表介绍

关于g2图表介绍

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

g2图表官网地址

g2图标详细开发手册

使用

第一步:安装g2依赖包

npm instal @antv/g2

第二步:在绘图前需要为 g2 准备一个 dom 容器

<div id="webinfo"></div>

第三步:引入

import g2 from "@antv/g2";

第四步:在mounted中定义

可先在全局定义let chart = null;

const chart = new g2.chart({})

chart = new g2.chart({       
        container: "webinfo",//指定图表容器       
        forcefit: true,//强制配合 
        width: 600, // 指定图表宽度       
        height: 306,//高度       
        padding: [20, 30, 30, 50],//内边距 
})

第五步:载入数据源

/马上更新图表 / 
chart.changedata(chartdata) 

/仅仅是更新数据,而不需要马上更新图表/ 
chart.source(chartdata) 

/需要更新图表时调用 / 
chart.repaint()

扩展清除图形语法

/清理所有/
chart.clear(); 

模板中使用完整代码(柱状图)

<template>
  <div id="c1"></div>
</template>
<script>
    export default {
        name: "spectaculars",
        data(){
            return{
                basiccolumnchartprop:{
                    data:[{ genre: 'sports', sold: 275 },
                        { genre: 'strategy', sold: 115 },
                        { genre: 'action', sold: 120 },
                        { genre: 'shooter', sold: 350 },
                        { genre: 'other', sold: 150 }],
                    container:'c1',
                    width:700,
                    height:600
                },
            }
        },
        methods:{
            test(){
                const data = this.basiccolumnchartprop.data;
                const chart = new g2.chart({
                    container: this.basiccolumnchartprop.container,
                    width : this.basiccolumnchartprop.width,
                    height : this.basiccolumnchartprop.height
                });
                chart.source(data);
                chart.interval().position('genre*sold').color('genre')
                chart.render();
            }
        },    
        mounted() {
          this.test();
        },
    }
</script>

在补充一下世界地图

(当初项目需求找了g2的地图,感觉api文档有些东西没说明白,这里记录一下)

<template>
  <div id="c1"></div>
</template>
<script>
    const dataset = require('@antv/data-set');
    export default {
        name: "spectaculars",
        data(){
            return{
                basiccolumnchartprop:{
                    container:'c1',
                },
            }
        },
        methods:{
            test(){
              fetch('src/views/datacenter/data/world/countries.geo.json')
              .then(res => res.json())
              .then(mapdata => {
                const chart = new g2.chart({
                  container:this.basiccolumnchartprop.container,
                  forcefit: true,
                  height:700,
                  padding: [10,10]
                });
                chart.tooltip({
                  showtitle: false
                });
                // 同步度量
                chart.scale({
                  longitude: {
                    sync: true
                  },
                  latitude: {
                    sync: true
                  }
                });
                chart.axis(false);
                chart.legend('trend', {
                  position: 'left'
                });
 
                // 绘制世界地图背景
                const ds = new dataset();
                const worldmap = ds.createview('back')
                  .source(mapdata, {
                    type: 'geojson'
                  });
                const worldmapview = chart.view();
                worldmapview.source(worldmap);
                worldmapview.tooltip(false);
                worldmapview.polygon().position('longitude*latitude').style({
                  fill: '#fff',
                  stroke: '#ccc',
                  linewidth: 1
                });
 
                const userdata = [
                  { name: 'russia', value: 86.8 },
                  { name: 'china', value: 106.3 },
                  { name: 'japan', value: 94.7 },
                  { name: 'mongolia', value: 98 },
                  { name: 'canada', value: 98.4 },
                  { name: 'united kingdom', value: 97.2 },
                  { name: 'united states of america', value: 98.3 },
                  { name: 'brazil', value: 96.7 },
                  { name: 'argentina', value: 95.8 },
                  { name: 'algeria', value: 101.3 },
                  { name: 'france', value: 94.8 },
                  { name: 'germany', value: 96.6 },
                  { name: 'ukraine', value: 86.3 },
                  { name: 'egypt', value: 102.1 },
                  { name: 'south africa', value: 101.3 },
                  { name: 'india', value: 107.6 },
                  { name: 'australia', value: 99.9 },
                  { name: 'saudi arabia', value: 130.1 },
                  { name: 'afghanistan', value: 106.5 },
                  { name: 'kazakhstan', value: 93.4 },
                  { name: 'indonesia', value: 101.4 }
                ];
                const userdv = ds.createview()
                  .source(userdata)
                  .transform({
                    geodataview: worldmap,
                    field: 'name',
                    type: 'geo.region',
                    as: [ 'longitude', 'latitude' ]
                  })
                  .transform({
                    type: 'map',
                    callback: obj => {
                      // obj.trend = obj.value
                      obj.trend = (obj.value > 100) ? '男性更多' : '女性更多';
                      return obj;
                    }
                  });
                const userview = chart.view();
                userview.source(userdv, {
                  trend: {
                    alias: '每100位女性对应的男性数量'
                  }
                });
                userview.polygon()
                  .position('longitude*latitude')
                  .color('trend', [ '#f51d27', '#0a61d7' ])
                  .opacity('value')
                  .tooltip('name*trend')
                  .animate({
                    leave: {
                      animation: 'fadeout'
                    }
                  });
                chart.render();
              })
            },
        },
        mounted() {
          this.test();
        },
    }
</script>
  • fetch这个地方官网引入的是文件目录,不是具体的json文件,使用的时候找不到文件
  • fetch引入的json这里是本地的,其次g2官网提供的远程githup地址获取不到这个json文件
  • fetch引入json文件的路径,不是你当前文件到该json的路径,而是index.html到该json文件的地址

到此这篇关于vue引入使用g2图表的实现的文章就介绍到这了,更多相关vue使用g2图表内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!