如何用echarts画一个好看的饼图

news/2024/7/24 12:01:07 标签: echarts, 前端, javascript

前言

最近有个需求,需要绘制一个饼图,为此我根据这次需求来整理了一下关于 echarts 饼图绘制的一些知识点,在这次需求中我需要用到的属性我会详细讲解,其他的属性我会粗略地说一下(并加入其他博主的文章的跳转),综合案例在后续博客中更新。

注意: 有些属性只有新版示例中才有,老版本的无法生效,如:borderRadius

目录

  • 前言
  • 1. 先用echarts画一个饼图
  • 2. 分析一下饼图的结构及其属性值
    • 2.2 legend
      • 属性详解
    • 2.4 label
    • 2.5 tooltip
    • 2.6 series
  • 3. formatter 语法

echarts_10">1. 先用echarts画一个饼图

直接在官网找一个最基础的饼图案例:

javascript">option = {
  title: {
    text: 'Referer of a Website',
    subtext: 'Fake Data',
    left: 'center'
  },
  tooltip: {
    trigger: 'item'
  },
  legend: {
    orient: 'vertical',
    left: 'left'
  },
  series: [
    {
      name: 'Access From',
      type: 'pie',
      radius: '50%',
      data: [
        { value: 1048, name: 'Search Engine' },
        { value: 735, name: 'Direct' },
        { value: 580, name: 'Email' },
        { value: 484, name: 'Union Ads' },
        { value: 300, name: 'Video Ads' }
      ],
      emphasis: {
        itemStyle: {
          shadowBlur: 10,
          shadowOffsetX: 0,
          shadowColor: 'rgba(0, 0, 0, 0.5)'
        }
      }
    }
  ]
};

然后你就得到了一个这样的最基础的饼图:

2. 分析一下饼图的结构及其属性值

接下来我们就可以来分析一下这个饼图的构造了,这样我们后续才好优化,其主要结构如下图:

那么就根据上图来说明一下饼图的属性值了,从最简单的 title 开始:

2.1 title

title

  • show 是否显示标题,默认为true
  • text 主标题
  • subtext 副标题
  • x 水平位置,可选值 left、right、center
  • y 垂直位置,可选值 top、center、bottom

    注意: 还可以用 leftrighttopbottom 四个属性来精确设置 title 的位置,效果可参考 position 中的 leftrighttopbottom

  • backgroundColor 标题背景色
  • borderWidth 标题边框线宽
  • borderColor 标题边框颜色
    必须先设置了 backgroundColor ,border 属性才会生效
  • padding
  • itemGap 主副标题纵向间隔,只能填数字
  • textStyle 主标题文本样式
    • fontFamily
    • fontSize
    • fontStyle
    • fontWeight
    • color
    • lineHeight
    • textBorderColor 字体描边颜色
    • textBorderWidth 字体描边宽度,只填数字
    • textShadowColor 阴影颜色
    • textShadowBlur 阴影长度
    • textShadowOffsetX 阴影水平偏移
    • textShadowOffsetY 阴影垂直偏移
  • subtextStyle 副标题文本样式
    主标题与副标题的样式属性都一样,就不多做赘述

案例

javascript">  title: {
    text: '一个饼图',
    subtext: '不断优化中',
    x: 'center',
    y: 'top',
    itemGap: 13,
    textStyle: {
      fontFamily: "华文隶书",
      fontSize: 28,
      fontStyle: "italic",
      textBorderColor: "#01deff",
      textBorderWidth: 2,
      textShadowColor: "#d7f8fc",
      textShadowBlur: 3,
      textShadowOffsetX: 5,
      textShadowOffsetY: 5
    },
    subtextStyle: {
      fontSize: 18,
       fontFamily: "华文隶书",
       fontStyle: "italic",
      textBorderColor: "#01deff",
      textBorderWidth: 2,
    }
  },

2.2 legend

属性详解

这个就是左边那几个标识了,其由两部分组成,如下:

legend

  • orient 图例的排列,vertical 垂直、horizontal 水平
  • x 水平位置,水平位置,可选值 left、right、center
  • y 垂直位置,可选值 top、center、bottom

    注意: 还可以用 leftrighttopbottom 四个属性来精确设置 title 的位置,效果可参考 position 中的 leftrighttopbottom

  • backgroundColor 背景颜色
  • borderColor 边框颜色
  • borderWidth 边框宽度
  • padding
  • itemGap 图例之间的间距,只填数字
  • icon 图标类型:
    • circle 圆形
    • rect 矩形
    • roundRect 圆角矩形(默认)
    • triangle 三角形
    • diamond 菱形
    • pin 地图标记图标
    • arrow 箭头
    • none 无图标
  • itemHeight 控制 icon 高度
  • itemWidth 控制 icon 宽度
  • align 调整 icon 相对于文本的位置(left——icon在文本左边、right、auto)
  • textStyle 设置文本样式,参考 title 章节的文本样式
  • selected 指定不显示在饼图中的数据

案例

javascript">  legend: {
    orient: 'vertical',
    // left: 33,
    x: 'right',
    y: 'center',
    itemGap: 20,
    icon: 'circle',
    align: 'left',
    selected: {
          'Direct': false,
          'Email': false
    }
  },

legend 中的 formatter

formatter 可以自定义每个图例的文本内容,可用在 tooltiplegendlabel 中,不过一般是用在 legend 中。

现在我有一个需求,我要让 legend 的文本的后面都加上一个 ○,如下:

javascript">	// name 对应的是 series.data 中的 name 属性
    formatter: function (name) {
      return name + '   ○';
    }

更详细的使用请见后续的综合案例。

2.4 label

label

  • show 是否显示,默认为 true
  • backgroundColor 背景颜色
  • borderColor 边框颜色
  • borderWidth 边框宽度
  • borderRadius 边框圆角
  • padding 内边距

因为这次需求中不需要管 label 长啥样,我直接 show: false 了,也就没去研究了,其余的属性可以见以下两篇博客:

https://www.hangge.com/blog/cache/detail_3130.html

https://blog.csdn.net/qq_38718629/article/details/126892957

2.5 tooltip

tooltip

  • show 是否显示,默认 true
  • trigger 触发类型
    • item 数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用
    • axis 坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用
    • none 不触发
  • axisPointer 轴指针属性,trigger: ‘axis’ 时使用,这里不做赘述
  • showContent 是否显示提示框浮层,默认 true
  • alwaysShowContent 是否永远显示提示框内容,默认(false)情况下在移出可触发提示框区域后一定时间后隐藏
  • triggerOn 提示框触发的条件
    • mousemove 鼠标悬浮时触发(默认)
    • click 鼠标点击时触发
    • mousemove|click 移动或点击时触发
    • none 无法触发
  • confine 是否将 tooltip 框限制在图表的区域内,默认 false
  • backgroundColor 背景色
  • padding
  • textStyle 设置文本样式,参考 title 章节的文本样式
  • borderWidth 边框宽度
  • borderColor 边框颜色

    使用默认的边框样式,它会根据饼图颜色来绘制边框

  • formatter 见 legend 中的 formatter

2.6 series

这个是可操作属性最多的组成部分了,其属性值也是最多的。

series

  • name tooltip 的标题文字
  • type 图标类型,如:pie、category、line
  • roseType 将普通饼图转换成南丁格尔图
    • radius 扇区圆心角展现数据的百分比,半径展现数据的大小
    • area 扇区圆心角的半径展现数据的大小(从大到小顺时针渲染)
    • none 普通饼图(默认)
  • radius 饼图大小,可用 px、%

    注意:

    • 如果只有一个属性值,则是实心饼图,属性值为饼图大小
    • 如果有两个属性值,如:['60%', '70%'],第一个值表示内圈大小,第二个表示外圈大小
  • center 饼图圆心所在位置,可用 px、%,如:['40%', '50%']
  • avoidLabelOverlap 是否避免标签重叠,默认为 false
  • color 饼图扇叶颜色,与 data 中的数据匹配
  • data 饼图渲染数据
  • emphasis 当鼠标悬浮时,饼图扇叶的变化
    • focus 在高亮图形时,是否淡出其它数据的图形已达到聚焦的效果
      • none 不淡出其它图形(默认)
      • self 只聚焦(不淡出)当前高亮的数据的图形
      • series series
    • blurScope 在开启 focus 的时候,可以通过 blurScope 配置淡出的范围
      • coordinateSystem 淡出范围为坐标系(默认)
      • series 淡出范围为系列
      • global 淡出范围为全局
  • itemStyle 饼图扇叶样式
    • shadowColor 阴影颜色
    • shadowBlur 阴影长度
    • shadowOffsetX 阴影水平偏移
    • shadowOffsetY 阴影垂直偏移
    • borderRadius 边框圆角
    • borderColor 边框颜色
    • borderWidth 边框宽度

    注意: 可以在 emphasis 设置 itemStyle

案例

javascript">  series: [
    {
      name: 'Access From',
      type: 'pie',
      radius: ['60%', '70%'],
      center: ['50%', '50%'],
      roseType: 'area',
      data: [
        { value: 1048, name: 'Search Engine' },
        { value: 735, name: 'Direct' },
        { value: 580, name: 'Email' },
        { value: 484, name: 'Union Ads' },
        { value: 300, name: 'Video Ads' }
      ],
      label: {
        show: false
      },
      itemStyle: {
          borderRadius: '10%',
          shadowBlur: 10,
          shadowOffsetX: 0,
          shadowColor: 'rgba(0, 0, 0, 0.5)'
        },
    }
  ]

3. formatter 语法

看这篇文章:https://blog.csdn.net/qq_39442804/article/details/78202256 写得巨好


http://www.niftyadmin.cn/n/5018710.html

相关文章

Nuxtjs在linux环境下部署笔记

问题:Nuxtjs在linux环境下部署,ip端口无法访问? 一 、解决方案 方案一:修改package.json文件 添加如下配置: "config": {"nuxt": {"host": "0.0.0.0","port":…

信息系统工程监理课程内容

第一部分 卢学哲专家1-5天内容 Day01 1 信息监理的发展史 发展史 背景 对数字敏感 时间:是否有交叉 重叠 成本:各种相关费用 工程量:硬件软件的数量,工作量的大小 1988年出现的信息监理2 信息监理工程师的职业素养 公平 公…

怎样做思维导图?教你这样轻松制作

怎样做思维导图?思维导图是一种非常有用的工具,它可以帮助你更好地组织和展示你的想法。无论是个人使用还是团队协作,思维导图都是一个非常好的选择。在制作思维导图时,有很多工具可以使用,那么今天就给大家来介绍一下…

记录socket的使用 | TCP/IP协议下服务器与客户端之间传送数据 | java学习笔记

谨以此篇,记录TCP编程,方便日后查阅笔记 注意:用BufferedWriter write完后,一定要flush;否则字符不会进入流中。去看源码可知:真正将字符写入的不是write(),而是flush()。 服务器端代码&#…

华为回击:制裁无法阻挡中国科技创新 | 百能云芯

华为最新推出的Mate 60 Pro手机引发了中国市场的抢购热潮,这一成功的举措为华为带来了信心。华为在这个背景下再度推出两款新机,其中包括高阶版的Mate 60 Pro和折叠式手机Mate X5。这两款手机在首批预购开始后迅速售罄,不仅取得了市场的热烈欢…

java并发编程 ConcurrentLinkedQueue详解

文章目录 1 ConcurrentLinkedQueue是什么2 核心属性详解3 核心方法详解3.1 add(E e)3.2 offer(E e)3.3 poll()3.4 size()3.5 并发情况分析 4 总结 1 ConcurrentLinkedQueue是什么 ConcurrentLinkedQueue是一个无界的并发队列,和LinkedBlockingQueue相比&#xff0c…

Ubuntu22.04安装及显卡驱动问题

自己有window系统,想搞个ubuntu系统玩玩 一、Ubuntu22.04安装 首先去官网下载ubuntu系统,我下载的是22.04 https://cn.ubuntu.com/download/desktop 准备一个启动盘制作器Rufus,将下载好的镜像烤制到U盘 制作完u盘,进入bios更…

字符编码(idea)

File----------settings-------------Editor------------File Encodings