Echarts雷达图单独设置拐点颜色,边框颜色,区域颜色

html 复制代码
<template>
 <div id="echartBasic"></div>
</template>
<script>
import * as echarts from 'echarts'
export default {
 mounted() {
    var chartDom = document.getElementById('echartBasic')
    var myChart = echarts.init(chartDom)
    const dataObject = [
      {
        name: 'E',
        value: 3000
      },
      {
        name: 'S',
        value: 3000
      },
      {
        name: 'T',
        value: 3000
      },
      {
        name: 'J',
        value: 2000
      },
      {
        name: 'I',
        value: 3000
      },
      {
        name: 'N',
        value: 2500
      },
      {
        name: 'F',
        value: 3500
      },
      {
        name: 'P',
        value: 4000
      }
    ]
    const dataArray = dataObject.map(n => n.value)
    const minNum = Math.min(...dataArray)
    const maxNum = Math.max(...dataArray)
    const zhongNum = (maxNum - minNum) / 3 + minNum
    const option = {
      title: {},
      legend: {
        data: []
      },
      radar: [
        // 虚线
        {
          center: ['50%', '50%'],
          radius: 70,
          shape: 'circle',
          splitNumber: 4,
          color: ['#FFA939'],
          axisName: {
            formatter: '{value}',
            fontSize: 16,
            fontWeight: 'bolder',
            color: 'rgba(1, 242, 182, 1)'
          },
          splitArea: {
            areaStyle: {
              color: ['transparent', 'transparent', 'rgba(114, 172, 209, 0)', 'transparent', 'rgba(114, 172, 209, 0)']
            }
          },
          axisLine: {
            lineStyle: {
              color: '#E3E3E3'
            }
          },
          splitLine: {
            lineStyle: {
              color: '#E3E3E3',
              type: 'dashed' //dashed  solid dotted 射线类型【实线 虚线】
            }
          },
          indicator: dataObject.map(n => ({
            name: n.name,
            max: maxNum,
            color: n.value >= zhongNum ? '#01F2B6' : '#D9D9D9'
          }))
        },
        // 实线
        {
          center: ['50%', '50%'],
          radius: 70,
          indicator: dataObject.map(() => ({max: maxNum})),
          splitNumber: 1,
          shape: 'circle',
          splitArea: {
            show: false
          },
          axisLine: {
            show: false
          },
          splitLine: {
            lineStyle: {
              color: '#E3E3E3',
              type: 'solid',
              width: 4
            }
          }
        }
      ],
      series: [
        {
          name: 'Budget vs spending',
          type: 'radar',
          data: [
            // 真实的
            {
              symbol: 'none',
              value: dataArray,
              itemStyle: {
                normal: {
                  color: 'rgba(25, 255, 198, 0.8)' //拐点颜色
                }
              },
              lineStyle: {
                width: 2,
                labelLine: {
                  color: 'rgba(25, 255, 198, 0.8)' //拐点边框颜色
                }
              },
              areaStyle: {
                // 区域颜色
                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                  {offset: 0, color: 'rgba(171, 255, 129, 1)'},
                  {offset: 1, color: 'rgba(25, 255, 198, 1)'}
                ])
              }
            },
            // 虚假的
            {
              symbol: 'none',
              value: dataObject.map(() => zhongNum),
              itemStyle: {
                normal: {
                  color: 'rgba(182, 235, 255, 0.5)' //拐点颜色
                }
              },
              lineStyle: {
                width: 2,
                labelLine: {
                  color: 'rgba(182, 235, 255, 0.5)' //拐点边框颜色
                }
              },
              areaStyle: {
                // 区域颜色
                color: new echarts.graphic.LinearGradient(0, 0, 0, 0.1, [
                  {offset: 0, color: 'rgba(226, 249, 255, 0.5)'},
                  {offset: 1, color: 'rgba(182, 235, 255, 0.5)'}
                ])
              }
            },
            // 拐点
            ...dataObject.map((n, index) => {
              return {
                type: 'radar',
                // 除了当前的,其他的设置无限大
                value: dataObject.map((_, i) => (i == index ? maxNum : maxNum * 100)),
                z: 2,
                itemStyle: {
                  normal: {
                    color: n.value >= zhongNum ? '#01F2B6' : '#D9D9D9'
                  }
                },
                lineStyle: {
                  width: 0,
                  labelLine: {
                    show: false //隐藏标示线
                  }
                }
              }
            })
            // {
            //   value: dataObject.map(() => maxNum),
            //   itemStyle: {
            //     normal: {
            //       color: '#01F2B6'
            //     }
            //   },
            //   lineStyle: {
            //     width: 0,
            //     labelLine: {
            //       show: false //隐藏标示线
            //     }
            //   }
            // }
          ]
        }
      ]
    }
    option && myChart.setOption(option)
  },
}
</script>
<style>
   #echartBasic {
      width: 210px;
      height: 210px;
      margin: 10px auto 8px auto;
    }
</style>
相关推荐
摸鱼仙人~14 分钟前
Redux Toolkit 快速入门指南:createSlice、configureStore、useSelector、useDispatch 全面解析
开发语言·javascript·ecmascript
程序员小张丶1 小时前
基于React Native开发HarmonyOS 5.0主题应用技术方案
javascript·react native·react.js·主题·harmonyos5.0
teeeeeeemo1 小时前
Vue数据响应式原理解析
前端·javascript·vue.js·笔记·前端框架·vue
Sahas10191 小时前
__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined.
前端·javascript·vue.js
Jinxiansen02111 小时前
Vue 3 实战:【加强版】公司通知推送(WebSocket + token 校验 + 心跳机制)
前端·javascript·vue.js·websocket·typescript
JohnYan2 小时前
Bun技术评估 - 05 SQL
javascript·后端·bun
前端农民晨曦2 小时前
深入浏览器事件循环与任务队列架构
前端·javascript·面试
Spider_Man2 小时前
JavaScript对象那些坑:初学者必踩的“陷阱”与进阶秘籍
前端·javascript
我在北京coding2 小时前
Uncaught ReferenceError: process is not defined
前端·javascript·vue.js
用户2018792831672 小时前
如何利用AI工具快速学习Android源码
android