echarts环形图 折线图 横向柱状图 纵向柱状图封装

/**

 *

 * 横向柱状图

 * @param {number} id

 * @param {number} _this

 */

export function rangkingBar(id, _this, rankingYdata, rankingOptions, rankingOptionsPercent, gridRight = '105px') {

  let echarts2 = _this.$echarts.init(document.getElementById(id));

  // let echarts2 = _this.$echarts.init(_this.$refs[id]);

  let option = {

    color: ['#0697FF'],

    tooltip: {

      trigger: 'axis',

      axisPointer: {

        type: 'shadow'

      },

      backgroundColor: '#fff',

      textStyle: {

        color: '#333'

      },

      formatter: function (params) {

        let firstParams = params[0];

        return (

          firstParams.name +

          '<br>' +

          '数量: ' +

          firstParams.data?.toLocaleString() +

          '<br>' +

          '占比: ' +

          rankingOptionsPercent[firstParams.dataIndex]

        );

      }

    },

    grid: {

      top: '25px',

      left: 85,

      bottom: 0,

      right: gridRight

    },

    xAxis: [

      {

        show: false

      }

],

yAxis: [

      {

        type: 'category',

        data: rankingYdata,

        splitLine: {

          show: false

        },

        axisLine: {

          // 隐藏Y轴

          show: false

        },

        axisTick: {

          // 隐藏刻度线

          show: false,

          alignWithLabel: true

        },

        axisLabel: {

          align: 'left',

          margin: 85,

          formatter: function(value, index) {

              // 如果标签长度超过4,将剩余的文字替换为省略号

              if (value.length > 4) {

                  return `{a|${(rankingOptions.length - index)}} ${value.slice(0, 4)}...`;

              } else {

                  return `{a|${(rankingOptions.length - index)}} ${value}`;

              }

          },

          lineHeight: 20,

          rich: {

            a: {

              color: '#FFFFFF',

              backgroundColor: '#0697FF',

              borderRadius: 16,

              width: 16,

              height: 16,

              align: 'center',

            verticalAlign: 'middle',

              fontSize: 12,

              lineHeight: 16

            }

         }

        }

      }

    ],

series: [

      {

        type: 'bar',

        data: rankingOptions,

        barWidth: 10,

        label: {

          position: 'right',

          show: true,

          color: '#333',

          formatter: function (params) {

            return `${rankingOptions[params.dataIndex]?.toLocaleString()} {a|${

              rankingOptionsPercent[params.dataIndex]

            }}`;

          },

          rich: {

            a: {

              color: '#2B3DE0'

            }

          }

        }

      }

    ]

};

echarts2.setOption(option);

  window.addEventListener('resize', () => {

    echarts2.resize();

  });

}

/**

 *

 * 竖向柱状图

 * @param {number} id

 * @param {number} _this

 */

export function drawbar(id, _this, operatorDistributionData, arr = ['电瓶车运营商', '汽车运营商', '换电柜运营商', '充电柜运营商', '门禁运营商']) {

  let myChart1 = _this.$echarts.init(document.getElementById(id));

    let options1 = {

      color: ['#0A9AFF'],

      tooltip: {

        trigger: 'axis',

        axisPointer: {

          type: 'shadow'

        },

        backgroundColor: '#fff',

        textStyle: {

          color: '#333'

        },

        formatter: function (params) {

          let firstParams = params[0];

          return (

            firstParams.name +

            '<br>' +

            '数量: ' +

            firstParams.data?.toLocaleString()

          );

        }

      },

      xAxis: {

        axisTick: {

          show: false

        },

        data: arr,

        axisLine: {

          lineStyle: {

            color: '#D6DCE0'

          }

        },

        axisLabel: {

          textStyle: {

            color: '#0F3F62'

          }

        }

      },

yAxis: [

        {

          type: 'value',

          axisLine: {

            show: false

          },

          axisTick: {

            show: false

          },

          splitLine: {

            show: true,

            lineStyle: {

              type: 'dashed'

            }

          }

        }

      ],

series: [

        {

          data: operatorDistributionData,

          type: 'bar',

          showBackground: true,

          label: {

            show: true,

            position: 'top',

            color: '#333',

            formatter: function (params) {

              return params.data?.toLocaleString();

            }

          },

          barWidth: '24px'

        }

      ],

grid: {

        left: '30px',

        right: '-30px',

        bottom: '36px',

        containLabel: true

      }

};

    myChart1.setOption(options1);

    window.addEventListener('resize', () => {

      myChart1.resize();

    });

}


/**

 *

 * 横向滚动柱状图

 * @param {number} id

 * @param {number} _this

 */

export function rangkingSrollBar(id, _this, rankingYdata, rankingOptions, rankingOptionsPercent) {

  let echarts2 = _this.$echarts.init(document.getElementById(id));

  let option = {

    color: ['#0697FF'],

    tooltip: {

      trigger: 'axis',

      axisPointer: {

        type: 'shadow'

      },

      backgroundColor: '#fff',

      textStyle: {

        color: '#333'

      },

      formatter: function (params) {

        let firstParams = params[0];

        return (

          firstParams.name +

          '<br>' +

          '数量: ' +

          firstParams.data?.toLocaleString() +

          '<br>' +

          '占比: ' +

          rankingOptionsPercent[firstParams.dataIndex]

        );

      }

    },

    grid: {

      top: '25px',

      left: 85,

      bottom: 0,

      right: '105px'

    },

    xAxis: [

      {

        show: false

      }

    ],

    yAxis: [

      {

        type: 'category',

        data: rankingYdata,

        splitLine: {

          show: false

        },

axisLine: {

          // 隐藏Y轴

          show: false

        },

        axisTick: {

          // 隐藏刻度线

          show: false,

          alignWithLabel: true

        },

axisLabel: {

          align: 'left',

          margin: 85,

          formatter: function(value, index) {

              const indexnum = rankingYdata.indexOf(value);

              // 如果标签长度超过4,将剩余的文字替换为省略号

              if (value.length > 4) {

                  return `{a|${(rankingYdata.length - indexnum)}} ${value.slice(0, 4)}...`;

              } else {

                  return `{a|${(rankingYdata.length - indexnum)}} ${value}`;

              }

          },

lineHeight: 20,

          rich: {

            a: {

              color: '#FFFFFF',

              backgroundColor: '#0697FF',

              borderRadius: 10,

              width: 22,

              height: 14,

              align: 'center',

              verticalAlign: 'middle',

              fontSize: 12,

              lineHeight: 14

            }

          }

     }

      }

    ],

series: [

      {

        type: 'bar',

        data: rankingOptions,

        barWidth: 10,

        label: {

          position: 'right',

          show: true,

          color: '#333',

          formatter: function (params) {

            return `${rankingOptions[params.dataIndex]?.toLocaleString()} {a|${

              rankingOptionsPercent[params.dataIndex]

            }}`;

          },

          rich: {

            a: {

              color: '#2B3DE0'

            }

          }

        }

      }

    ],

dataZoom: [

    {

      type: 'inside',

      startValue: rankingYdata.length,

      endValue: rankingYdata.length - 5,

      minValueSpan: 4,

      maxValueSpan: 4,

      width: '10',

      height: '90%',

      yAxisIndex: [0], // 控制y轴滚动

      fillerColor: 'rgba(154, 181, 215, 1)', // 滚动条颜色

      borderColor: 'rgba(17, 100, 210, 0.12)',

      backgroundColor: '#cfcfcf', // 两边未选中的滑动条区域的颜色

      handleSize: 0, // 两边手柄尺寸

      showDataShadow: false, // 是否显示数据阴影 默认auto

      showDetail: false, // 拖拽时是否展示滚动条两侧的文字

      top: '1%',

      right: '5'

    },

{

      show: true,

      yAxisIndex: 0,

      filterMode: 'empty',

      width: 15,

      height: '88%',

      showDataShadow: false,

      moveHandleStyle: {

        opacity: 0

      },

      handleSize: 0, // 两边手柄尺寸

      showDetail: false, // 拖拽时是否展示滚动条两侧的文字

      fillerColor: 'rgba(154, 181, 215, 1)', // 滚动条颜色

      borderColor: 'rgba(17, 100, 210, 0.12)',

      backgroundColor: '#cfcfcf', // 两边未选中的滑动条区域的颜色

      left: '97%'

    }]

};

  echarts2.setOption(option);

  window.addEventListener('resize', () => {

    echarts2.resize();

  });

}

/**

 * 饼图

 * @param {number} id

 * @param {number} _this

 */

export function drawLine(id, _this) {

  let myChart1 = _this.$echarts.init(document.getElementById(id));

  let options1 = {

    series: [

      {

        name: 'Access From',

        type: 'pie',

        radius: ['70%', '90%'],

        avoidLabelOverlap: false,

        itemStyle: {

          borderColor: '#fff',

          borderWidth: 2

        },

        label: {

          show: false,

          position: 'center'

        },

        labelLine: {

          show: false

        },

        data: _this.opinionData,

        color: [

          new _this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [

            { offset: 0, color: '#158FFF' },

            { offset: 1, color: '#6398FF' }

          ]),

          new _this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [

            { offset: 0, color: '#a9e1fc' },

            { offset: 1, color: '#53bcf5' }

          ]),

          new _this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [

            { offset: 0, color:'#ffca59' },

{ offset: 1, color: '#ffca5a' }

          ]),

          new _this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [

            { offset: 0, color: '#FF927A' },

            { offset: 1, color: '#FFB79F' }

          ]),

          new _this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [

            { offset: 0, color: '#38C46A' },

            { offset: 1, color: '#61DA93' }

          ])

        ]

      }

    ]

  };

myChart1.setOption(options1);

  window.addEventListener('resize', () => {

    myChart1.resize();

  });

}

/**

 * 曲线图

 * @param {number} id

 * @param {number} _this

 * @param {array} arr

 */

export function trendLine(id, _this, arr = ['总数', '电瓶车', '汽车', '换电柜', '充电柜', '门禁']) {

  let echarts3 = _this.$echarts.init(document.getElementById(id));

  let option = {

    color: ['#ff313d', '#2d40e1', '#53bcf5', '#ffca59', '#ff927a', '#38c46a'],

    tooltip: {

      trigger: 'axis',

      position: function (pt, params, dom, rect, size) {

        dom.style.transform = 'translateZ(0)';

        // var obj = { top: 100 };

        // obj[['left', 'right'][+(pt[0] < size.viewSize[0] / 2)]] = 5;

        // return obj;

        // return [pt[0], '20%'];

      },

      formatter: function (params) {

        let firstParams = params[0];

        let str = `<span style='display: flex; padding-top:12px;margin-bottom: 20px;padding-left: 10px;'>${firstParams.name}<br/></span>`;

        params.forEach((item, idx) => {

          str += `<span style='display: flex; justify-content: space-between;line-height: 30px; width: 300px; padding-left:10px;padding-right:16px'><span>${item.marker}${item.seriesName}</span><span'>${item.data?.toLocaleString()}</span></span>`;

        });

        return str;

      },

      transitionDuration: 0,

      backgroundColor: '#FFF',

      extraCssText: 'box-shadow: 0 0 8px 2px rgba(214,220,224,0.3);',

      textStyle: {

        color: '#0F3F62'

      }

    },

legend: {

      x: 'center',

      icon: 'rect',

      itemWidth: 14,

      itemHeight: 5,

      data: [

        {

          name: arr[0],

          itemStyle: {

            color: new _this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [

              {

                offset: 0,

                color: '#FF313D'

              },

              {

                offset: 0.8,

                color: '#FF9789'

              }

            ])

          }

        },

{

          name: arr[1],

          itemStyle: {

            color: new _this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [

              {

                offset: 0,

                color: '#2D40E1'

              },

              {

                offset: 0.8,

                color: '#6398FF'

              }

            ])

          }

        },

{

          name: arr[2],

          itemStyle: {

            color: new _this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [

              {

                offset: 0,

                color: '#53BcF5'

              },

              {

                offset: 0.8,

                color: '#A9E1FC'

              }

            ])

          }

        },

{

          name: arr[3],

          itemStyle: {

            color: new _this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [

              {

                offset: 0,

                color: '#ffca59'

              },

              {

                offset: 0.8,

                color: '#ffca5a'

              }

            ])

          }

        },

{

          name: arr[4],

          itemStyle: {

            color: new _this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [

              {

                offset: 0,

                color: '#FF927a'

              },

              {

                offset: 0.8,

                color: '#FFB79f'

              }

            ])

          }

        },

{

          name: arr[5],

          itemStyle: {

            color: new _this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [

              {

                offset: 0,

                color: '#38c46a'

              },

              {

                offset: 0.8,

                color: '#61da93'

              }

            ])

          }

        }

      ]

    },

grid: {

      left: '0',

      right: '3%',

      bottom: '3%',

      containLabel: true

    },

    xAxis: [

      {

        type: 'category',

        boundaryGap: false,

        data: _this.lineXDate

      }

    ],

yAxis: [

      {

        type: 'value',

        splitLine: {

          show: true,

          lineStyle: {

            type: 'dashed'

          }

        },

        axisLine: {

          show: false

        },

        axisTick: {

          show: false

        }

      }

    ],

series: [

      {

        name: arr[0],

        type: 'line',

        // stack: 'Total',

        smooth: true,

        lineStyle: {

          width: 2,

          color: '#FF313D'

        },

        showSymbol: false,

        areaStyle: {

          opacity: 0.8,

          color: new _this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [

            {

              offset: 0,

              color: 'rgba(255,49,61,0.1)'

            },

            {

              offset: 0.8,

              color: 'rgba(255,49,61,0)'

            }

          ])

        },

        emphasis: {

          focus: 'series'

        },

        data: _this.lineYTotailDate

      },

{

        name: arr[1],

        type: 'line',

        // stack: 'Total',

        smooth: true,

        lineStyle: {

          width: 2,

          color: '#2D40E1'

        },

        showSymbol: false,

        areaStyle: {

          opacity: 0.8,

          color: new _this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [

            {

              offset: 0,

              color: 'rgba(45,64,225,0.1)'

            },

            {

              offset: 0.8,

              color: 'rgba(45,64,225,0)'

            }

          ])

        },

        emphasis: {

          focus: 'series'

        },

        data: _this.lineYBikeDate

      },

{

        name: arr[2],

        type: 'line',

        // stack: 'Total',

        smooth: true,

        lineStyle: {

          width: 2,

          color: '#53BcF5'

        },

        showSymbol: false,

        areaStyle: {

          opacity: 0.8,

          color: new _this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [

            {

              offset: 0,

              color: 'rgba(83,188,245,0.1)'

            },

            {

              offset: 0.8,

              color: 'rgba(83,188,245,0)'

            }

          ])

        },

        emphasis: {

          focus: 'series'

        },

        data: _this.lineYCarDate

      },

{

        name: arr[3],

        type: 'line',

        // stack: 'Total',

        smooth: true,

        lineStyle: {

          width: 2,

          color: '#ffca59'

        },

        showSymbol: false,

        areaStyle: {

          opacity: 0.8,

          color: new _this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [

            {

              offset: 0,

              color: 'rgba(255,202,89,0.1)'

            },

            {

              offset: 0.8,

              color: 'rgba(255,202,89,0)'

            }

          ])

        },

        emphasis: {

          focus: 'series'

        },

        data: _this.lineYExchangeCabinetDate

      },

{

        name: arr[4],

        type: 'line',

        // stack: 'Total',

        smooth: true,

        lineStyle: {

          width: 2,

          color: '#FF927a'

        },

        showSymbol: false,

        label: {

          show: true,

          position: 'top'

        },

        areaStyle: {

          opacity: 0.8,

          color: new _this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [

            {

              offset: 0,

              color: 'rgba(255,146,122,0.1)'

            },

            {

              offset: 0.8,

              color: 'rgba(255,146,122,0)'

            }

          ])

        },

        emphasis: {

          focus: 'series'

        },

        data: _this.lineYChargeCabinetDate

      },

{

        name: arr[5],

        type: 'line',

        // stack: 'Total',

        smooth: true,

        lineStyle: {

          width: 2,

          color: '#38c46a'

        },

        showSymbol: false,

        label: {

          show: true,

          position: 'top'

        },

        areaStyle: {

          opacity: 0.8,

          color: new _this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [

            {

              offset: 0,

              color: 'rgba(56,196,106,0.1)'

            },

            {

              offset: 0.8,

              color: 'rgba(56,196,106,0)'

            }

          ])

        },

        emphasis: {

          focus: 'series'

        },

        data: _this.lineYEntranceGuardDate

      }

    ],

dataZoom: [

      {

        type: 'slider'

      }

    ]

  };

  echarts3.setOption(option);

  window.addEventListener('resize', () => {

    echarts3.resize();

  });

}

ps:以上横向柱状图场景适用于y轴有多个值 且柱状图后有多个数据展示

折线图时间计算方法:

import moment from 'moment';

/**

 * @param {object} value

 * @param {string} type 枚举 趋势图 type为trend

 * @param {Function} callback

 */

export function getParamsData(value, type, callback) {

    let todayDate = moment().subtract(1, 'days').format('YYYY-MM-DD');

    let startDate = moment().subtract(31, 'days').format('YYYY-MM-DD');

    if (type === 'trend') {

      if (value && Object.keys(value).length) {

        if (value.dateRange) {

            let startDateRange = moment(value.dateRange[0]).format('YYYY-MM-DD');

            let endDateRange = moment(value.dateRange[1]).format('YYYY-MM-DD');

            // todo 判断多年,取最近一年,暂时不处理

            // let lastYearDate = moment(value.dateRange[1]).subtract(1, 'year');

            // let lastYearDateRange = moment(value.dateRange[1]).subtract(1, 'year').format('YYYY-MM-DD');

            // if (moment(value.dateRange[0]) < lastYearDate) {

            //     return { ...value, dateRange: `${lastYearDateRange} ~ ${endDateRange};

} else {

return { ...value, dateRange: undefined };

        }

} else {

        return {};

      }

    }

};

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容