Vue使用ECharts完成2020年全國各地區(qū)GDP總量大數(shù)據(jù)可視化面板(附源碼)

就在上周全國各地區(qū)GDP總量上了熱搜惶洲,一時性起就想寫個大數(shù)據(jù)面板展示
既然決定要寫步鉴,那么就要考慮到圖表和圖標的使用胡野,這里我是用了我最熟悉的兩大框架EChartselement-ui

一仁连、我的構思步驟

1. 確定主題色彩

首先我們通過ECharts主題定制確定我們的總體圖表顏色

在這里插入圖片描述

也可以自行定制满葛,替換掉我里面的macarons.json文件就行了
在這里插入圖片描述

import macarons from './macarons.json' // 引入默認主題

    export default {
        data () {
            return {
                chart: null
            }
        },
        mounted () {
            this.$echarts.registerTheme('macarons', macarons); // 覆蓋默認主題
            this.initChart();
        },
        methods: {
            initChart () {
                // 初始化echart
                this.chart = this.$echarts.init(this.$el, 'macarons')
                this.chart.setOption(this.options, true)
            }
        }
    }

2. 選擇合適的圖表

這里我使用了折線圖镰矿、柱狀圖琐驴、餅圖地圖秤标、滾動列表绝淡,重點說一下地圖和滾動列表
地圖的話我們需要找該地區(qū)的json或js地圖數(shù)據(jù)文件引入或用其他地圖插件(如百度地圖),但我個人感覺這種輪廓地圖要好看點苍姜。

在這里插入圖片描述

我文件里下載了一個中國省區(qū)地圖牢酵,和地級市地圖,需要可以自取衙猪,我用到的是地級市地圖

import chinaCityJson from './china-cities.json'
    export default {
        methods: {
            initChart() {
                //...關鍵語句
                this.$echarts.registerMap("china", chinaCityJson);
            }
        }
    }

滾動列表我使用的是vue-seamless-scroll馍乙,因為我這里表格用了element-ui的一個表格,為了控制表頭不滾動垫释,我其實是寫了兩個表格丝格,一個隱藏主體內容,一個隱藏表頭棵譬,不想使用這個插件的可以參考我之前的文章Vue實現(xiàn)簡單列表無限循環(huán)滾動(鼠標懸停)自己修改一個適合自己的滾動列表
vue-seamless-scroll組件參考代碼:

import vueSeamlessScroll from 'vue-seamless-scroll'
export default {
    data() {},
    components: {    //組件
        vueSeamlessScroll
    },
    computed: {
     optionSingleHeight() {
       return {
        step: 0.2, // 數(shù)值越大速度滾動越快
        limitMoveNum: 2, // 開始無縫滾動的數(shù)據(jù)量 this.List.length
        hoverStop: true, // 是否開啟鼠標懸停stop
        direction: 1, // 0向下 1向上 2向左 3向右
        openWatch: true, // 開啟數(shù)據(jù)實時監(jiān)控刷新dom
        singleHeight: 0, // 單步運動停止的高度(默認值0是無縫不停止的滾動) direction => 0/1
        singleWidth: 0, // 單步運動停止的寬度(默認值0是無縫不停止的滾動) direction => 2/3
        waitTime: 1000 // 單步運動停止的時間(默認值1000ms)
      }
    }
  },
}

3. 樣式美化

我們可以插入一些圖片和做一些動態(tài)邊框显蝌、透明背景來實現(xiàn)美化界面
這里我只用了兩張背景圖做美化,那就是大屏的背景圖和一線城市的背景圖
這里考慮到打包到服務器會找不到背景圖一些原因订咸,我們把樣式寫到data里面

export default {
     data() {
         return {
             note: {
                 backgroundImage: "url(" + require("../assets/img/bg.jpg") + ")",
                 backgroundSize: "100% 100%",
             },
             box: {
                 margin:"10px 10px 10px 10px",
                 height: "2rem",
                 border: "0.25rem solid transparent",
                 borderImage: "url("+require("../assets/img/border.png")+") 51 32 18 66",
             },
         };
     },
}

4. 大屏比例和防抖

像素我用的是rem曼尊,這是一個CSS3的像素單位酬诀,主要是相對于HTML根元素變化,而px是相對于屏幕寬度變化骆撇,這里可以根據(jù)自己需求改動瞒御,寬度我是利用element-ui的Layout布局做的響應式,這里我最適應的屏幕大小是1920*944艾船,但這是瀏覽器寬高葵腹,不適合大屏展示,所以我又寫了一個全屏js屿岂,當然如果需要的話要調整一個布局高度践宴,不然下面會因為內容沒填滿出現(xiàn)白邊

export default {
    data() {
        return {
            fullscreen: false,
        };
    },
    methods:{
        // 全屏事件
        handleFullScreen() {
            let element = document.documentElement;
            if (this.fullscreen) {
                if (document.exitFullscreen) {
                    document.exitFullscreen();
                } else if (document.webkitCancelFullScreen) {
                    document.webkitCancelFullScreen();
                } else if (document.mozCancelFullScreen) {
                    document.mozCancelFullScreen();
                } else if (document.msExitFullscreen) {
                    document.msExitFullscreen();
                }
            } else {
                if (element.requestFullscreen) {
                    element.requestFullscreen();
                } else if (element.webkitRequestFullScreen) {
                    element.webkitRequestFullScreen();
                } else if (element.mozRequestFullScreen) {
                    element.mozRequestFullScreen();
                } else if (element.msRequestFullscreen) {
                    // IE11
                    element.msRequestFullscreen();
                }
            }
            this.fullscreen = !this.fullscreen;
        },
    },
}

全屏主要是用于展廳大屏展示、公司大屏展示等

防抖函數(shù)是利用時間差去銷毀重構圖表爷怀,以起到防止變化過快出現(xiàn)的抖動

/**
 * @param {Function} fn 防抖函數(shù)
 * @param {Number} delay 延遲時間
 */
export function debounce(fn, delay) {
  var timer;
  return function () {
    var context = this;
    var args = arguments;
    clearTimeout(timer);
    timer = setTimeout(function () {
      fn.apply(context, args);
    }, delay);
  };
}

5. 動態(tài)數(shù)據(jù)

因為我這里只用了一年的數(shù)據(jù)阻肩,就沒什么動態(tài)效果,如果有多個年份的數(shù)據(jù)可以做地區(qū)城市攀爬動態(tài)數(shù)據(jù)运授,所以是只是做了隨機展示地圖上的數(shù)據(jù)內容

export default {
    methods:{
        // 開啟定時器
        startInterval() {
            if (this.intervalId !== null) {
                clearInterval(this.intervalId);
            }
            this.intervalId = setInterval(() => {
                this.reSelectMapRandomArea();
            }, 2000);
        },
        // 重新隨機選中地圖區(qū)域
        reSelectMapRandomArea() {
            this.$nextTick(() => {
                let index = Math.floor(Math.random() * this.data.length);
                this.chart.dispatchAction({
                    type: 'showTip',
                    seriesIndex: 0,
                    dataIndex: index,
                });
                this.chart.dispatchAction({
                    type: 'select',
                    seriesIndex: 0,
                    dataIndex: index,
                });
            });
        },
        handleMapRandomSelect() {
            this.$nextTick(() => {
                setTimeout(() => {
                    this.reSelectMapRandomArea();
                }, 0);
                // 移入區(qū)域烤惊,清除定時器、取消之前選中并選中當前
                this.chart.on('mouseover', (params)=> {
                    clearInterval(this.intervalId);
                });
                // 移出區(qū)域重新隨機選中地圖區(qū)域吁朦,并開啟定時器
                this.chart.on('globalout', ()=> {
                    this.reSelectMapRandomArea();
                    this.startInterval();
                });
                this.startInterval();
            });
        },
    },
}

二柒室、最終效果展示

演示地址:http://zspt_sf.gitee.io/data-visualization-view
效果圖:

在這里插入圖片描述

動態(tài)效果圖:
在這里插入圖片描述

三、源碼地址

github地址:https://github.com/zsptsf/data-visualization
gitee地址:https://gitee.com/zspt_sf/data-visualization

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末逗宜,一起剝皮案震驚了整個濱河市雄右,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌纺讲,老刑警劉巖擂仍,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異熬甚,居然都是意外死亡逢渔,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門乡括,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肃廓,“玉大人,你說我怎么就攤上這事诲泌∶ど蓿” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵档礁,是天一觀的道長角钩。 經常有香客問我吝沫,道長呻澜,這世上最難降的妖魔是什么递礼? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮羹幸,結果婚禮上脊髓,老公的妹妹穿的比我還像新娘。我一直安慰自己栅受,他們只是感情好将硝,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著屏镊,像睡著了一般依疼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上而芥,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天律罢,我揣著相機與錄音,去河邊找鬼棍丐。 笑死误辑,一個胖子當著我的面吹牛,可吹牛的內容都是我干的歌逢。 我是一名探鬼主播巾钉,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼秘案!你這毒婦竟也來了砰苍?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤踏烙,失蹤者是張志新(化名)和其女友劉穎师骗,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體讨惩,經...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡辟癌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了荐捻。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片黍少。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖处面,靈堂內的尸體忽然破棺而出厂置,到底是詐尸還是另有隱情,我是刑警寧澤魂角,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布昵济,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏访忿。R本人自食惡果不足惜瞧栗,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望海铆。 院中可真熱鬧迹恐,春花似錦、人聲如沸卧斟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽珍语。三九已至锤岸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間板乙,已是汗流浹背能耻。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留亡驰,地道東北人晓猛。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像凡辱,于是被迫代替她去往敵國和親戒职。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內容