最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在Echarts圖中給坐標(biāo)軸加一個(gè)標(biāo)識(shí)線markLine

 更新時(shí)間:2020年07月20日 10:25:35   作者:落花別有意 流水似無(wú)情  
這篇文章主要介紹了在Echarts圖中給坐標(biāo)軸加一個(gè)標(biāo)識(shí)線markLine,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

Echart3數(shù)據(jù)可視化視圖

給坐標(biāo)軸加一個(gè)標(biāo)識(shí)線markLine

當(dāng)X軸不是數(shù)值時(shí),而是一個(gè)類型數(shù)據(jù),如年份,公司名,企業(yè)名,這時(shí)Echarts圖就不是從X軸起始位置開(kāi)始的,所以我們就要給X軸加一個(gè)虛擬的值'0',在markLine中也是在賦值起始位置X軸值時(shí),放置虛擬數(shù)據(jù),并且設(shè)置一個(gè)boundaryGap: 0,可以讓坐標(biāo)軸與刻度之間空白變?yōu)?,這時(shí)標(biāo)示線就從X軸起始位置開(kāi)始了,詳細(xì)屬性可以去Echarts官網(wǎng)查看。

這里還要說(shuō)一句在設(shè)置markLine下面data值時(shí){x:”,//代表的是容器內(nèi)x的值,y:”,容器內(nèi)y的值},如果要設(shè)置在坐標(biāo)軸內(nèi)的標(biāo)示線,就要設(shè)置xAxis和yAxis.

代碼如下

option ={
  xAxis: {
     splitLine: {
      show: false,
     },
     axisLabel: {
      color: '#fff',
      rotate: '35',
      fontSize: 10,
     },
     data: ['0', '2013年', '2014年', '2015年', '2016年', '2017年'],
     boundaryGap: 0,
    },
    yAxis: {
     name: '(單位/km)',
     splitLine: {
      show: false,
     },
     axisLabel: {
      color: '#fff',
     },
     axisPointer: {
      lineStyle: {
       color: '#fff',
      },
      value: '140',
     },
    },
    grid: {
     top: '10%',
     bottom: '27%',
    },
    series: [{
     data: DataAll,
     type: 'scatter',
     symbolSize: function (parmas) {
      return Math.ceil(parmas[2] / 1000);
     },
     label: {
      emphasis: {
       show: true,
       formatter: function (param) {
        return param.data[3] + param.data[4];
       },
       position: 'top',
      },
     },
     markLine: {
      data: [
       [
        { name: '標(biāo)線1起點(diǎn)', xAxis: 0, yAxis: 300, symbol: 'circle'},
        { name: '標(biāo)線1終點(diǎn)', xAxis: '2017年', yAxis: 300, symbol: 'circle' },
       ],
      ],
      label: {
       normal: {
        show: true,
        position: 'middle',
        formatter: '節(jié)能與新能源汽車技術(shù)路線圖2020年目標(biāo)',
       },
      },
      lineStyle: {
       normal: {
        type: 'solid',
        color: '#fff',
       },
      },
     },
     itemStyle: {
      normal: {
       color: '#0fefee',
      },
     },
    }],
}

效果圖

補(bǔ)充知識(shí):日常記要 之 Echarts結(jié)合百度地圖,動(dòng)態(tài)添加不同顏色的markline(markpoint同理)

其實(shí)找了網(wǎng)上的資料,大部分是同個(gè)顏色的markline,或者沒(méi)有所謂的定時(shí),很是苦惱,于是自己查找API,解決了實(shí)際開(kāi)發(fā)中的問(wèn)題,今天有空特地拿出來(lái)簡(jiǎn)單整理下,有什么不懂,或者我沒(méi)說(shuō)清楚的,歡迎留言,廢話不多說(shuō),直接開(kāi)始吧。

根據(jù)echarts官方API,動(dòng)態(tài)添加markline需要使用addMarkLine()方法,它接收兩個(gè)參數(shù):一個(gè)seriesIdx系列索引(這里應(yīng)該是指對(duì)應(yīng)每一條markline的索引值)和一個(gè)markData(這里請(qǐng)參考官方API)。

在遇到的實(shí)際需求中,要求動(dòng)態(tài)添加傳播的路線,并且能夠添加根據(jù)不同的顏色區(qū)分開(kāi)來(lái)。這里遇到的問(wèn)題主要有一下幾個(gè):

既然是動(dòng)態(tài)添加markline,那么就存在一對(duì)多,或者多對(duì)一的情況。這個(gè)比較好處理,就是在數(shù)據(jù)中,添加一個(gè)表示層級(jí)關(guān)系的屬性,一方面可以表現(xiàn)所謂的層級(jí)傳播關(guān)系,另一方面,在每次傳播過(guò)程中,同一層不管是一條markline還是多條,都是一樣的處理方法;

顏色的區(qū)分,因?yàn)閷?shí)際遇到的情況是層級(jí)并不會(huì)很多,所以沒(méi)有做一個(gè)專門的Color對(duì)象去給每一層隨機(jī)添加顏色,而是實(shí)現(xiàn)定義好一個(gè)長(zhǎng)度能夠滿足需求的數(shù)組存儲(chǔ)顏色值,這樣的一個(gè)好處是避免隨機(jī)下顏色接近看不出層級(jí)的關(guān)系;但是還有一個(gè)問(wèn)題,是涉及到百度地圖的,這個(gè)留在后面說(shuō);

索引值的問(wèn)題,既然需要?jiǎng)討B(tài)添加markline,那么seriesIdx是否動(dòng)態(tài)變化呢,還是每一層一個(gè)seriesIdx呢,想知道嗎?請(qǐng)耐心往下看吧。

其實(shí)上面提到的問(wèn)題,在單純用echarts下應(yīng)該是比較好解決的(雖然我并沒(méi)有做過(guò)測(cè)試),但是結(jié)合百度地圖的話,有個(gè)坑這里必須提一下,就是百度地圖是可以推動(dòng)、縮放,以及它和echarts其實(shí)是兩個(gè)東西?。ó?dāng)然我這里說(shuō)的是,你動(dòng)態(tài)添加到ecahrts里面的數(shù)據(jù),對(duì)百度地圖來(lái)說(shuō),根本就不知道?。?/p>

那么怎么解決呢,上代碼吧。

首先關(guān)于上面的第1個(gè)問(wèn)題,由于數(shù)據(jù)是查詢出來(lái)的,并且業(yè)務(wù)需求是沒(méi)有實(shí)現(xiàn)規(guī)定好哪一條markline是哪一層,所以值考慮首位是不相同的,也就是開(kāi)始和結(jié)束不在同一個(gè)位置,當(dāng)然中間線的傳播是可以的,這個(gè)根據(jù)具體的業(yè)務(wù)去處理就可以了。(這里插句話,阿里的 fastjson還是挺好用的,但是在它的JSONArray有點(diǎn)尷尬,有數(shù)據(jù)沖突(還是相同這個(gè)有點(diǎn)忘記了)然后遍歷時(shí),會(huì)生成一個(gè)$ref這樣的循環(huán)引用的東西出來(lái),簡(jiǎn)直了,不過(guò)JSONObject則不會(huì)出現(xiàn)同樣的問(wèn)題)。

 require.config({ // ecahrts引用,這里不做解釋了,請(qǐng)自行參考ecahrts的API例子
        paths: {
echarts: './lib/echarts'
        },
        packages: [
{
  name: 'BMap',
  location: './lib/echarts/Bmap',
  main: 'main'
}
        ]
      });
      require(
        [
'echarts',
'BMap',
'echarts/chart/map'
// 使用柱map模塊,按需加載
        ],
        function (echarts, BMapExtension) {
// 初始化地圖
var BMapExt = new BMapExtension(that.element.find('div')[0], BMap, echarts, {
  enableMapClick: false
});
var map = BMapExt.getMap();
          
// 因?yàn)檫@個(gè)有實(shí)際用途了,所以這里的代碼塊就不貼出來(lái)了,可按照自己的需求實(shí)現(xiàn),具體查看百度地圖的API
// 這里主要處理的是,設(shè)置了百度地圖的邊界,初始化時(shí)顯示的區(qū)域,以及地圖的放大系數(shù)
......
          
// 在加載時(shí),以下操作請(qǐng)加上,這里就回答了上面提到的第2個(gè)問(wèn)題,因?yàn)閑charts在動(dòng)態(tài)加載markline時(shí),其實(shí)數(shù)據(jù)時(shí)沒(méi)有加載進(jìn)百度地圖的(當(dāng)然我不知道這樣說(shuō)明對(duì)不對(duì)哈),但百度地圖在每次縮放、拖拽時(shí),都會(huì)重新渲染頁(yè)面,導(dǎo)致出現(xiàn)的加載情況不是我們想要的,比如剛才添加的markline不見(jiàn)了,或者所有的markline顏色變得跟當(dāng)前最后一條添加的markline一樣,這些都是應(yīng)該在這里先處理好,避免它發(fā)生。在全部的markline加載完之后,再初始化一下百度地圖的數(shù)據(jù),那么這個(gè)時(shí)候恢復(fù)百度地圖原有的功能,不管怎么渲染,都不會(huì)再出現(xiàn)前面的情況。
map.disableScrollWheelZoom(); // 禁用滾輪縮放
map.disableDoubleClickZoom(); // 禁用雙擊放大
map.disableDragging(); // 禁止拖拽
map.disableAutoResize(); // 禁止自適應(yīng)容器變化

// 初始化echarts
var fm = '';
var count = 0;
var option = {
  color: [],
  tooltip: {
    trigger: 'item',
    formatter: fm
  },
  series: []
};
// 這里是添加鼠標(biāo)hover在markline上時(shí),顯示的指定格式的內(nèi)容
if (!$.isEmptyObject(that.options.tooltip)) {
  if (that.options.tooltip.formatter && that.options.tooltip.formatter.indexOf('function') > -1) {
    option.tooltip.formatter = eval('(' + that.options.tooltip.formatter + ')');
  }
}
          // 添加第一層的markline
that.buildMM(null, option, color, geoCoordVar, data, count);
// 百度地圖獲取echarts容器
var container = BMapExt.getEchartsContainer();
// 初始化
myChart = BMapExt.initECharts(container);
// 第一次設(shè)置option
BMapExt.setOption(option, true);


// setInterval的方式動(dòng)態(tài)添加markline,count用來(lái)記錄當(dāng)前的層,用以判斷是否所有層都已添加
var clear = null;
var count = 0;  
clear = setInterval(function () {
 count++;
  if (count > level.length) {
     clear = window.clearInterval(clear);
     // 第二次設(shè)置option,這一步很重要,如果不設(shè)置,就會(huì)產(chǎn)生前面提到的情況(這真是一個(gè)坑,浪費(fèi)了好多時(shí)間)
     BMapExt.setOption(option, true);
     map.enableScrollWheelZoom(); // 允許滾輪縮放
     map.enableDoubleClickZoom(); // 允許雙擊放大
     map.enableDragging();
   }
   // 添加下一層的markline
   that.buildMM(myChart, option, color, geoCoordVar, data, count);
         
         // 其它操作
         ......
           }, that.options.speed); // speed是指定的添加速度
        });
        
        buildMM: function (myChart, option, color, geoCoordVar, data, count) {
      for (var i = 0; i < data.length; i++) {
        // 在查詢結(jié)果數(shù)據(jù)中,level標(biāo)表示層級(jí)關(guān)系,這里與count匹配下一層的數(shù)據(jù)
        if (data[i]['level'] == count) {
          // 生成markline數(shù)據(jù)
var ml = {
  smooth: true,
  effect: {
    show: false
  },
  data: this.getMM(data[i])['markline'],
  itemStyle: {
    normal: {
      color: color[count],
      borderWidth: 1,
      lineStyle: {
        type: 'solid',
        shadowBlur: 20,
        color: color[count]
      }
    }
  }
};
// 由于每一條markline是一個(gè)series,并且結(jié)合百度地圖,所以這里的參數(shù)中,需要注意type=map,mepType=none
var item = {
  name: data[i]['name'],
  type: 'map',
  mapType: 'none',
  data: [],
  markLine: ml,
  geoCoord: geoCoordVar,
  itemStyle: {
    normal: {
      color: color[count],
      borderWidth: 1,
      lineStyle: {
        type: 'solid',
        shadowBlur: 20,
        color: color[count]
      }
    }
  }
};
// 將當(dāng)前markline的item添加到series中
option.series.push(item);
// 調(diào)用addMarkLine,這里請(qǐng)注意看,seriesIdx我設(shè)置的都是0,如果不設(shè)置0,是會(huì)報(bào)錯(cuò)的,所以也就是這么簡(jiǎn)單地解決了第三個(gè)問(wèn)題,因?yàn)槊恳粋€(gè)addMarkLine的markline對(duì)echarts來(lái)時(shí)都是新增的(當(dāng)然這也只是我個(gè)人理解)
   myChart.addMarkLine(
     0,
     ml
   );
        }
      }

    }

以上的代碼我沒(méi)有全部貼出來(lái),但是已經(jīng)夠用了,主要的內(nèi)容都在里面了。在每個(gè)地方基本都有做注釋,如有什么說(shuō)的不對(duì)的,歡迎批評(píng)指正。好了,就到這了~希望大家多多支持腳本之家。

相關(guān)文章

  • Vue3中插槽(slot)的全部使用方法

    Vue3中插槽(slot)的全部使用方法

    這篇文章主要介紹了Vue3中插槽(slot)的全部使用方法,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • Vue3自動(dòng)引入組件與組件庫(kù)的方法實(shí)例

    Vue3自動(dòng)引入組件與組件庫(kù)的方法實(shí)例

    關(guān)于vue?組件還是非常好用的,真正掌握預(yù)計(jì)需要一段時(shí)間,下面這篇文章主要給大家介紹了關(guān)于Vue3自動(dòng)引入組件與組件庫(kù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • vue打包后,用后端接口報(bào)錯(cuò)304、404問(wèn)題

    vue打包后,用后端接口報(bào)錯(cuò)304、404問(wèn)題

    這篇文章主要介紹了vue打包后,用后端接口報(bào)錯(cuò)304、404問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • vue+xlsx實(shí)現(xiàn)表格的導(dǎo)入導(dǎo)出功能

    vue+xlsx實(shí)現(xiàn)表格的導(dǎo)入導(dǎo)出功能

    這篇文章主要介紹了vue+xlsx實(shí)現(xiàn)表格的導(dǎo)入導(dǎo)出功能,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11
  • vue深入解析之render function code詳解

    vue深入解析之render function code詳解

    vue對(duì)大家來(lái)說(shuō)應(yīng)該再熟悉不過(guò)了,下面這篇文章主要給大家深入的解析了vue之render function code的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-07-07
  • Vue.2.0.5過(guò)渡效果使用技巧

    Vue.2.0.5過(guò)渡效果使用技巧

    這篇文章主要介紹了Vue.2.0.5過(guò)渡效果使用技巧,實(shí)例分析了Vue.2.0.5過(guò)渡效果的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。
    2017-03-03
  • Vue中的baseurl如何配置

    Vue中的baseurl如何配置

    這篇文章主要介紹了Vue中的baseurl如何配置問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Vue?ElementUI?table實(shí)現(xiàn)表格斜線分隔線

    Vue?ElementUI?table實(shí)現(xiàn)表格斜線分隔線

    這篇文章主要為大家詳細(xì)介紹了Vue?ElementUI?table實(shí)現(xiàn)表格斜線分隔線,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 基于vue+element實(shí)現(xiàn)全局loading過(guò)程詳解

    基于vue+element實(shí)現(xiàn)全局loading過(guò)程詳解

    這篇文章主要介紹了基于vue+element實(shí)現(xiàn)全局loading過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Vue組件之事件總線和消息發(fā)布訂閱詳解

    Vue組件之事件總線和消息發(fā)布訂閱詳解

    這篇文章主要為大家詳細(xì)介紹了Vue組件之事件總線和消息發(fā)布訂閱,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02

最新評(píng)論

绥中县| 德江县| 平顶山市| 金华市| 晋中市| 九江市| 巩义市| 大余县| 宁陵县| 巴东县| 富顺县| 十堰市| 乡宁县| 娱乐| 韩城市| 北海市| 崇阳县| 抚顺县| 大港区| 黔西县| 榆树市| 泾源县| 遂昌县| 达日县| 南阳市| 包头市| 眉山市| 南涧| 普宁市| 全南县| 波密县| 浏阳市| 隆子县| 农安县| 湛江市| 景谷| 萍乡市| 孟村| 湘潭县| 涿鹿县| 庐江县|