ECharts数据可视化项目
可視化面板介紹
? 應對現在數據可視化的趨勢,越來越多企業需要在很多場景(營銷數據,生產數據,用戶數據)下使用,可視化圖表來展示體現數據,讓數據更加直觀,數據特點更加突出。
01-使用技術
完成該項目需要具備以下知識:
- div + css 布局
- flex 布局
- Less
- 原生js + jquery 使用
- rem適配
- echarts基礎
02- 案例適配方案
-
設計稿是1920px
-
flexible.js 把屏幕分為 24 等份
-
cssrem 插件的基準值是 80px
插件-配置按鈕—配置擴展設置–Root Font Size 里面 設置。
但是別忘記重啟vscode軟件保證生效
03-基礎設置
- body 設置背景圖 ,縮放為 100% , 行高1.15
- css初始化
04-header 布局
- 高度為100px
- 背景圖,在容器內顯示
- 縮放比例為 100%
- h1 標題部分 白色 38像素 居中顯示 行高為 80像素
- 時間模塊 showTime 定位右側 right 為 30px 行高為 75px 文字顏色為:rgba(255, 255, 255, 0.7) 而文字大小為 20像素
- header部分css樣式
05-mainbox 主體模塊
-
需要一個上左右的10px 的內邊距
-
column 列容器,分三列,占比 3:5:3
css樣式:
.mainbox {padding: 0.125rem 0.125rem 0;display: flex;.column {flex: 3;}&:nth-child(2) {flex: 5;} }06-公共面板模塊 panel
- 高度為 310px
- 1像素的 1px solid rgba(25, 186, 139, 0.17) 邊框
- 有line.jpg 背景圖片
- padding為 上為 0 左右 15px 下為 40px
- 下外邊距是 15px
- 利用panel 盒子 before 和after 制作上面兩個角 大小為 10px 線條為 2px solid #02a6b5
- 新加一個盒子before 和after 制作下側兩個角 寬度高度為 10px
07-柱形圖 bar 模塊(布局)
-
標題模塊 h2 高度為 48px 文字顏色為白色 文字大小為 20px
-
圖標內容模塊 chart 高度 240px
-
以上可以作為panel公共樣式部分
08-中間布局
- 上面是no 數字模塊
- 下面是map 地圖模塊
地圖模塊制作:
中間樣式
/* 聲明字體*/ @font-face {font-family: electronicFont;src: url(../font/DS-DIGIT.TTF); } .no {background: rgba(101, 132, 226, 0.1);padding: 0.1875rem;.no-hd {position: relative;border: 1px solid rgba(25, 186, 139, 0.17);&::before {content: "";position: absolute;width: 30px;height: 10px;border-top: 2px solid #02a6b5;border-left: 2px solid #02a6b5;top: 0;left: 0;}&::after {content: "";position: absolute;width: 30px;height: 10px;border-bottom: 2px solid #02a6b5;border-right: 2px solid #02a6b5;right: 0;bottom: 0;}ul {display: flex;li {position: relative;flex: 1;text-align: center;height: 1rem;line-height: 1rem;font-size: 0.875rem;color: #ffeb7b;padding: 0.05rem 0;font-family: electronicFont;font-weight: bold;&:first-child::after {content: "";position: absolute;height: 50%;width: 1px;background: rgba(255, 255, 255, 0.2);right: 0;top: 25%;}}}}.no-bd ul {display: flex;li {flex: 1;height: 0.5rem;line-height: 0.5rem;text-align: center;font-size: 0.225rem;color: rgba(255, 255, 255, 0.7);padding-top: 0.125rem;}} } .map {position: relative;height: 10.125rem;.chart {position: absolute;top: 0;left: 0;z-index: 5;height: 10.125rem;width: 100%;}.map1,.map2,.map3 {position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);width: 6.475rem;height: 6.475rem;background: url(../images/map.png) no-repeat;background-size: 100% 100%;opacity: 0.3;}.map2 {width: 8.0375rem;height: 8.0375rem;background-image: url(../images/lbx.png);opacity: 0.6;animation: rotate 15s linear infinite;z-index: 2;}.map3 {width: 7.075rem;height: 7.075rem;background-image: url(../images/jt.png);animation: rotate1 10s linear infinite;}@keyframes rotate {from {transform: translate(-50%, -50%) rotate(0deg);}to {transform: translate(-50%, -50%) rotate(360deg);}}@keyframes rotate1 {from {transform: translate(-50%, -50%) rotate(0deg);}to {transform: translate(-50%, -50%) rotate(-360deg);}} }09-Echarts-介紹
常見的數據可視化庫:
- D3.js 目前 Web 端評價最高的 Javascript 可視化工具庫(入手難)
- ECharts.js 百度出品的一個開源 Javascript 數據可視化庫
- Highcharts.js 國外的前端數據可視化庫,非商用免費,被許多國外大公司所使用
- AntV 螞蟻金服全新一代數據可視化解決方案 等等
- Highcharts 和 Echarts 就像是 Office 和 WPS 的關系
ECharts,一個使用 JavaScript 實現的開源可視化庫,可以流暢的運行在 PC 和移動設備上,兼容當前絕大部分瀏覽器(IE8/9/10/11,Chrome,Firefox,Safari等),底層依賴矢量圖形庫 ZRender,提供直觀,交互豐富,可高度個性化定制的數據可視化圖表。
大白話:
- 是一個JS插件
- 性能好可流暢運行PC與移動設備
- 兼容主流瀏覽器
- 提供很多常用圖表,且可定制。
- 折線圖、柱狀圖、散點圖、餅圖、K線圖
官網地址:https://www.echartsjs.com/zh/index.html
10-Echarts-體驗
官方教程:[五分鐘上手ECharts](https://www.echartsjs.com/zh/tutorial.html#5 分鐘上手 ECharts)
- 下載echarts https://github.com/apache/incubator-echarts/tree/4.5.0
使用步驟:
11-Echarts-基礎配置
這是要求同學們知道以下配置每個模塊的主要作用干什么的就可以了
需要了解的主要配置:series xAxis yAxis grid tooltip title legend color
-
series
- 系列列表。每個系列通過 type 決定自己的圖表類型
- 大白話:圖標數據,指定什么類型的圖標,可以多個圖表重疊。
-
xAxis:直角坐標系 grid 中的 x 軸
- boundaryGap: 坐標軸兩邊留白策略 true,這時候刻度只是作為分隔線,標簽和數據點都會在兩個刻度之間的帶(band)中間。
-
yAxis:直角坐標系 grid 中的 y 軸
-
grid:直角坐標系內繪圖網格。
-
title:標題組件
-
tooltip:提示框組件
-
legend:圖例組件
-
color:調色盤顏色列表
數據堆疊,同個類目軸上系列配置相同的stack值后 后一個系列的值會在前一個系列的值上相加。
12- 柱狀圖圖表(兩大步驟)
- 官網找到類似實例, 適當分析,并且引入到HTML頁面中
- 根據需求定制圖表
根據需求定制
-
修改圖表柱形顏色 #2f89cf
-
修改圖表大小 top 為 10px bottom 為 4% grid決定我們的柱狀圖的大小
- X軸相關設置 xAxis
- 文本顏色設置為 rgba(255,255,255,.6) 字體大小為 12px
- X軸線的樣式 不顯示
- Y 軸相關定制
- 文本顏色設置為 rgba(255,255,255,.6) 字體大小為 12px
- Y 軸線條樣式 更改為 1像素的 rgba(255,255,255,.1) 邊框
- 分隔線的顏色修飾為 1像素的 rgba(255,255,255,.1)
- 修改柱形為圓角以及柱子寬度 series 里面設置
- 更換對應數據
- 讓圖表跟隨屏幕自適應
13-柱狀圖2定制
- 官網找到類似實例, 適當分析,并且引入到HTML頁面中
- 根據需求定制圖表
需求1: 修改圖形大小 grid
// 圖標位置grid: {top: "10%",left: "22%",bottom: "10%"},需求2: 不顯示x軸
xAxis: {show: false},需求3: y軸相關定制
- 不顯示y軸線和相關刻度
- y軸文字的顏色設置為白色
需求4: 修改第一組柱子相關樣式(條狀)
name: "條", // 柱子之間的距離 barCategoryGap: 50, //柱子的寬度 barWidth: 10, // 柱子設為圓角 itemStyle: {normal: {barBorderRadius: 20, } },- 設置第一組柱子內百分比顯示數據
- 設置第一組柱子不同顏色
需求5: 修改第二組柱子的相關配置(框狀)
name: "框",type: "bar",barCategoryGap: 50,barWidth: 15,itemStyle: {color: "none",borderColor: "#00c1de",borderWidth: 3,barBorderRadius: 15},data: [19325, 23438, 31000, 121594, 134141, 681807]}需求6: 給y軸添加第二組數據
yAxis: [{type: "category",data: ["印尼", "美國", "印度", "中國", "世界人口(萬)"],// 不顯示y軸的線axisLine: {show: false},// 不顯示刻度axisTick: {show: false},// 把刻度標簽里面的文字顏色設置為白色axisLabel: {color: "#fff"}},{show: true,data: [702, 350, 610, 793, 664],// 不顯示y軸的線axisLine: {show: false},// 不顯示刻度axisTick: {show: false},axisLabel: {textStyle: {fontSize: 12,color: "#fff"}}}],需求7: 設置兩組柱子層疊以及更換數據
// 給series 第一個對象里面的 添加 yAxisIndex: 0, // 給series 第二個對象里面的 添加 yAxisIndex: 1, // series 第一個對象里面的data data: [70, 34, 60, 78, 69], // series 第二個對象里面的data data: [100, 100, 100, 100, 100], // y軸更換第一個對象更換data數據 data: ["HTML5", "CSS3", "javascript", "VUE", "NODE"], // y軸更換第二個對象更換data數據 data:[702, 350, 610, 793, 664],完整代碼:
// 柱狀圖2 (function() {var myColor = ["#1089E7", "#F57474", "#56D0E3", "#F8B448", "#8B78F6"];// 1. 實例化對象var myChart = echarts.init(document.querySelector(".bar2 .chart"));// 2. 指定配置和數據var option = {grid: {top: "10%",left: "22%",bottom: "10%"// containLabel: true},// 不顯示x軸的相關信息xAxis: {show: false},yAxis: [{type: "category",inverse: true,data: ["HTML5", "CSS3", "javascript", "VUE", "NODE"],// 不顯示y軸的線axisLine: {show: false},// 不顯示刻度axisTick: {show: false},// 把刻度標簽里面的文字顏色設置為白色axisLabel: {color: "#fff"}},{data: [702, 350, 610, 793, 664],inverse: true,// 不顯示y軸的線axisLine: {show: false},// 不顯示刻度axisTick: {show: false},// 把刻度標簽里面的文字顏色設置為白色axisLabel: {color: "#fff"}}],series: [{name: "條",type: "bar",data: [70, 34, 60, 78, 69],yAxisIndex: 0,// 修改第一組柱子的圓角itemStyle: {barBorderRadius: 20,// 此時的color 可以修改柱子的顏色color: function(params) {// params 傳進來的是柱子對象console.log(params);// dataIndex 是當前柱子的索引號return myColor[params.dataIndex];}},// 柱子之間的距離barCategoryGap: 50,//柱子的寬度barWidth: 10,// 顯示柱子內的文字label: {show: true,position: "inside",// {c} 會自動的解析為 數據 data里面的數據formatter: "{c}%"}},{name: "框",type: "bar",barCategoryGap: 50,barWidth: 15,yAxisIndex: 1,data: [100, 100, 100, 100, 100],itemStyle: {color: "none",borderColor: "#00c1de",borderWidth: 3,barBorderRadius: 15}}]};// 3. 把配置給實例對象myChart.setOption(option); })();14-折線圖1 人員變化模塊制作
- 官網找到類似實例, 適當分析,并且引入到HTML頁面中
- 根據需求定制圖表
需求1: 修改折線圖大小,顯示邊框設置顏色:#012f4a,并且顯示刻度標簽。
// 設置網格樣式grid: { top: '20%',left: '3%',right: '4%',bottom: '3%',show: true,// 顯示邊框borderColor: '#012f4a',// 邊框顏色containLabel: true // 包含刻度文字在內},需求2: 修改圖例組件中的文字顏色 #4c9bfd, 距離右側 right 為 10%
// 圖例組件legend: {textStyle: {color: '#4c9bfd' // 圖例文字顏色},right: '10%' // 距離右邊10%},需求3: x軸相關配置
- 刻度去除
- x軸刻度標簽字體顏色:#4c9bfd
- 剔除x坐標軸線顏色(將來使用Y軸分割線)
- 軸兩端是不需要內間距 boundaryGap
需求4: y軸的定制
- 刻度去除
- 字體顏色:#4c9bfd
- 分割線顏色:#012f4a
需求5: 兩條線形圖定制
- 顏色分別:#00f2f1 #ed3f35
- 把折線修飾為圓滑 series 數據中添加 smooth 為 true
需求6: 配置數據
// x軸的文字 xAxis: {type: 'category',data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], // 圖標數據series: [{name:'新增粉絲',data: [24, 40, 101, 134, 90, 230, 210, 230, 120, 230, 210, 120],type: 'line',smooth: true},{name:'新增游客',data: [40, 64, 191, 324, 290, 330, 310, 213, 180, 200, 180, 79], type: 'line',smooth: true}}]需求7: 新增需求 點擊 2020年 2021年 數據發生變化
以下是后臺送過來數據(ajax請求過來的)
var yearData = [{year: '2020', // 年份data: [ // 兩個數組是因為有兩條線[24, 40, 101, 134, 90, 230, 210, 230, 120, 230, 210, 120],[40, 64, 191, 324, 290, 330, 310, 213, 180, 200, 180, 79]]},{year: '2021', // 年份data: [ // 兩個數組是因為有兩條線[123, 175, 112, 197, 121, 67, 98, 21, 43, 64, 76, 38],[143, 131, 165, 123, 178, 21, 82, 64, 43, 60, 19, 34]]}];- tab欄切換事件
- 點擊2020按鈕 需要把 series 第一個對象里面的data 換成 2020年對象里面data[0]
- 點擊2020按鈕 需要把 series 第二個對象里面的data 換成 2020年對象里面data[1]
- 2021 按鈕同樣道理
完整代碼:
// 折線圖1模塊制作 (function() {var yearData = [{year: "2020", // 年份data: [// 兩個數組是因為有兩條線[24, 40, 101, 134, 90, 230, 210, 230, 120, 230, 210, 120],[40, 64, 191, 324, 290, 330, 310, 213, 180, 200, 180, 79]]},{year: "2021", // 年份data: [// 兩個數組是因為有兩條線[123, 175, 112, 197, 121, 67, 98, 21, 43, 64, 76, 38],[143, 131, 165, 123, 178, 21, 82, 64, 43, 60, 19, 34]]}];// 1. 實例化對象var myChart = echarts.init(document.querySelector(".line .chart"));// 2.指定配置var option = {// 通過這個color修改兩條線的顏色color: ["#00f2f1", "#ed3f35"],tooltip: {trigger: "axis"},legend: {// 如果series 對象有name 值,則 legend可以不用寫data// 修改圖例組件 文字顏色textStyle: {color: "#4c9bfd"},// 這個10% 必須加引號right: "10%"},grid: {top: "20%",left: "3%",right: "4%",bottom: "3%",show: true, // 顯示邊框borderColor: "#012f4a", // 邊框顏色containLabel: true // 包含刻度文字在內},xAxis: {type: "category",boundaryGap: false,data: ["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],axisTick: {show: false // 去除刻度線},axisLabel: {color: "#4c9bfd" // 文本顏色},axisLine: {show: false // 去除軸線}},yAxis: {type: "value",axisTick: {show: false // 去除刻度線},axisLabel: {color: "#4c9bfd" // 文本顏色},axisLine: {show: false // 去除軸線},splitLine: {lineStyle: {color: "#012f4a" // 分割線顏色}}},series: [{name: "新增粉絲",type: "line",// true 可以讓我們的折線顯示帶有弧度smooth: true,data: yearData[0].data[0]},{name: "新增游客",type: "line",smooth: true,data: yearData[0].data[1]}]};// 3. 把配置給實例對象myChart.setOption(option);// 4. 讓圖表跟隨屏幕自動的去適應window.addEventListener("resize", function() {myChart.resize();});// 5.點擊切換效果$(".line h2").on("click", "a", function() {// alert(1);// console.log($(this).index());// 點擊 a 之后 根據當前a的索引號 找到對應的 yearData的相關對象// console.log(yearData[$(this).index()]);var obj = yearData[$(this).index()];option.series[0].data = obj.data[0];option.series[1].data = obj.data[1];// 需要重新渲染myChart.setOption(option);}); })();15-折線圖2 播放量模塊制作
- 官網找到類似實例, 適當分析,并且引入到HTML頁面中
- 根據需求定制圖表
需求1: 更換圖例組件文字顏色 rgba(255,255,255,.5) 文字大小為12
legend: {top: "0%",textStyle: {color: "rgba(255,255,255,.5)",fontSize: "12"} },需求2: 修改圖表大小
grid: {left: "10",top: "30",right: "10",bottom: "10",containLabel: true},需求3: 修改x軸相關配置
- 修改文本顏色為rgba(255,255,255,.6) 文字大小為 12
- x軸線的顏色為 rgba(255,255,255,.2)
需求4: 修改y軸的相關配置
axisTick: { show: false },axisLine: {lineStyle: {color: "rgba(255,255,255,.1)"}},axisLabel: {textStyle: {color: "rgba(255,255,255,.6)",fontSize: 12}},// 修改分割線的顏色splitLine: {lineStyle: {color: "rgba(255,255,255,.1)"}}需求5: 修改兩個線模塊配置(注意在series 里面定制)
//第一條 線是圓滑smooth: true,// 單獨修改線的樣式lineStyle: {color: "#0184d5",width: 2 },// 填充區域areaStyle: {// 漸變色,只需要復制即可color: new echarts.graphic.LinearGradient(0,0,0,1,[{offset: 0,color: "rgba(1, 132, 213, 0.4)" // 漸變色的起始顏色},{offset: 0.8,color: "rgba(1, 132, 213, 0.1)" // 漸變線的結束顏色}],false),shadowColor: "rgba(0, 0, 0, 0.1)"},// 設置拐點 小圓點symbol: "circle",// 拐點大小symbolSize: 8,// 設置拐點顏色以及邊框itemStyle: {color: "#0184d5",borderColor: "rgba(221, 220, 107, .1)",borderWidth: 12},// 開始不顯示拐點, 鼠標經過顯示showSymbol: false, name: "轉發量",type: "line",smooth: true,lineStyle: {normal: {color: "#00d887",width: 2}},areaStyle: {normal: {color: new echarts.graphic.LinearGradient(0,0,0,1,[{offset: 0,color: "rgba(0, 216, 135, 0.4)"},{offset: 0.8,color: "rgba(0, 216, 135, 0.1)"}],false),shadowColor: "rgba(0, 0, 0, 0.1)"}},// 設置拐點 小圓點symbol: "circle",// 拐點大小symbolSize: 5,// 設置拐點顏色以及邊框itemStyle: {color: "#00d887",borderColor: "rgba(221, 220, 107, .1)",borderWidth: 12},// 開始不顯示拐點, 鼠標經過顯示showSymbol: false,需求6: 更換數據
// x軸更換數據 data: [ "01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","26","28","29","30"], // series 第一個對象data數據data: [ 30, 40, 30, 40,30, 40, 30,60,20, 40, 30, 40, 30, 40,30, 40, 30,60,20, 40, 30, 40, 30, 40,30, 40, 20,60,50, 40], // series 第二個對象data數據data: [ 130, 10, 20, 40,30, 40, 80,60,20, 40, 90, 40,20, 140,30, 40, 130,20,20, 40, 80, 70, 30, 40,30, 120, 20,99,50, 20],16-餅形圖 1年齡分布模塊制作
- 官網找到類似實例, 適當分析,并且引入到HTML頁面中
- 根據需求定制圖表
定制圖表需求1:
- 修改圖例組件在底部并且居中顯示。
- 每個小圖標的寬度和高度修改為 10px
- 文字大小為12 顏色 rgba(255,255,255,.5)
定制需求2:
- 修改水平居中 垂直居中
- 修改內圓半徑和外圓半徑為 [“40%”, “60%”] pink老師友情提示,帶有直角坐標系的比如折線圖柱狀圖是 grid修改圖形大小,而我們餅形圖是通過 radius 修改大小
定制需求3:更換數據
// legend 中的data 可省略 data: ["0歲以下", "20-29歲", "30-39歲", "40-49歲", "50歲以上"], // series 中的數據data: [{ value: 1, name: "0歲以下" },{ value: 4, name: "20-29歲" },{ value: 2, name: "30-39歲" },{ value: 2, name: "40-49歲" },{ value: 1, name: "50歲以上" }] ,定制需求4: 更換顏色
color: ["#065aab","#066eab","#0682ab","#0696ab","#06a0ab",], // 4. 讓圖表跟隨屏幕自動的去適應window.addEventListener("resize", function() {myChart.resize();});17-餅形圖2 地區分布模塊制作(南丁格爾玫瑰圖)
- 官網找到類似實例, 適當分析,并且引入到HTML頁面中
- 根據需求定制圖表
第二步:按照需求定制
- 需求1:顏色設置
- 需求2:修改餅形圖大小 ( series對象)
- 需求3: 把餅形圖的顯示模式改為 半徑模式
- 需求4:數據使用更換(series對象 里面 data對象)
-
需求5:字體略小些 10 px ( series對象里面設置 )
餅圖圖形上的文本標簽可以控制餅形圖的文字的一些樣式。 label 對象設置
- 需求6:防止縮放的時候,引導線過長。引導線略短些 (series對象里面的 labelLine 對象設置 )
- 連接圖表 6 px
- 連接文字 8 px
- 需求6:瀏覽器縮放的時候,圖表跟著自動適配。
18-Echarts-社區介紹
社區就是一些,活躍的echart使用者,交流和貢獻定制好的圖表的地方。
- 在這里可以找到一些基于echart的高度定制好的圖表,相當于基于jquery開發的插件,這里是基于echarts開發的第三方的圖表。
19-Echarts-map使用(擴展)
參考社區的例子:https://gallery.echartsjs.com/editor.html?c=x0-ExSkZDM (模擬飛機航線)
實現步驟:
- 第一需要下載china.js提供中國地圖的js文件
- 第二個因為里面代碼比較多,我們新建一個新的js文件 myMap.js 引入
- 使用社區提供的配置即可。
需要修改:
- 去掉標題組件
- 去掉背景顏色
- 修改地圖省份背景 #142957 areaColor 里面做修改
- 地圖放大通過 zoom 設置為1.2即可
總結:這例子是擴展案例,大家以后可以多看看社區里面的案例。
20- 最后約束縮放
/* 約束屏幕尺寸 */ @media screen and (max-width: 1024px) {html {font-size: 42px !important;} } @media screen and (min-width: 1920px) {html {font-size: 80px !important;} }總結
以上是生活随笔為你收集整理的ECharts数据可视化项目的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Java常见面试题】JVM篇
- 下一篇: API之网络函数