首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >电子图表为每个值设置不同的边框半径

电子图表为每个值设置不同的边框半径
EN

Stack Overflow用户
提问于 2021-06-24 15:54:20
回答 1查看 128关注 0票数 1

TLDR

在下面的图表中,一些条形图显示翻转,有没有办法让所有的条形图都显示为“正常”?

简介

我正在制作一个echarts条形图,它可以有多个序列和多个y值。每个条形的值可以是正数也可以是负数,有没有办法根据每个值改变边框半径?

我尝试过的

如果没有正值(忽略0),那么我只使用[0, 0, 10, 10]而不是[10, 10, 0, 0]作为barBorderRadius属性。但只有在只有1个y值的情况下,这才能保证有效。

在下面的示例中,红色的b条显示为“颠倒”,但绿色的b看起来像它应该出现的那样,因为绿色的a没有值。

最小示例

代码语言:javascript
复制
var dom = document.querySelector("#chart");

var data = {
  "red": {
    A: 400,
    B: -200
  },
  "green": {
    A: 0,
    B: -100
  },
  "blue": {
    A: 200,
    B: 0
  }
};
var colors = Object.keys(data);
var types = Object.keys(data[colors[0]]);

var myChart = echarts.init(dom);
myChart.setOption({
  color: colors,
  xAxis: [{
    type: "category",
    data: types
  }],
  yAxis: [{
    type: "value"
  }],
  series: colors.map(function(key) {
    var dataSet = Object.values(data[key]);
    var hasPositive = dataSet.filter(Boolean).some(function(val) {
      return val > 0;
    });
    return {
      name: key,
      type: "bar",
      itemStyle: {
        normal: {
          barBorderRadius: hasPositive ? [10, 10, 0, 0] : [0, 0, 10, 10]
        }
      },
      data: dataSet
    };
  })
});
代码语言:javascript
复制
#chart {
  margin-top: -50px;
  height: 280px;
  width: 400px;
}
代码语言:javascript
复制
<script src="https://lib.baomitu.com/echarts/4.5.0/echarts-en.common.js"></script>
<div id="chart"></div>

EN

回答 1

Stack Overflow用户

发布于 2021-06-28 18:01:42

我找不到另一个答案,所以我只会把我的"hack“发布给其他没有其他方法解决类似问题的人。

我已经将数据分成多个重叠的条形图系列,问题是左边的条形图向左边缘移动,右边的条形图向右边缘移动。

代码语言:javascript
复制
var dom = document.querySelector("#chart");

var data = {
  "red": {
    A: 400,
    B: -200
  },
  "green": {
    A: 0,
    B: -100
  },
  "blue": {
    A: 200,
    B: 0
  }
};
var colors = Object.keys(data);
var types = Object.keys(data[colors[0]]);

var myChart = echarts.init(dom);
myChart.setOption({
  color: colors,
  xAxis: [{
    type: "category",
    data: types
  }],
  yAxis: [{
    type: "value"
  }],
  series: colors.reduce(function(result, color) {

    types.forEach(function(type, index) {
      var value = data[color][type];
      var dataList = "0".repeat(index).split("").map(function() {
        return NaN;
      });
      dataList[index] = value;

      result.push({
        name: color,
        type: "bar",
        barWidth: "25%",
        barGap: "-50%",
        itemStyle: {
          normal: {
            borderColor: color,
            borderWidth: 1,
            barBorderRadius: value < 0 ? [0, 0, 10, 10] : [10, 10, 0, 0]
          }
        },
        data: dataList
      });
    });

    return result;
  }, [])
});
代码语言:javascript
复制
#chart {
  margin-top: -50px;
  height: 280px;
  width: 400px;
}
代码语言:javascript
复制
<script src="https://lib.baomitu.com/echarts/4.5.0/echarts-en.common.js"></script>
<div id="chart"></div>

您可以通过在实数集周围添加更多集来使条居中。您可以添加任意数量的内容,但您必须调整宽度和间距。

代码语言:javascript
复制
var dom = document.querySelector("#chart");

var data = {
  "red": {
    A: 400,
    B: -200
  },
  "green": {
    A: 0,
    B: -100
  },
  "blue": {
    A: 200,
    B: 0
  }
};
var colors = Object.keys(data);
var types = Object.keys(data[colors[0]]);

var myChart = echarts.init(dom);
myChart.setOption({
  color: colors,
  xAxis: [{
    type: "category",
    data: types
  }],
  yAxis: [{
    type: "value"
  }],
  series: colors.reduce(function(result, color) {
    // left padding
    result.push({
      name: color,
      type: "bar",
      barWidth: "25%",
      barGap: "-75%",
      z: 0,
      data: [NaN, NaN]
    });

    types.forEach(function(type, index) {
      var value = data[color][type];
      var dataList = "0".repeat(index).split("").map(function() {
        return NaN;
      });
      dataList[index] = value;
      result.push({
        name: color,
        type: "bar",
        barWidth: "25%",
        barGap: "-75%",
        z: 10,
        itemStyle: {
          normal: {
            borderColor: color,
            borderWidth: 1,
            barBorderRadius: value < 0 ? [0, 0, 10, 10] : [10, 10, 0, 0]
          }
        },
        data: dataList
      });
    });

    // right padding
    result.push({
      name: color,
      type: "bar",
      barWidth: "25%",
      barGap: "-75%",
      z: 0,
      data: [NaN, NaN]
    });
    return result;
  }, [])
});
代码语言:javascript
复制
#chart {
  margin-top: -50px;
  height: 280px;
  width: 400px;
}
代码语言:javascript
复制
<script src="https://lib.baomitu.com/echarts/4.5.0/echarts-en.common.js"></script>
<div id="chart"></div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68111682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档