利用echarts的pie实现特定的南格丁图

本文介绍如何使用ECharts实现特殊的半径模式饼状图,并探讨了不同实现方式的优缺点。通过代码示例展示了如何手动创建这种图表,包括设置颜色、排序和特殊效果。

南格丁echarts图(半径模式)

if (this.myMiddleChart != null && this.myMiddleChart !== '' && this.myMiddleChart !== undefined) {
 this.myMiddleChart.clear()// 清除数据,图例
} else {
  var chartDom = this.$refs.pieChart
  this.myMiddleChart = this.$echarts.init(chartDom)
}
var option

option = {
  tooltip: {
    trigger: 'item',
    formatter: '{a} <br/>{b} : {c} ({d}%)'
  },
  color: ['#64D2FF', '#FFCC00', '#FF9500', '#FF5712', '#FF3B30'],
  series: [
    {
      name: '半径模式',
      type: 'pie',
      radius: [30, 140],
      center: ['50%', '50%'],
      roseType: 'radius',
      // itemStyle: {
      //   borderRadius: 5
      // },
      minAngle: 30,
      itemStyle: {
        normal: {
          borderWidth: 4,
          borderColor: '#010019'
        }
      },
      label: {
        show: false
      },
      emphasis: {
        label: {
          show: true
        }
      },
      data: pieData
    }
  ]
}

option && this.myMiddleChart.setOption(option)

手动实现类似南格丁echarts
优点: 每块占得角度一致,半径差距相同,颜色顺序排列
缺点:模块未按照从大到小顺序排列;为实现圆形剩余部分虚线,采用重叠放置,所以不可点击

if (this.myMiddleChart != null && this.myMiddleChart !== '' && this.myMiddleChart !== undefined) {
 this.myMiddleChart.clear()// 清除数据,图例
} else {
  var chartDom = this.$refs.pieChart
  this.myMiddleChart = this.$echarts.init(chartDom)
}
var option
let colorData = ['#64D2FF', '#FFCC00', '#FF9500', '#FF5712', '#FF3B30']
let dataArray = pieData.map((item, index) => {
  return {
    name: '半径模式',
    type: 'pie',
    radius: [20, 140 - 30 * index],
    center: ['50%', '50%'],
    startAngle: 90 - 72 * index,
    // roseType: 'false',
    // itemStyle: {
    //   borderRadius: 5
    // },
    z: pieData.length - index,
    minAngle: 30,
    itemStyle: {
      normal: {
        borderWidth: 4,
        borderColor: '#010019'
      }
    },
    label: {
      show: false
    },
    emphasis: {
      label: {
        show: true
      }
    },
    data: [
      {
        itemStyle: {
          color: colorData[index]
        },
        ...item
      },
      {
        name: '补充',
        value: 4 * item.value,
        itemStyle: {
          color: 'rgba(255,255,255, 0)',
          borderType: 'dashed',
          borderColor: '#272727',
          borderWidth: 1
        }
      }]
  }
})
// console.log(dataArray)
option = {
  // tooltip: {
  //   show: false,
  //   trigger: 'item',
  //   formatter: '{b} <br/> {c} ({d}%)'
  // },
  series: dataArray
}

option && this.myMiddleChart.setOption(option)

手动实现类似南格丁echarts
优点: 每块占得角度一致,半径差距相同,排序前固定每个series的颜色,
缺点:为实现圆形剩余部分虚线,采用重叠放置,所以不可点击

// 1.给原始数组每项设置颜色
handleData(res){
	let getData = []
    let colorData = ['#64D2FF', '#FFCC00', '#FF9500', '#FF5712', '#FF3B30']
     getData = res.data.map((item, index) => {
       return {...item, color: colorData[index]}
     })
     this.initPie(getData)
}
initPie (pieData) {
  if (this.myMiddleChart != null && this.myMiddleChart !== '' && this.myMiddleChart !== undefined) {
    this.myMiddleChart.clear()// 清除数据,图例
  } else {
    var chartDom = this.$refs.pieChart
    this.myMiddleChart = this.$echarts.init(chartDom)
  }
  // 2.对已设置颜色数组进行从大到小排序
  let newData = JSON.parse(JSON.stringify(pieData))
  newData.sort((a, b) => {
    return b.value - a.value
  })
  var option
  let dataArray = newData.map((item, index) => {
    return {
      name: '半径模式',
      type: 'pie',
      radius: [20, 140 - 25 * index],
      center: ['50%', '50%'],
      startAngle: 90 - 72 * index,
      // roseType: 'false',
      // itemStyle: {
      //   borderRadius: 5
      // },
      silent: true,
      z: pieData.length - index,
      minAngle: 30,
      itemStyle: {
        normal: {
          borderWidth: 4,
          borderColor: '#010019'
        }
      },
      label: {
        show: false
      },
      emphasis: {
        label: {
          show: true
        }
      },
      data: [
        {
          itemStyle: {
            color: item.color
          },
          ...item
        },
        {
          name: '补充',
          value: 4 * item.value,
          itemStyle: {
            color: 'rgba(255,255,255, 0)',
            borderType: 'dashed',
            borderColor: '#272727',
            borderWidth: 1
          }
        }]
    }
  })
  // console.log(dataArray)
  option = {
    series: dataArray
  }

  option && this.myMiddleChart.setOption(option)
},

成果图
在这里插入图片描述

### 实现 ECharts 饼图背景图片的方法 要在 ECharts 中为饼图添加背景图片,可以通过 `graphic` 属性实现。以下是详细的说明和代码示例: #### 使用 graphic 添加背景图片 ECharts 提供了 `graphic` 属性,允许用户在图表中嵌入自定义图形元素,比如矩形、圆形以及图像等。为了给饼图添加背景图片,可以在 `graphic` 中指定 `type: 'image'` 来加载外部图片资源,并调整其大小和位置以适配饼图。 ```javascript option = { backgroundColor: '#ffffff', // 设置画布背景颜色 series: [{ type: 'pie', radius: ['50%', '70%'], // 设置饼图内外半径比例 data: [ { value: 40, name: 'A' }, { value: 60, name: 'B' } ] }], graphic: [{ // 背景图片配置 type: 'image', style: { image: 'https://example.com/your-image.png', // 替换为实际图片路径 width: 200, height: 200 }, left: 'center', // 图片水平居中 top: 'center', // 图片垂直居中 z: -10 // 将图片放置到底层 }] }; ``` 上述代码展示了如何通过 `graphic` 属性将一张图片作为背景应用到饼图上[^1]。需要注意的是,`left` 和 `top` 参数分别控制图片的位置,而 `z` 值决定了该图片相对于其他组件的层叠顺序。 #### 自动适应容器尺寸 为了让背景图片能够随着容器的变化自动缩放,可以利用百分比单位代替固定像素值设定宽度与高度。例如,在上面的例子中可改为如下形式: ```javascript style: { image: 'https://example.com/your-image.png', width: '100%', height: '100%' } ``` 这样可以使图片完全填充整个视口区域并保持宽高比例不变。 #### 动态更新背景图片 如果希望动态更改背景图片,则可通过调用 `setOption()` 方法重新入选项对象完成操作。假设我们有一个按钮点击事件触发此逻辑: ```javascript document.getElementById('changeBg').addEventListener('click', function () { myChart.setOption({ graphic: [{ type: 'image', style: { image: 'https://example.com/new-background.png' } }] }); }); ``` 以上方法适用于实时交互场景下切换不同风格或主题的需求[^3]。 --- ### 注意事项 - 如果需要确保图片清晰度,请选用高质量素材文件。 - 对于复杂的布局设计可能涉及额外 CSS 样式配合使用。 - 当前方案仅针对静态展示型需求;若追求更复杂视觉效果建议深入研究官方文档提供更多高级功能支持[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值