echarts折線漸變 + 預測值
先來個效果圖
原理:使用echarts建立一個折線圖,漸變原理是使用虛擬地圖visualMap,預測值是使用了兩條線(第一根實線,最後一個值為空,第二根虛線,只保留最後一個值)
1、下載echarts-all-3.js,引入到頁面中,準備一個div盒子(必須有個最低高度,如果百分比高度,瀏覽器在載入時,可能會無法顯示出來)
<div id="safe-trending" style="width:628px;min-height: 125px;height:30%"></div>
2、漸變的核心部分:在option裡面增加配置項visualMap
show:false // 隱藏 visualMap-continuous 元件 true的時候,左邊會出現一個漸變柱子
type:continuous //連續型,另外一個型別piecewise:分段型,會顯示一節一節的,不平滑
min:最小值 // 顯示漸變色顏色的最低值,通常是資料集的最小值
max:最大值 // 顯示漸變色顏色的最大值,通常是資料集的最大值
color:顏色陣列 // 從上往下,若漸變是左右的,那就是從左往右
若需要橫向漸變,增加一個dimension: 0, max:valueList.length-1
若指定某條折線漸變,則增加seriesIndex: 1 ,數值是折線的索引號,從0開始
其餘的配置請參考官網http://echarts.baidu.com/option.html#visualMap-continuous.dimension
visualMap: [{//漸變色 show: false, type: 'continuous', min: Math.min.apply(null, valueList), max: Math.max.apply(null, valueList), color: ['#fc2a01', '#ffcc00', '#54ff00'], }],
3、預測值的核心部分:第一根實線,最後一個值為空,第二根虛線,只保留最後一個值,相當於兩根線拼接起來的
y軸資料處理
//格式化資料,最後四個形成虛線(生成兩條折線,第一條折線後四個為空值,第二條折線後只保留後四個值) var yData = []; yData[0] = valueList.map(function (value, index) {//第一條折線資料 if (index > valueList.length - 2) { return ''; } else { return value; } }); yData[1] = valueList.map(function (value, index) {//第二條折線資料 if (index < valueList.length - 2) { return ''; } else { return value; } });配置項處理
series: [ {//實線 type: 'line', showSymbol: false, data: yData[0], itemStyle: { normal: { lineStyle: { width: 5 } } }, }, {//虛線 type: 'line', showSymbol: false, data: yData[1], itemStyle: { normal: { lineStyle: { width: 5, type: 'dotted' } } }, }4、要達到上圖所示的效果,還需要進行其他細節處理,比如x軸的資料格式化,xy軸位置、背景顏色、輔助線處理等
x軸資料格式化
// 格式化 x 軸標籤 只顯示月份,不顯示日期 末尾四個為預測值 var repeatFlag = "";//用於檢測是否是同月,僅適用於月 var formatData = function (val, index) { if (repeatFlag.substring(0, 2) != val.substring(0, 2)) {//不重複,則顯示刻度 repeatFlag = val; return "|" + val.substring(0, 2) + "月";//返回不重複的月份 } else if (index == dateList.length - 2) { return "|" + "預測"; } };
5、最後貼上所有程式碼
/*底部圖表載入*/ function loadSafeTrending() { //折線資料載入 var xData = [], yData = []; xData = loadXdata(); yData = loadYdata(); //格式化x軸日期顯示,只顯示月份 var repeatFlag = "";//用於檢測是否是同月,僅適用於月 var dataFormat = function (val, index) { if (repeatFlag.substring(0, 2) != val.substring(0, 2) && index < xData.length - 2) {//不重複,則顯示刻度 repeatFlag = val; return "|"+val.substring(0, 2) + "月";//返回不重複的月份 } else if (index == xData.length - 2) { return "|"+"預測"; } }; var safeTrending = echarts.init(document.getElementById("safe-trending"));//初始化 var trendingOption = { grid: [{//外框 top: '30px', left: '0px', right: '20px', bottom: '1%', containLabel: false, show: true, borderColor: "rgba(115,162,250,0.5)" }], calculable: true, visualMap: [{//漸變色 show: false, type: 'continuous', min: Math.min.apply(null, yData), max: Math.max.apply(null, yData), color: ['#fc2a01', '#ffcc00', '#54ff00'], }], tooltip: { trigger: 'axis' }, xAxis: [{ type: 'category', boundaryGap: false, position: 'top', data: xData, axisLabel: { align: 'left', interval: 0, padding: [0, 0, -5, -1], color: '#73a2fa', formatter: dataFormat }, axisLine: {// 控制x軸線位置 onZero: false, lineStyle: { color: 'rgba(115,162,250,0.5)', width: 1 } }, axisTick: {// 控制刻度 show: false, lineStyle: { width: 1, shadowColor: '#73a2fa', shadowOffsetY: -5 } }, splitLine: {//輔助線 interval: 0, show: true, lineStyle: { width: 1, color: 'rgba(115, 162, 250, 0.2)' } } }], yAxis: [{ type: 'value', splitLine: {show: false}, axisLabel: {show: false}, axisLine: { show: true, onZero: false, symbol: 'none', lineStyle: { color: 'rgba(115,162,250,0.2)', width: 1, }, }, axisTick: {show: false}//不顯示刻度 }], series: [ {//實線 type: 'line', showSymbol: false, data: formatYdata(yData)[0], itemStyle: { normal: { lineStyle: { width: 5 } } }, }, {//虛線 type: 'line', showSymbol: false, data: formatYdata(yData)[1], itemStyle: { normal: { lineStyle: { width: 5, type: 'dotted' } } }, } ] }; safeTrending.setOption(trendingOption);//圖表填充載入 } /*x軸 隨機日期 格式:4-1*/ function loadXdata() { var month = 4, day = 1, arr = []; for (var i = 0; i < 100; i++) { if (arr.length >= 40) { break; } if (month <= 12 && day == 12) {//月份(4-12月) month++; } if (day < 12) {//月份中的某日(1-15日) day++; } else { day = 1; } arr.push((month < 10 ? "0" + month : month) + "-" + (day < 10 ? "0" + day : day)); } return arr; } /*y軸 隨機60個數值*/ function loadYdata() { var arr = []; for (var j = 0; j < 40; j++) { arr.push(parseInt(Math.random() * 200 + 20)); } return arr; } //格式化資料,最後四個形成虛線(生成兩條折線,第一條折線後四個為空值,第二條折線後只保留後四個值) function formatYdata(dataArr) { var yData = []; yData[0] = dataArr.map(function (value, index) {//第一條折線資料 if (index > dataArr.length - 2) { return ''; } else { return value; } }); yData[1] = dataArr.map(function (value, index) {//第二條折線資料 if (index < dataArr.length - 2) { return ''; } else { return value; } }); return yData; }歡迎指正,菜鳥獻醜,大神勿噴
相關文章
- echarts - 折線圖Echarts
- echarts折線圖Echarts
- echarts 折線圖拼接Echarts
- ECharts柱條漸變色設定以及常用漸變色Echarts
- echarts的漸變色的設定Echarts
- ECHARTS-折線圖不顯示資料 控制折線圖顏色Echarts
- Echarts多條折線圖line顯示數值和真實數值不一致Echarts
- background 線性漸變
- js計算線性漸變的中間顏色值JS
- echarts 繪製圓形進度條帶漸變色Echarts
- Echarts資料視覺化:圖表篇(2)—— 折線圖、堆疊面積折線圖Echarts視覺化
- SVG <linearGradient> 線性漸變SVG
- ECharts系列:玩轉ECharts之常用圖(折線、柱狀、餅狀、散點、關係、樹)Echarts
- SVG線性漸變程式碼SVG
- 使用canvas來完成線性漸變和徑向漸變的功能Canvas
- echarts設定多條折線不是你想的那樣簡單Echarts
- 在微信小程式中使用 echarts 圖片-例 折線圖微信小程式Echarts
- CSS linear-gradient() 線性漸變CSS
- CSS 傾斜角度線性漸變CSS
- echarts圖表漸變色 、及X軸滾動條樣式處理Echarts
- css3實現文字線性漸變,css3實現背景漸變CSSS3
- echarts折線圖使用dataZoom,切換資料時渲染異常,出現豎線bugEchartsOOM
- echarts自定義膠囊柱圖並設定每個柱子的漸變色Echarts
- Avalonia中的線性漸變畫刷LinearGradientBrush
- CSS3 傾斜角度線性漸變CSSS3
- CSS3 linear-gradient() 線性漸變CSSS3
- 一個簡單實用的基於echarts-折線圖的vue元件EchartsVue元件
- iOS兩種顏色的線性漸變 --DDGBannerScrollViewiOSView
- 學習並使用線性漸變linear-gradient
- canvas繪製帶有漸變效果的直線Canvas
- css奇技淫巧-色彩漸變與動態漸變CSS
- css 字型漸變CSS
- CSS背景漸變CSS
- CSS 背景漸變CSS
- Swift 漸變 imageSwift
- Swift 漸變 UISliderSwiftUIIDE
- 直播小程式原始碼,Swift 獲取漸變色顏色值原始碼Swift
- 短視訊直播系統,QLinearGradient之畫漸變線