用极坐标下的条形图实现带圆角的环形图(代码可直接使用)

我们项目中要实现这样一个图:

嗯,看起来呢,就是个环图,所以我直接用环图实现了,但是UI走查的时候说,我的设计稿红色部分是圆角,你的是直角,嗯,确实是这样子,那我就找相应API来实现这个圆角,无果……

后来搜大家的实现方案,是用极坐标下的条形图来实现的,这下可难为住我了,好在有个同学实现了,我也参考着实现了一下。如下代码所示。

最终有个小bug,因为这两个颜色所对应的图表是叠加的,所以在点击图例的时候,尤其是点击test2后,会只剩下红色,但是红色只显示一小部分,也就是当前图中这一块。经排查发现,是angleAxis里面的Max值的缘故,所以注释掉了,具体原因我不是很清楚。

下述代码可直接复制到Echarts中看效果 

option = {
  color: ['#FF5656', '#5C94FF'],
  tooltip: {
    trigger: 'item',
    textStyle: {
      color: '#FFF'
    },
    backgroundColor: 'rgba(0,0,0, 0.6)',
    borderColor: 'transparent',
    formatter: function(data) {
      let value = data.seriesIndex === 1 ? data.data.data : data.value;
      return `<span style="color: ${data.color}; font-size: 10px;"> ● </span><span>${data.data.name}: ${value}%</span>`;
    },
  },
  legend: {
    show: true,
    data: ['test1', 'test2'],
    orient: 'vertical',
    align: 'left',
    right: '10%',
    top: 'middle',
    icon: 'circle',
    itemWidth: 10,
    itemHeight: 10,
    textStyle: {
      fontSize: 12,
      color: '#38436A',
      lineHeight: 13,
      borderRadius: 20
    },
    pageIconSize: 6,
    formatter: function (name) {
      let data = option.series;
      let tarValue;
      for (let i = 0; i < data.length; i++) {
        if (data[i].name === name) {
          tarValue = data[i].data[0].data >= 0 ? data[i].data[0].data : data[i].data[0].value;
        }
      }
      return name + ' ' + tarValue + '%';
    }
  },
  angleAxis: {
    // max: 100,
    clockwise: false, // 逆时针
    // 隐藏刻度线
    axisLine: {
      show: false
    },
    axisTick: {
      show: false
    },
    axisLabel: {
      show: false
    },
    splitLine: {
      show: false
    }
  },
  radiusAxis: {
    type: 'category',
    // 隐藏刻度线
    axisLine: {
      show: false
    },
    axisTick: {
      show: false
    },
    axisLabel: {
      show: false
    },
    splitLine: {
      show: false
    }
  },
  polar: {
    center: ['40%', '50%'],
    radius: '90%' //图形大小
  },
  series: [{
    type: 'bar',
    data: [{
          name: 'test1',
          value: 10,
          itemStyle: {
            normal: {
              color: '#FF5656'
            }
          },
        }],
    name: 'test1',
    coordinateSystem: 'polar',
    roundCap: true,
    barWidth: 10,
    barGap: '-100%', // 两环重叠
    z: 2,
    emphasis: {
      focus: 'series'
    }
  }, {
    type: 'bar',
    data: [{
          name: 'test2',
          value: 100,
          data: 90,
          itemStyle: {
            color: '#5C94FF',
            shadowColor: '#EFF0F8',
            shadowBlur: 1,
            // shadowOffsetY: 2
          }
        }],
    name: 'test2',
    coordinateSystem: 'polar',
    roundCap: true,
    barWidth: 10,
    barGap: '-100%', // 两环重叠
    z: 1,
    emphasis: {
      focus: 'series'
    }
  }],
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Delicia_Lani

你的鼓励将是我写作的动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值