echarts label 设置不同颜色

该代码段展示了一个利用Echarts库创建的复杂图表,包括环形图和柱状图。它使用了线性颜色渐变来美化图表,显示了四个不同的数据类别(省指令、市门口、信访、公安)及其对应的数值。每个类别用不同颜色表示,且通过柱状图显示其相对比例。图表具有自定义的标签格式和防止标签重叠的设置,适合用于数据可视化和分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    drawWhereToAppeal() {
      let myChart = echarts.init(
        document.getElementById("QuantitativeAnalysis")
      );
      var color = [
        {
          type: "linear",
          x: 0,
          y: 0,
          x2: 0,
          y2: 1,
          colorStops: [
            {
              offset: 0,
              color: "#0B2733", // 0% 处的颜色
            },
            {
              offset: 1,
              color: "#27EAC1", // 100% 处的颜色
            },
          ],
        },
        {
          type: "linear",
          x: 0,
          y: 0,
          x2: 0,
          y2: 1,
          colorStops: [
            {
              offset: 0,
              color: "#430926", // 0% 处的颜色
            },
            {
              offset: 1,
              color: "#EF2B67", // 100% 处的颜色
            },
          ],
        },
        {
          type: "linear",
          x: 0,
          y: 0,
          x2: 0,
          y2: 1,
          colorStops: [
            {
              offset: 0,
              color: "#FFB12A", // 0% 处的颜色
            },
            {
              offset: 1,
              color: "#5F400F", // 100% 处的颜色
            },
          ],
        },
        {
          type: "linear",
          x: 0,
          y: 0,
          x2: 0,
          y2: 1,
          colorStops: [
            {
              offset: 0,
              color: "#1D7EA6", // 0% 处的颜色
            },
            {
              offset: 1,
              color: "#27E3FF", // 100% 处的颜色
            },
          ],
        },
      ];
      var getflname = ["省指令", "市门口", "信访", "公安"];
      var getflvalue = [50, 100, 70, 30];
      // 圆环颜色

      // 圆环值
      var data1 = [];
      for (var i = 0; i < getflname.length; i++) {
        data1.push({
          name: getflname[i],
          value: getflvalue[i],
        });
      }
      var seriesOption = [
        {
          name: "",
          type: "pie",

          radius: ["75%", "80%"],
          center: ["50%", "50%"],
          hoverAnimation: false,
          color: "transparent",
          minAngle: 2, // 最小的扇区角度(0~360),用于防止某个值过小导致扇区太小影响交互
          avoidLabelOverlap: true, // 是否启用防止标签重叠策略
          hoverAnimation: false, //是否开启 hover 在扇区上的放大动画效果。
          label: {
            show: true,
            position: "outside",
            padding: [0, 5, 0, 0],
            fontSize: 13,
            // formatter: "{name|{b}}\n{value|{c}}{a|起}",
            formatter: function (params, index) {
              return (
                `{b|▍}{name|` +
                params.name +
                `}\n` +
                `{value|` +
                params.value +
                `}{a|起}`
              );
            },
            rich: {
              a: {
                color: "#ffffff",
                padding: [10, -5, 6, 15],
              },
              b: {
                padding: [0, 2, 6, -10],
                borderRadius: 2,
              },
              name: {
                color: "#ffffff",
                fontSize: 14,
                padding: [0, -20, 6, -1],
                align: "left",
              },
              value: {
                fontSize: 20,
                fontFamily: "Microsoft YaHei",
                fontWeight: "bold",
                padding: [5, -15, 3, -7],
                align: "left",
              },
            },
          },
          labelLine: {
            length: 20,
            length2: 25,
            show: true,
          },
          itemStyle: {
            normal: {
              //label指示线的颜色
              color: (params) => {
                var index = params.dataIndex;
                return this.colorList[index];
              },
            },
          },
          data: data1.map((item, index) => {
            item.label = {
              // label的颜色
              color: this.colorList[index],
            };
            return item;
          }),
        },
      ];
      var sum = 0;
      for (let i in data1) {
        sum += data1[i].value;
      }
      var num = 0;
      const seriesOption2 = data1.map((item, index) => {
        num += (item.value / sum) * 100;

        const a = {
          type: "bar",
          data: [, , , num],
          coordinateSystem: "polar",
          z: 9999 - index,
          name: "",
          roundCap: true,
          color: color[index],
          barGap: "-100%",
          itemStyle: {
            normal: {
              // borderWidth: 6,
              // color: "transparent",
              // borderColor: "#27EAC1",
              shadowBlur: 0,
              shadowColor: color[index],
            },
          },
        };
        return a;
      });

      let option = {
        color: color,
        tooltip: {
          show: false,
          extraCssText: "z-index:3",
        },
        title: [
          {
            text: "`{name|数量}`\n`{name|分析}`",
            top: "center",
            left: "center",
            textStyle: {
              rich: {
                name: {
                  fontSize: 16,
                  fontFamily: "Microsoft YaHei",
                  fontWeight: 400,
                  color: "#DFEEF3",
                  lineHeight: 23,
                },
              },
            },
          },
          // {
          //   text: "单位:个",
          //   top: 20,
          //   left: 20,
          //   textStyle: {
          //     fontSize: 14,
          //     color: "#666666",
          //     fontWeight: 400,
          //   },
          // },
        ],
        legend: {
          show: false,
        },
        angleAxis: {
          axisLine: {
            show: false,
          },
          axisLabel: {
            show: false,
          },
          splitLine: {
            show: false,
          },
          axisTick: {
            show: false,
          },
          min: 0,
          max: 100,
          boundaryGap: ["0", "100"],
          startAngle: 90,
        },
        radiusAxis: {
          type: "category",
          axisLine: {
            show: false,
          },
          axisTick: {
            show: false,
          },
          axisLabel: {
            show: false,
          },
          data: ["a", "b", "c", "d"],
          z: 10,
        },
        polar: {
          radius: "90%",
        },
        toolbox: {
          show: false,
        },
        series: [...seriesOption, ...seriesOption2],
      };
      myChart.setOption(option,true);
    },

### 如何在 ECharts设置不同Label 颜色ECharts 中,可以通过 `label` 的配置项来调整标签的颜色。然而,默认情况下,如果直接通过 `label.color` 进行全局配置,则所有的标签颜色会保持一致[^1]。为了实现每个标签具有不同颜色效果,通常需要借助 `formatter` 和 `rich` 属性来进行更精细的控制。 以下是具体方法以及示例代码: #### 使用 formatter 和 rich 实现个性化颜色 ECharts 提供了 `formatter` 函数用于动态生成标签内容,并结合 `rich` 定义多种样式风格。这种方式允许开发者针对每一条数据单独指定其对应的字体颜色或其他样式属性[^4]。 ```javascript // 示例代码:根据不同 dataIndex 设置不同 label 颜色 var chartDom = document.getElementById('main'); var myChart = echarts.init(chartDom); var option; option = { series: [{ type: 'pie', data: [ { value: 30, name: 'A' }, { value: 70, name: 'B' } ], label: { normal: { formatter: function (params) { let colorMap = ['red', 'blue']; // 自定义颜色数组 return '{colorStyle|' + params.name + '}'; // 应用富文本样式 }, rich: { colorStyle: { color: function () { return ''; // 动态返回对应颜色 } } } } } }] }; myChart.setOption(option); ``` 上述代码片段展示了如何基于索引位置或者名称匹配来自定义各个标签的文字显示逻辑及其关联色彩表现形式。 #### 借助回调函数动态设定颜色 另一种方式则是利用回调机制,在初始化阶段即完成对每一组数据对象附加额外字段(如预设好的颜色值),之后再由这些扩展后的信息驱动最终呈现效果的变化过程[^2]。 ```javascript // 示例代码:预先处理好带有颜色的数据源 const processedData = [ {value: 30, name:'分类 A', itemColor:'#ff5722'}, {value:70 ,name:'分类 B',itemColor:'#9c27b0'} ]; let pieSeriesConfig={ ... label:{ show:true, position:"outside", formatter:function(param){ return param.data.name; }, color:(param)=>{return param.data.itemColor;} } }; ``` 此方案的优势在于能够更加直观地管理复杂场景下的多维度映射关系,同时也便于后期维护与调试工作开展[^3]。 --- ### 注意事项 - 当尝试修改默认行为时,请务必查阅官方最新版本文档确认支持情况。 - 对于大规模数据集渲染性能优化需特别关注,避免因频繁调用计算密集型操作影响用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值