日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

vue項目中怎么不用Echarts實現(xiàn)數(shù)據(jù)可視化圖表?下面本篇文章給大家介紹一下vue項目中,采用antv實現(xiàn)數(shù)據(jù)可視化圖表的方法,希望對大家有所幫助!


聊聊vue+antv怎么實現(xiàn)數(shù)據(jù)可視化圖表


技術(shù)永無止盡,多看看不同風景

還在愉快的為移動端框架添磚加瓦中,主管就過來詢問我,能騰出一周時間做些其他事情嗎,我有些詫異,這種語氣。問了需要做什么嗎,原來是業(yè)務(wù)部門有個大數(shù)據(jù)圖表沒有多余的人做,需要我去支援一波,雖然有點拒絕,但主管發(fā)話了,只能安排。之前做可視化圖表都是用echarts,原因是第一次用的是它,后來就習(xí)慣了,基本上都能滿足自己的業(yè)務(wù)需求,對于文檔也比較熟悉,用的人也多,遇到問題就能快速的查到解決方案。有點不幸的是,這次客戶指名道姓只能采用阿里的antv,那我也就沒有第二個選擇了。【相關(guān)推薦:vuejs視頻教程】

對于antv沒有太多的接觸,在它剛開源的時候,有去觀摩一下,很炫酷,相比于echarts更加好看,不過那時文檔沒那么全,示例也不是特別多,時至今日再去看,已經(jīng)很全面了,有多個不同場景系列,常用圖表的G2,數(shù)據(jù)關(guān)聯(lián)圖的G6,移動端可視化的F2,以及專注于地圖的L7,當然還有對于之前這些基礎(chǔ)圖表做進一層封裝的plot系類,比如@antv/g2plot、@antv/l7plot。這次的開發(fā)關(guān)于PC的,所以主要會涉及到G2,L7。在開發(fā)過程中的感受,使用起來挺簡單的,但是有些屬性設(shè)置文檔沒有,需要從例子中去查找,然后網(wǎng)上關(guān)于它使用的文章也比較少,沒有echarts那么多,可能需要自己會時間去文檔和示例中自己找尋答案。

面積圖

折線圖是經(jīng)常使用并且比較容易的一種圖形,G2 中并沒有特定的圖表類型(柱狀圖、散點圖、折線圖等)的概念,用戶可以單獨繪制某一種類型的圖表,如餅圖,也可以繪制混合圖表,比如折線圖和柱狀圖的組合,折線圖和面積圖混合就可以實現(xiàn)如圖效果;


聊聊vue+antv怎么實現(xiàn)數(shù)據(jù)可視化圖表


常用參數(shù)文檔

圖表

屬性說明類型默認值
container指定 chart 繪制的 DOM,可以傳入 DOM id,也可以直接傳入 dom 實例string | HTMLElement-
autoFit圖表是否自適應(yīng)容器寬高, 如果用戶設(shè)置了 height,那么會以用戶設(shè)置的 height 為準booleanfalse
width圖表寬度number-
height圖表高度number-
padding圖表內(nèi)邊距'auto'|number |number[]'auto'


度量 scale

屬性說明類型默認值
min設(shè)置對應(yīng)坐標系的最小值any-
max設(shè)置對應(yīng)坐標系的最小值any-
range坐標系的繪制范圍,一般不用修改[number,number][0, 1]
alias數(shù)據(jù)字段的顯示別名,一般用于字段對應(yīng)中文名稱設(shè)置string-
nice自動調(diào)整 min、maxbooleanfalse


提示 tooltip

屬性說明類型默認值
showTitle是否展示 tooltip 標題booleanfalse
sharedtrue 表示合并當前點對應(yīng)的所有數(shù)據(jù)并展示,false 表示只展示離當前點最逼近的數(shù)據(jù)內(nèi)容booleanfalse
showCrosshairs是否顯示 tooltips 輔助線。booleanfalse


坐標系 axis

屬性說明類型默認值
line坐標軸線的配置項,null 表示不展示null | object-
tickLine坐標軸刻度線線的配置項,null 表示不展示null | object-
grid坐標軸網(wǎng)格線的配置項,null 表示不展示null | object-


chart.line(options)

用于繪制折線圖、曲線圖、階梯線圖等。


chart.area(options)

用于繪制區(qū)域圖(面積圖)、層疊區(qū)域圖、區(qū)間區(qū)域圖等。


geom.position()

配置 position 通道映射規(guī)則

示例:

// 數(shù)據(jù)結(jié)構(gòu): [{ x: 'A', y: 10, color: 'red' }]
geom.position('x*y');


geom.color()

配置圖表顏色

// 基礎(chǔ)顏色設(shè)置
geom.color('#1890ff');
// 漸變
geom.color("l(90) 0:#0b83de 1:#0c1c2d")


geom.shape()

圖形相關(guān)設(shè)置,文檔上的說明不是很全,可以從圖表示例獲取相應(yīng)信息

屬性說明
smooth用于折線圖平滑設(shè)置
<template>
  <div id="container"></div>
</template>
<script>
import { Chart } from "@antv/g2";
export default {
  mounted() {
    // 數(shù)據(jù)源
    const data = [
      { time: "8/1", value: 240 },
      { time: "8/10", value: 600 },
      { time: "8/20", value: 350 },
      { time: "8/31", value: 470 },
    ];
    // 初始化圖表,列出圖表屬性
    const chart = new Chart({
      container: "container",
      autoFit: true,
      height: 276,
      padding: [100, 20, 30, 40],
    });
    // 圖表關(guān)聯(lián)數(shù)據(jù)chart.position()方法決定的,在下面有設(shè)置chart.position("time*value")
    // 前面為x軸,所以 time 為 x 軸, value 為 y 軸
    chart.data(data);
    // 度量
    // x,y軸坐標系是根據(jù)
    chart.scale({
      // y軸坐標系設(shè)置
      value: {
        min: 0,
        nice: true,
        alias: "用戶",
      },
      // x軸坐標系設(shè)置
      time: {
        range: [0, 1],
      },
    });
    // 提示信息
    chart.tooltip({
      // 是否顯示輔助線
      showCrosshairs: true,
      // 是否合并所有點展示
      shared: false,
    });
    // value 坐標系設(shè)置
    chart.axis("value", {
      grid: null,
      tickLine: null,
    });
    // time 坐標系設(shè)置
    chart.axis("time", {
      line: null,
      tickLine: null,
    });
    // 圖表繪制設(shè)置
    // 面積圖
    chart
      .area()
      .position("time*value")
      .color("l(90) 0:#0b83de 1:#0c1c2d")
      .shape("smooth");
    // 折線圖
    chart.line().position("time*value").color("#0b83de").shape("smooth");
    // 渲染圖表
    chart.render();
  },
};
</script>


柱狀圖

柱狀圖在日常數(shù)據(jù)分析中正常都會使用,也比較直觀,這邊我列了使用到的一些屬性,其他的跟上面的常用參數(shù)文檔是一致


聊聊vue+antv怎么實現(xiàn)數(shù)據(jù)可視化圖表


數(shù)據(jù)標簽 label

屬性說明類型默認值
offset相對數(shù)據(jù)點的偏移距離number-
offsetX相對于數(shù)據(jù)點在 X 方向的偏移距離number-
offsetY相對于數(shù)據(jù)點在 Y 方向的偏移距離number-
style文本圖形屬性樣式,設(shè)置顏色需要用 fillnumber-


chart.coordinate()

圖表坐標系設(shè)置

屬性說明類型默認值
rotate配置旋轉(zhuǎn)度數(shù),使用弧度制number-
reflect沿 x 方向鏡像或者沿 y 軸方向映射x | y-
scale沿著 x 和 y 方向的縮放比率number, number-
transposex,y 軸置換,常用于條形圖和柱狀圖之間的轉(zhuǎn)換--


chart.interval(options)

用于繪制柱狀圖、直方圖、南丁格爾玫瑰圖、餅圖、條形環(huán)圖(玉缺圖)、漏斗圖等。

<template>
  <div id="container"></div>
</template>
<script>
import { Chart } from "@antv/g2";
export default {
  mounted() {
    // 數(shù)據(jù)源
    const data = [
      { type: "香蕉", value: 460 },
      { type: "蘋果", value: 600 },
      { type: "菠蘿", value: 390 },
      { type: "榴蓮", value: 205 },
    ];
    // 初始化圖表
    const chart = new Chart({
      container: "container",
      autoFit: true,
      height: 276,
      padding: [50, 60, 10, 60],
    });
    // 關(guān)聯(lián)數(shù)據(jù)
    chart.data(data);
    // 圖表關(guān)聯(lián)數(shù)據(jù)chart.position()方法決定的,在下面有設(shè)置chart.position("type*value")
    // 前面為x軸,所以 type 為 x 軸, value 為 y 軸
 
    // 設(shè)置 x 軸坐標系
    chart.axis("type", {
      grid: null,
      tickLine: null,
      line: null,
    });
    // 設(shè)置 y 軸坐標系
    chart.axis("value", {
      grid: null,
      label: null,
    });
    // 隱藏圖例
    chart.legend(false);
    // x,y 軸置換
    chart.coordinate().transpose();
    // chart.interval(options) 柱狀圖
    // geom.position() 配置 position 通道映射規(guī)則
    // geom.size 設(shè)置圖形大小
    // geom.color 設(shè)置圖形顏色
    // geom.label 數(shù)據(jù)標簽設(shè)置
    chart
      .interval()
      .position("type*value")
      .size(12)
      .color("#678ef2")
      .label("value", {
        style: {
          fill: "#8d8d8d",
        },
        offset: 10,
      });
    chart.interaction("element-active");
    // 渲染圖形
    chart.render();
  },
};
</script>


地圖

antv文檔對于地圖的描述不是特別全,比如地圖等級viewLevel、地圖邊界設(shè)置、地圖顏色配置,這些都要結(jié)合實例慢慢摸索,我實現(xiàn)了比較常用的中國地圖,包含toolTip,以及省的散點圖,只要修改地圖等級viewLevel,配合相應(yīng)數(shù)據(jù)就能實現(xiàn)不同省市的散點圖了,大家可以舉一反三。

我這邊是采用@antv/l7plot,內(nèi)部就分裝了地圖相關(guān)繪制,如果采用是@antv/l7,它主要是根據(jù)請求地圖路徑坐標數(shù)據(jù)請求繪制,數(shù)據(jù)也挺龐大的,會比較麻煩一些。

這邊就不放圖了,可以在Github運行查看


地圖容器配置項 map

屬性說明類型默認值
type地圖底圖類型,amap: 高德地圖,mapbox: Mapbox 地圖stringamap
center初始中心經(jīng)緯度number[][0, 0]
pitch初始傾角number0
zoom初始縮放層級number0
style內(nèi)置樣式: dark: 黑暗,light: 明亮,normal: 普通,blank: 無底圖stringdark
logo是否顯示 logobooleantrue


地圖等級 viewLevel

屬性說明
level層級 國家;"country"、省份:"province"、市:"city"、縣:"district"
adcode層級編碼 中國;100000、浙江?。?quot;330000"、杭州市:"330100"、西湖區(qū):"330106"
<template>
  <div id="container"></div>
</template>
<script>
import { Choropleth } from "@antv/l7plot";
// 地圖數(shù)據(jù)
import data from "../data/userMap";
export default {
  mounted() {
    // 初始化地圖
    // eslint-disable-next-line no-unused-vars
    const map = new Choropleth("container", {
      // 地圖容器配置
      map: {
        type: "mapbox",
        style: "blank",
        center: [120.19382669582967, 30.258134],
        zoom: 3,
        pitch: 0,
        logo: false,
      },
      // 關(guān)聯(lián)數(shù)據(jù)
      source: {
        data: data,
        joinBy: { sourceField: "code" },
      },
      // 地圖等級
      viewLevel: {
        level: "country",
        adcode: 100000,
      },
      // 根據(jù)容器寬高自定義圖表
      autoFit: true,
      // 設(shè)置地圖顏色
      color: {
        field: "value",
        value: ["#B8E1FF", "#7DAAFF", "#3D76DD", "#0047A5", "#001D70"],
        scale: { type: "quantile" },
      },
      // 邊框
      chinaBorder: {
        // 國界
        national: null,
        // 爭議
        dispute: { color: "#ccc", width: 1, opacity: 0.8, dashArray: [2, 2] },
        // 海洋
        coast: { color: "#ccc", width: 0.7, opacity: 0.8 },
        // 港澳
        hkm: { color: "gray", width: 0.7, opacity: 0.8 },
      },
      // 邊界顏色
      style: {
        opacity: 1,
        stroke: "rgb(93,112,146)",
        lineWidth: 0.6,
        lineOpacity: 1,
      },
      // 數(shù)據(jù)標簽
      label: {
        visible: false,
      },
      // 選擇高亮
      state: {
        active: { stroke: "black", lineWidth: 1 },
      },
      // 提示
      tooltip: {
        inPlot: false,
        items: ["name", "code", "value"],
      },
    });
  },
};
</script>
<style scoped>
#container {
  width: 100%;
  height: 300px;
}
</style>


小結(jié)

如果你還沒了解antv,現(xiàn)在它應(yīng)該進入你的視野了,他提供了很多炫酷的圖表,以及強大的圖表功能,就算現(xiàn)在用不到,下次做個嘗試也未嘗不可,可能你會喜歡上它,并且替換掉echarts。

就舉這些圖表例子了,文章相關(guān)的例子源碼也上傳到Github了。這次開發(fā)過程中,也是把antv文檔上上下下翻了好幾遍,對于使用方式以及屬性有一定的了解,如果你是剛剛要使用antv或者使用中遇到問題,可以評論區(qū)留言,共同成長,fighting~


分享到:
標簽:vue+antv 數(shù)據(jù)可視化圖表
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定