经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » Echarts » 查看文章
Echarts设置饼状图保证你看的明明白白
来源:cnblogs  作者:南风晚来晚相识  时间:2024/5/11 9:15:31  对本文有异议

简单的饼状图

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>ECharts-动画</title>
  7. <script src="https://cdn.staticfile.net/echarts/4.9.0-rc.1/echarts.js"></script>
  8. </head>
  9. <div style="width: 780px;height: 400px;" id="box"></div>
  10. </body>
  11. <script>
  12. let myChart = echarts.init(document.querySelector('#box'))
  13. // 第一个颜色是从正上方开始的
  14. let option = {
  15. tooltip: {
  16. trigger: 'item'
  17. },
  18. series: [
  19. {
  20. type: 'pie',
  21. center: ['40%', '50%'], // 饼状图的位置
  22. /**
  23. * radius:饼状图的大小
  24. * 它是一个数组,第1个值表示里面的圆的大小
  25. * 第2个值表示外面的圆的大小
  26. * */
  27. radius: ['45%', '60%'],
  28. data: [
  29. { value: 1048, name: '名称1' },
  30. { value: 735, name: '名称2' },
  31. { value: 580, name: '名称3' },
  32. { value: 484, name: '名称4' },
  33. { value: 300, name: '名称5' }
  34. ]
  35. }
  36. ]
  37. }
  38. myChart.setOption(option);
  39. </script>
  40. </html>

给饼状图设置渐变色

  1. ...其他配置,
  2. data:[ 相关数据],
  3. itemStyle: {
  4. normal: {
  5. label: {
  6. padding: [0, 0],
  7. alignTo: 'labelLine'
  8. },
  9. color: (list) => {
  10. let colorList = [
  11. {
  12. "colorStart": "#FF9800",
  13. "colorEnd": "#FFD180"
  14. },
  15. {
  16. "colorStart": "#673AB7",
  17. "colorEnd": "#9575CD"
  18. },
  19. {
  20. "colorStart": "#0F9D58",
  21. "colorEnd": "#4CAF50"
  22. },
  23. {
  24. "colorStart": "#00BCD4",
  25. "colorEnd": "#64FFDA"
  26. },
  27. {
  28. "colorStart": "#E91E63",
  29. "colorEnd": "#FF80AB"
  30. },
  31. ]
  32. return new echarts.graphic.LinearGradient(1, 0, 0, 0, [
  33. {
  34. //左、下、右、上
  35. offset: 0,
  36. color: colorList[list.dataIndex]["colorStart"],
  37. },
  38. {
  39. offset: 1,
  40. color: colorList[list.dataIndex]["colorEnd"],
  41. },
  42. ]);
  43. }
  44. }
  45. },

给饼状图外围配置一条虚线

  1. { //最外部细虚线
  2. // 类型是仪表盘
  3. type: 'gauge',
  4. // 位置必须和饼状图的一样,否者设置出来会有偏差
  5. center: ['40%', '50%'],
  6. /**
  7. * startAngle:仪表盘起始角度。
  8. * 圆心正右手侧为0度,正上方为90度,正左手侧为180度。
  9. * 就是说:逆时针
  10. * */
  11. startAngle: 270,
  12. // endAngle:仪表盘结束角度。最初值是:-89.9999,
  13. endAngle: -90,
  14. // 设置虚线的大小
  15. radius: '75%',
  16. // 不要显示刻度,因为仪表盘式有刻度样式的;我们这里只要圆,不要刻度
  17. // 如果设置为 show: true,就会显示刻度样式
  18. axisTick: {
  19. show: false
  20. },
  21. // false 不显示标签
  22. axisLabel: {
  23. show: false
  24. },
  25. // 仪表盘刻度的分割段数,这里表现是外层虚线之间的间距
  26. // splitNumber: 65 更加直接的表现是外层有65段虚线
  27. splitNumber: 65,
  28. axisLine: {
  29. // 不显示仪表盘轴线。如果设置为true,外层虚线就看不见
  30. show: false,
  31. // lineStyle:仪表盘轴线样式。
  32. // lineStyle: {
  33. // // 仪表盘的轴线可以被分成不同颜色的多段,我们这里始终是同一个颜色 [1, '#E5E6E8']
  34. // color: [
  35. // [0.1, 'red'], // 0~10% 红轴
  36. // [0.2, 'green'], // 10~20% 绿轴
  37. // [0.3, 'blue'], // 20~30% 蓝轴
  38. // ],
  39. // width: 10
  40. // }
  41. },
  42. // 分隔线样式。
  43. splitLine: {
  44. show: true, // 是否显示分隔线。 如果设置为true,外层虚线才能看见
  45. length: 1, // 分隔线与轴线的距离。这里表现是虚线的宽度
  46. lineStyle: {
  47. width: 10, // 分隔线线长。支持相对半径的百分比。
  48. color: '#E5E6E8', // 线的颜色
  49. }
  50. },
  51. // 仪表盘详情,用于显示数据。
  52. detail: {
  53. show: false
  54. },
  55. },

视觉引导线配置

  1. ...其他配置,
  2. data:[ 相关数据],
  3. // 标签的视觉引导线配置
  4. labelLine: {
  5. show: true, // 是否显示视觉引导线
  6. length: 20, // 视觉引导线第一段的长度。
  7. length2: 40, // 视觉引导项第二段的长度。
  8. lineStyle: {
  9. color: '#E5E6E8', // 这里设置扇线颜色为灰色
  10. width: 1, // 线段宽度
  11. type: 'solid', // 线段类型,默认为实线
  12. }
  13. },


为什么hover的时候视觉引导线发生了变化?

  1. 我看官网都不会发生变化.
  2. 是与版本有关还是配置项有关

hover时视觉引导线和对应的名称样式不发生改变

  1. ...其他配置,
  2. data:[ 相关数据],
  3. // 高亮状态的扇区和标签样式 设置饼图外围虚线
  4. emphasis: {
  5. // 这里设置悬停时引导线对应名称的颜色,与非悬停时保持一致
  6. label: {
  7. color: '#333333'
  8. },
  9. labelLine: {
  10. // 这里设置悬停时引导线的颜色,与非悬停时保持一致
  11. lineStyle: {
  12. color: '#E5E6E8'
  13. }
  14. }
  15. }

可以自定义富文本样式

  1. ...其他配置,
  2. data:[ 相关数据],
  3. // 饼图图形上的文本标签,可用于说明图形的一些数据信息,比如值,名称等。
  4. label: {
  5. show: true,
  6. // 标签的位置。
  7. position: 'outside',
  8. normal: {
  9. textStyle: {
  10. color: '#333333' // 设置引导线外层文字描述的颜色
  11. },
  12. // 字符串模板 模板变量有:
  13. // {a}:系列名。
  14. // {b}:数据名。
  15. // {c}:数据值。
  16. // {d}:百分比。
  17. formatter: '{aisB1| {b}}, {aisC1| {c}} {aisD1|{d}%}',
  18. padding: [0, -40], // 设置标签距离引导线水平方向的距离
  19. rich: {
  20. aisB1: {
  21. color: '#333333',
  22. //这里还有其他属性;大家可以去查看
  23. },
  24. aisC1:{
  25. color: '#333333',
  26. },
  27. aisD1: {
  28. color: '#333333', // 这是数据值的颜色
  29. },
  30. }
  31. }
  32. },

名称在引导线的上方-使用\n

  1. 因为是使用的是4.9的版本;
  2. 所以设置名称在引导线的上方使用了一点技巧;
  3. 那就是换行符 \n
  4. formatter: '{aisB1| {b}}, {aisC1| {c}} {aisD1|{d}%}\n\n',

名称在引导线的上方-使用labelLayout 需要再5.0以上版本

  1. ...其他配置,
  2. data:[ 相关数据],
  3. // 从 v5.0.0 开始支持
  4. labelLayout:{
  5. // 标签垂直对齐方式,可以设置'top', 'middle', 'bottom'。
  6. verticalAlign:'bottom',
  7. // 标签在 y 方向上的像素偏移,设置标签在引导线的上方
  8. dy:-4
  9. },

饼状图中间配置一个阴影圆

  1. // 配置里面的圆
  2. {
  3. type: 'gauge',
  4. center: ['40%', '50%'], // 饼状图的位置
  5. radius: '35%',
  6. // 如何是版本是4 这里是359.999;不能是360;否则圆环不能正常显示
  7. // 如果是版本是5,这里可以是360
  8. startAngle: 359.999,
  9. endAngle: 0,
  10. splitNumber: 4,
  11. zlevel: 10,
  12. axisLine: { // 坐标轴线
  13. lineStyle: { // 属性lineStyle控制线条样式
  14. color: [
  15. [1, '#fff']
  16. ],
  17. width: '100%',
  18. shadowColor: '#CDCDCD', //背景阴影颜色
  19. shadowOffsetX: 0, // X偏移量
  20. shadowOffsetY: 0, // Y偏移量
  21. shadowBlur: 10, // 模糊范围
  22. }
  23. },
  24. splitLine: { //分隔线样式
  25. show: false,
  26. },
  27. axisLabel: { //刻度标签
  28. show: false,
  29. },
  30. axisTick: { //刻度样式
  31. show: false,
  32. },
  33. detail: {
  34. show: false,
  35. },
  36. //仪表盘指针。
  37. pointer: {
  38. // 不显示仪表盘中的指针
  39. show: false,
  40. },
  41. title: {
  42. // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。
  43. // 可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
  44. offsetCenter: ['0%', "0%"],
  45. color: '#999999',
  46. },
  47. data: [{
  48. name: "2024-05-09\n15:36:25",
  49. }]
  50. },

全部代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>ECharts-动画</title>
  7. <script src="https://cdn.staticfile.net/echarts/4.9.0-rc.1/echarts.js"></script>
  8. <!-- <script src="https://cdn.staticfile.net/echarts/5.4.3/echarts.js"></script> -->
  9. </head>
  10. <div style="width: 780px;height: 400px;" id="box"></div>
  11. </body>
  12. <script>
  13. let myChart = echarts.init(document.querySelector('#box'))
  14. // 第一个颜色是从正上方开始的
  15. let option = {
  16. tooltip: {
  17. trigger: 'item'
  18. },
  19. series: [
  20. { //最外部细虚线
  21. // 类型是仪表盘
  22. type: 'gauge',
  23. // 位置必须和饼状图的一样,否者设置出来会有偏差
  24. center: ['40%', '50%'],
  25. /**
  26. * startAngle:仪表盘起始角度。
  27. * 圆心正右手侧为0度,正上方为90度,正左手侧为180度。
  28. * 就是说:逆时针
  29. * */
  30. startAngle: 270,
  31. // endAngle:仪表盘结束角度。最初值是:-89.9999,
  32. endAngle: -90,
  33. // 设置虚线的大小
  34. radius: '75%',
  35. // 不要显示刻度,因为仪表盘式有刻度样式的;我们这里只要圆,不要刻度
  36. // 如果设置为 show: true,就会显示刻度样式
  37. axisTick: {
  38. show: false
  39. },
  40. // false 不显示标签
  41. axisLabel: {
  42. show: false
  43. },
  44. // 仪表盘刻度的分割段数,这里表现是外层虚线之间的间距
  45. // splitNumber: 65 更加直接的表现是外层有65段虚线
  46. splitNumber: 65,
  47. axisLine: {
  48. // 不显示仪表盘轴线。如果设置为true,外层虚线就看不见
  49. show: false,
  50. // lineStyle:仪表盘轴线样式。
  51. // lineStyle: {
  52. // // 仪表盘的轴线可以被分成不同颜色的多段,我们这里始终是同一个颜色 [1, '#E5E6E8']
  53. // color: [
  54. // [0.1, 'red'], // 0~10% 红轴
  55. // [0.2, 'green'], // 10~20% 绿轴
  56. // [0.3, 'blue'], // 20~30% 蓝轴
  57. // ],
  58. // width: 10
  59. // }
  60. },
  61. // 分隔线样式。
  62. splitLine: {
  63. show: true, // 是否显示分隔线。 如果设置为true,外层虚线才能看见
  64. length: 1, // 分隔线与轴线的距离。这里表现是虚线的宽度
  65. lineStyle: {
  66. width: 10, // 分隔线线长。支持相对半径的百分比。
  67. color: '#E5E6E8', // 线的颜色
  68. }
  69. },
  70. // 仪表盘详情,用于显示数据。
  71. detail: {
  72. show: false
  73. },
  74. },
  75. // 圆环
  76. {
  77. type: 'pie',
  78. center: ['40%', '50%'], // 饼状图的位置
  79. /**
  80. * radius:饼状图的大小
  81. * 它是一个数组,第1个值表示里面的圆的大小
  82. * 第2个值表示外面的圆的大小
  83. * */
  84. radius: ['45%', '60%'],
  85. itemStyle: {
  86. normal: {
  87. label: {
  88. padding: [0, 0],
  89. alignTo: 'labelLine'
  90. },
  91. color: (list) => {
  92. let colorList = [
  93. {
  94. "colorStart": "#FF9800",
  95. "colorEnd": "#FFD180"
  96. },
  97. {
  98. "colorStart": "#673AB7",
  99. "colorEnd": "#9575CD"
  100. },
  101. {
  102. "colorStart": "#0F9D58",
  103. "colorEnd": "#4CAF50"
  104. },
  105. {
  106. "colorStart": "#00BCD4",
  107. "colorEnd": "#64FFDA"
  108. },
  109. {
  110. "colorStart": "#E91E63",
  111. "colorEnd": "#FF80AB"
  112. },
  113. ]
  114. return new echarts.graphic.LinearGradient(1, 0, 0, 0, [
  115. {
  116. //左、下、右、上
  117. offset: 0,
  118. color: colorList[list.dataIndex]["colorStart"],
  119. },
  120. {
  121. offset: 1,
  122. color: colorList[list.dataIndex]["colorEnd"],
  123. },
  124. ]);
  125. }
  126. }
  127. },
  128. // 标签的视觉引导线配置
  129. labelLine: {
  130. show: true, // 是否显示视觉引导线
  131. length: 20, // 视觉引导线第一段的长度。
  132. length2: 50, // 视觉引导项第二段的长度。
  133. lineStyle: {
  134. color: '#E5E6E8', // 这里设置扇线颜色为灰色
  135. width: 1, // 线段宽度
  136. type: 'solid', // 线段类型,默认为实线
  137. }
  138. },
  139. // 从 v5.0.0 开始支持 标签的统一布局配置。
  140. labelLayout:{
  141. // 标签垂直对齐方式,可以设置'top', 'middle', 'bottom'。
  142. verticalAlign:'bottom',
  143. // 标签在 y 方向上的像素偏移,设置标签在引导线的上方
  144. dy:-4
  145. },
  146. // 饼图图形上的文本标签,可用于说明图形的一些数据信息,比如值,名称等。
  147. label: {
  148. show: true,
  149. // 标签的位置。
  150. position: 'outside',
  151. normal: {
  152. textStyle: {
  153. color: '#333333' // 设置引导线外层文字描述的颜色
  154. },
  155. // 字符串模板 模板变量有:
  156. // {a}:系列名。
  157. // {b}:名称。
  158. // {c}:数据值。
  159. // {d}:百分比。
  160. formatter: '{aisB1| {b}}, {aisC1| {c}} {aisD1|{d}%}',
  161. padding: [0, -40], // 设置标签距离引导线水平方向的距离
  162. rich: {
  163. aisB1: {
  164. color: '#333333',
  165. },
  166. aisC1: {
  167. color: '#333333',
  168. },
  169. aisD1: {
  170. color: '#333333', // 这是数据值的颜色
  171. },
  172. }
  173. }
  174. },
  175. data: [
  176. { value: 1048, name: '名称1' },
  177. { value: 735, name: '名称2' },
  178. { value: 580, name: '名称3' },
  179. { value: 484, name: '名称4' },
  180. { value: 300, name: '名称5' }
  181. ],
  182. // 高亮状态的扇区和标签样式 设置饼图外围虚线
  183. emphasis: {
  184. // 这里设置悬停时引导线对应名称的颜色,与非悬停时保持一致
  185. label: {
  186. color: '#333333'
  187. },
  188. labelLine: {
  189. // 这里设置悬停时引导线的颜色,与非悬停时保持一致
  190. lineStyle: {
  191. color: '#E5E6E8'
  192. }
  193. }
  194. }
  195. },
  196. // 配置里面的圆
  197. {
  198. type: 'gauge',
  199. center: ['40%', '50%'], // 饼状图的位置
  200. radius: '35%',
  201. // 如何是版本是4 这里是359.999;不能是360;否则圆环不能正常显示
  202. // 如果是版本是5,这里可以是360
  203. startAngle: 359.999,
  204. endAngle: 0,
  205. splitNumber: 4,
  206. zlevel: 10,
  207. axisLine: { // 坐标轴线
  208. lineStyle: { // 属性lineStyle控制线条样式
  209. color: [
  210. [1, '#fff']
  211. ],
  212. width: '100%',
  213. shadowColor: '#CDCDCD', //背景阴影颜色
  214. shadowOffsetX: 0, // X偏移量
  215. shadowOffsetY: 0, // Y偏移量
  216. shadowBlur: 10, // 模糊范围
  217. }
  218. },
  219. splitLine: { //分隔线样式
  220. show: false,
  221. },
  222. axisLabel: { //刻度标签
  223. show: false,
  224. },
  225. axisTick: { //刻度样式
  226. show: false,
  227. },
  228. detail: {
  229. show: false,
  230. },
  231. //仪表盘指针。
  232. pointer: {
  233. // 不显示仪表盘中的指针
  234. show: false,
  235. },
  236. title: {
  237. // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。
  238. // 可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
  239. offsetCenter: ['0%', "0%"],
  240. color: '#999999',
  241. },
  242. data: [{
  243. name: "2024-05-09\n15:36:25",
  244. }]
  245. },
  246. ]
  247. }
  248. myChart.setOption(option);
  249. </script>

原文链接:https://www.cnblogs.com/IwishIcould/p/18182022

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号