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

news2025/1/23 1:10:05

前言

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

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

目录

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

1. 先用echarts画一个饼图

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

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 副标题文本样式
    主标题与副标题的样式属性都一样,就不多做赘述

案例

  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 指定不显示在饼图中的数据

案例

  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 的文本的后面都加上一个 ○,如下:

	// 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

案例

  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)'
        },
    }
  ]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/996444.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++杂货铺】探索stack和queue的底层实现

文章目录 一、stack的介绍和使用1.1 stack的介绍1.2 stack的使用1.2.1 最小栈1.2.2 栈的压入、弹出序列1.2.3 逆波兰表达式求值1.2.4 用栈实现队列 二、queue的介绍和使用2.1 queue的介绍2.2 queue的使用2.2.1 二叉树的层序遍历 三、模拟实现3.1 stack模拟实现3.2 queue模拟实现…

数分面试题2-牛客

1、面对大方差如何解决 1,AB实验场景下,如果一个指标的方差较大表示它的波动较大,那么实验组和对照组的显著差异可能是因为方差较大即随机波动较大。解决方法有:PSM方法、CUPED(方差缩减) PSM代表"Propensity Score Matchin…

【C进阶】分析 C/C++程序的内存开辟与柔性数组(内有干货)

前言: 本文是对于动态内存管理知识后续的补充,以及加深对其的理解。对于动态内存管理涉及的大部分知识在这篇文章中 ---- 【C进阶】 动态内存管理_Dream_Chaser~的博客-CSDN博客 本文涉及的知识内容主要在两方面: 简单解析C/C程序…

CSS宽度问题

一、魔法 为 DOM 设置宽度有哪些方式呢?最常用的是配置width属性,width属性在配置时,也有多种方式: widthmin-widthmax-width 通常当配置了 width 时,不会再配置min-width max-width,如果将这三者混合使…

【数据结构】——排序的相关习题

目录 一、选择填空判断题题型一(插入排序——直接插入排序)题型二(插入排序——折半插入排序)题型三(插入排序——希尔排序)题型四(交换排序——冒泡排序)题型五(交换排序…

Java注解以及自定义注解

Java注解以及自定义注解 要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为 我们提供的元注解和相关定义注解的语法。 1、注解 1.1 注解的官方定义 注解是一种元数据形式。…

OLED透明屏导航:驾驶安全的未来趋势

在不断发展的科技领域中,OLED透明屏技术的出现为导航系统带来了革命性的变革。 今天,尼伽将深入探讨OLED透明屏导航的技术原理和应用前景,展示其在驾驶安全方面的优势,并引用最新的数据、报告和行业动态,以增加可信度…

无涯教程-JavaScript - CUMIPMT函数

描述 CUMIPMT函数返回start_period和end_period之间的贷款累计利息。 语法 CUMIPMT (rate, nper, pv, start_period, end_period, type)争论 Argument描述Required/OptionalRateThe interest rate.RequiredNperThe total number of payment periods.RequiredPvThe present …

产品经理学习笔记

产品文档之BRD、MRD和PRD - 知乎BRD、MRD和PRD一起被认为是从市场到产品需要形成的标准规范文档: 1、BRD(Business Requirement Document),商业需求文档,是一份产品商业论证报告,基于商业目标或价值所描述的…

RocketMQMessageListener使用错误问题分析与排查

背景 RocketMQ与SpingBoot相结合可以大大降低我们开发的复杂度,但是最近在一个新项目中使用RocketMQMessageListener 监听消息,导致消费者启动失败,提示该消费组已经被创建了,请重新申请一个消费者组。 Caused by: org.apache.r…

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…

【新版】系统架构设计师 - 软件架构设计<轻量级架构>

个人总结,仅供参考,欢迎加好友一起讨论 文章目录 架构 - 软件架构设计<轻量级架构>考点摘要轻量级架构表示层业务逻辑层持久层数据库 SSH与SSMHibernate与Mybatis 架构 - 软件架构设计<轻量级架构> 考点摘…

九)Stable Diffussion使用教程:ControlNet

在 ControlNet 出现之前,基于扩散模型的 AI 绘画是极难控制的,因为扩散的过程充满了随机性。 如果只是纯粹自娱自乐,这种随机性并不会带来多大困扰; 但在产业化上应用就难以普及了,因为随机性直接导致的就是缺乏稳定…

【C++漂流记】一文搞懂类与对象中的对象特征

在C中,类与对象是面向对象编程的基本概念。类是一种抽象的数据类型,用于描述对象的属性和行为。而对象则是类的实例,具体化了类的属性和行为。本文将介绍C中类与对象的对象特征,并重点讨论了对象的引用。 文章目录 一、构造函数和…

【云原生进阶之PaaS中间件】第二章Zookeeper-1-综述

1 Zookeeper基础 1.1 简介 ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。 Zookeeper是hadoop的一个子项目,其发…

职场工作与生活

序言: 和很多在CSDN的博主一样,大家在工作之后就很少或者是不再回到CSDN,确实自己也一年多没上了。因为可能当初大家在这就是为了记录和分享当初自己学习技术的东西。而大家走出象牙塔开始工作后,发生了很大的转变。在国内…

2核2G3M带宽服务器腾讯云和阿里云价格、性能对比

2核2G云服务器可以选择阿里云服务器或腾讯云服务器,腾讯云轻量2核2G3M带宽服务器95元一年,阿里云轻量2核2G3M带宽优惠价108元一年,不只是轻量应用服务器,阿里云还可以选择ECS云服务器u1,腾讯云也可以选择CVM标准型S5云…

堆相关例子-最大线段重合问题

问题描述 给定很多线段,每个线段都有两个数[start, end], 表示线段开始位置和结束位置,左右都是闭区间 规定: 1)线段的开始和结束位置一定都是整数值 2)线段重合区域的长度必须>1 返回线段最多重合…

Alibaba(获得店铺的所有商品) API 接口

为了进行电商平台 的API开发,首先我们需要做下面几件事情。 1)开发者注册一个账号 2)然后为每个alibaba应用注册一个应用程序键(App Key) 。 3)下载alibaba API的SDK并掌握基本的API基础知识和调用 4)利…

appium+jenkins实例构建

自动化测试平台 Jenkins简介 是一个开源软件项目,是基于java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。 前面我们已经开完测试脚本,也使用bat 批处…