echarts使用极坐标图+雷达图+南丁玫瑰图实现特殊类型的饼图

771 阅读4分钟

ui效果如下图: image.png echarts使用极坐标+雷达+南丁玫瑰实现效果如下:

1720071587238.jpg 废话不多说,直接上图上代码

const arr = [ // series所需名称,数据值和底色
  {
    name: '本底指数',
    value: 80,
    color: {
      type: 'radial',
      x: 0.25,
      y: 1,
      r: 1,
      colorStops: [
        {
          offset: 0,
          color: '#00D17A09', // 0% 处的颜色
        },
        {
          offset: 1,
          color: '#00D17AFF', // 100% 处的颜色
        },
      ],
      global: false, // 缺省为 false
    }
  },
  {
    name: '生境指数',
    value: 100,
    color: {
      type: 'radial',
      x: 0,
      y: 0.5,
      r: 1,
      colorStops: [
        {
          offset: 0,
          color: '#00D17A09', // 0% 处的颜色
        },
        {
          offset: 1,
          color: '#00D17AFF', // 100% 处的颜色
        },
      ],
      global: false, // 缺省为 false
    }
  },
  {
    name: '生物指数',
    value: 88,
    color: {
      type: 'radial',
      x: 0.25,
      y: 0,
      r: 1,
      colorStops: [
        {
          offset: 0,
          color: '#00D17A09', // 0% 处的颜色
        },
        {
          offset: 1,
          color: '#00D17AFF', // 100% 处的颜色
        },
      ],
      global: false, // 缺省为 false
    }
  },
  {
    name: '价值指数',
    value: 62,
    color: {
      type: 'radial',
      x: 0.75,
      y: 0,
      r: 1,
      colorStops: [
        {
          offset: 0,
          color: 'rgba(23, 119, 255, 0.1)', // 0% 处的颜色
        },
        {
          offset: 1,
          color: 'rgba(23, 119, 255, 0.75)', // 100% 处的颜色
        },
      ],
      global: false, // 缺省为 false
    },
  },
  {
    name: '舒适指数',
    value: 99,
    color: {
      type: 'radial',
      x: 1,
      y: 0.5,
      r: 1,
      colorStops: [
        {
          offset: 0,
          color: '#00D17A09', // 0% 处的颜色
        },
        {
          offset: 1,
          color: '#00D17AFF', // 100% 处的颜色
        },
      ],
      global: false, // 缺省为 false
    }
  },
  {
    name: '资源指数',
    value: 40,
    color: {
      type: 'radial',
      x: 0.75,
      y: 1,
      r: 1,
      colorStops: [
        {
          offset: 0,
          color: 'rgba(217, 145, 0, 0.1)', // 0% 处的颜色
        },
        {
          offset: 1,
          color: 'rgba(217, 145, 0, 0.75)', // 100% 处的颜色
        },
      ],
      global: false, // 缺省为 false
    }
  },
];
const series = [{
  z: 9,
  type: 'pie',
  radius: [50, '80%'], // 半径设置
  startAngle: 90, // 起始角度
  roseType: 'area',
  clockwise: true, // 顺时针
  label: { // 不在玫瑰色块显示label
    show: false,
  },
  data: []
}];
arr.forEach((e, index) => {
  series[0].data.push({
    name: e.name,
    value: e.value + 5, // 注意:这里需要调整+5,因为玫瑰图内部直径与极坐标图相差10
    itemStyle: {
      color: e.color
    }
  });
});
option = {
  // 极坐标图设置刻度和刻度值以及环和环外突出的4个顶点刻度
  polar: {
    radius: [63, '80%'],  // 半径设置内环直径比玫瑰图多10
    z:5,
  },
  radiusAxis: {
    min: 0,
    max: 100,
    interval: 20,
    z: 10,
    axisLine: {
      show: true,
      lineStyle: {
        color: 'rgba(134, 144, 156, 0.5)'
      }
    },
    axisLabel: {
      color: '#86909C',
      fontSize: 11,
      fontFamily: 'AlibabaPuHuiTi_3_55_Regular'
    },
    splitLine: {
      show: true,
      lineStyle: {
        color: 'rgba(134, 144, 156, 0.2)',
      }
    }
  },
  angleAxis: {
    type: 'category',
    data: ['a', 'b', 'c', 'd'],
    clockwise: true,
    startAngle: 0,
    splitNumber: 5,
    axisLine: {
      show: false,
    },
    splitLine: {
      show: false
    },
    axisLabel: {
      show: false
    },
    axisTick: {
      show: true,
      lineStyle: {
        type: 'solid',
        color: 'rgba(134, 144, 156, 0.50)'
      }
    },
  },
  // 雷达图
  radar: [
    // 设置环外的label和环内的分隔面的样式,以及label的起始角度
    {
      indicator: [
        { max: 100, text: '本底指数', color: '#86909C' },
        { max: 100, text: '资源指数', color: '#86909C' },
        { max: 100, text: '舒适指数', color: '#86909C' },
        { max: 100, text: '价值指数', color: '#86909C' },
        { max: 100, text: '生物指数', color: '#86909C' },
        { max: 100, text: '生境指数', color: '#86909C' },
        
      ],
      center: ['50%', '50%'],
      radius: [53, '80%'], //预警环(红)
      startAngle: 360 / arr.length,
      splitNumber: 5,
      shape: 'circle',
      splitArea: {
        areaStyle: {
          color: ['#ffffff'],
          shadowBlur: 0
        }
      },
      axisLine: {
        show: false,
      },
      axisName: {
        show: true
      },
      splitLine: {
        show: false,
      },
      axisLabel: {
        show: false,
      },
      z: 6
    },
    // 设置雷达图的虚线分割线,将整个圆切分成12份
    {
      indicator: [
        { max: 100, text: '', color: '#262626' },
        { max: 100, text: '', color: '#262626' },
        { max: 100, text: '', color: '#262626' },
        { max: 100, text: '', color: '#262626' },
        { max: 100, text: '', color: '#262626' },
        { max: 100, text: '', color: '#262626' },
        { max: 100, text: '', color: '#262626' },
        { max: 100, text: '', color: '#262626' },
        { max: 100, text: '', color: '#262626' },
        { max: 100, text: '', color: '#262626' },
        { max: 100, text: '', color: '#262626' },
        { max: 100, text: '', color: '#262626' },
      ],
      center: ['50%', '50%'],
      radius: [53, '80%'],
      startAngle: 0,
      splitNumber: 5,
      shape: 'circle',
      splitArea: {
        areaStyle: {
          color: ['#ffffff'],
          shadowBlur: 0
        }
      },
      axisLine: {
        lineStyle: {
          type: 'dashed',
          color: 'rgba(134, 144, 156, 0.2)'
        }
      },
      axisName: {
        show: false
      },
      splitLine: {
        lineStyle: {
          color: 'rgba(134,144,156,0.15)'
        }
      },
      axisLabel: {
        show: false
      },
      z: 7
    },
    // 将雷达图切分成4份,以实现分隔
    {
      indicator: [
        { max: 100, text: '', color: '#262626' },
        { max: 100, text: '', color: '#262626' },
        { max: 100, text: '', color: '#262626' },
        { max: 100, text: '', color: '#262626' },
      ],
      center: ['50%', '50%'],
      radius: [53, '80%'],
      startAngle: 0,
      splitNumber: 5,
      shape: 'circle',
      splitArea: {
        areaStyle: {
          color: ['#ffffff'],
          shadowBlur: 0
        }
      },
      axisLine: {
        show: true,
        lineStyle: {
          type: 'solid',
          color: 'rgba(134, 144, 156, 0.3)'
        }
      },
      axisName: {
        show: false
      },
      splitLine: {
        show: false
      },
      axisLabel: {
        show: false
      },
      z: 7
    }
  ],
  // 南丁玫瑰图设置
  series: series,
};