当前位置:   article > 正文

echarts实现3D柱状图(视觉层面)和3D饼图_echarts 3d

echarts 3d

1.3D柱状图

原理:

立体图形从一个方向只能看到三个面,于是我们通过echarts图表实现 顶部,明面,和暗面。

效果图如下:

需要四份数据,两个柱子的数据+X轴数据+颜色数据,

通过setDatasetColor生成需要的数据,横向柱状图同理,参照代码中注释。

以下是完整案例代码:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf8"></meta>
  5. <script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/5.4.2/echarts.min.js"></script>
  6. </head>
  7. <style>
  8. * {
  9. margin: 0;
  10. padding: 0;
  11. box-sizing: border-box;
  12. }
  13. .border {
  14. border: 1px solid #000;
  15. }
  16. .left {
  17. width: 25%;
  18. height: 100%;
  19. margin: 0 auto;
  20. }
  21. </style>
  22. <body>
  23. <div class="left border">
  24. <div id="litiBar1" style="width:100%;height:400px;background-color: #000;"></div>
  25. </div>
  26. </body>
  27. <script type="text/javascript">
  28. //组织数据
  29. let setData = function(data, constData, showData) {
  30. data.filter(function(item) {
  31. if (item) {
  32. constData.push(1);
  33. showData.push(item);
  34. } else {
  35. constData.push(0);
  36. showData.push({
  37. value: 1,
  38. itemStyle: {
  39. normal: {
  40. borderColor: "rgba(0,0,0,0)",
  41. borderWidth: 2,
  42. color: "rgba(0,0,0,0)",
  43. },
  44. },
  45. });
  46. }
  47. });
  48. }
  49. //组织颜色
  50. let setColor = function(colorArr) {
  51. let color = {
  52. type: "linear",
  53. x: 0,
  54. x2: 1,
  55. y: 0,
  56. y2: 0,
  57. /* 此处决定阴暗面 若为横向柱状图则x,y轴调换
  58. x: 0,
  59. x2: 0,
  60. y: 0,
  61. y2: 1, */
  62. colorStops: [{
  63. offset: 0,
  64. color: colorArr[0],
  65. },
  66. {
  67. offset: 0.5,
  68. color: colorArr[0],
  69. },
  70. {
  71. offset: 0.5,
  72. color: colorArr[1],
  73. },
  74. {
  75. offset: 1,
  76. color: colorArr[1],
  77. },
  78. ],
  79. };
  80. return color
  81. }
  82. var vehicle = [45, 25, 48, 62, 35]
  83. var controlBall = [23, 12, 52, 14, 9]
  84. var barWidth = 30;
  85. var constData1 = [];
  86. var showData1 = [];
  87. var constData2 = [];
  88. var showData2 = [];
  89. setData(vehicle, constData1, showData1)
  90. setData(controlBall, constData2, showData2)
  91. var colorArr1 = ["#345A8B", "#387ABD", "#51C0DB"];
  92. var colorArr2 = ["#51C0DB", "#42D9D6", "#45F5F1"];
  93. var color1 = setColor(colorArr1)
  94. var color2 = setColor(colorArr2)
  95. var option = {
  96. tooltip: {
  97. trigger: 'axis',
  98. axisPointer: {
  99. type: 'shadow'
  100. }
  101. },
  102. legend: {
  103. show: false
  104. },
  105. grid: {
  106. top: '15%',
  107. bottom: '15%'
  108. },
  109. xAxis: {
  110. type: 'category',
  111. axisLabel: {
  112. color: '#FFFFFF'
  113. },
  114. axisLine: {
  115. show: true,
  116. lineStyle: {
  117. color: '#1B3F66'
  118. }
  119. },
  120. axisTick: {
  121. show: false
  122. },
  123. data: ['合肥', '安庆', '芜湖', '南京', '杭州']
  124. },
  125. yAxis: {
  126. type: 'value',
  127. axisLabel: {
  128. color: '#FFFFFF'
  129. },
  130. axisLine: {
  131. show: true,
  132. lineStyle: {
  133. color: '#1B3F66'
  134. }
  135. },
  136. splitLine: {
  137. lineStyle: {
  138. color: '#1B3F66'
  139. }
  140. }
  141. },
  142. series: [{
  143. z: 1,
  144. type: 'bar',
  145. name: '柱子1',
  146. barGap: "15%", //相邻柱子间距
  147. itemStyle: {
  148. borderRadius: [0, 0, 0, 0],//柱子四周圆角
  149. color: color1//柱子左右颜色(深,浅)
  150. },
  151. data: vehicle //Y轴上的高度
  152. },
  153. // ---------------------------------------------
  154. {
  155. z: 2,
  156. name: '柱子1',
  157. type: "pictorialBar",
  158. data: constData1,//此数据对应底部组件
  159. symbol: "diamond",//底部组件形状,不写默认为椭圆
  160. symbolOffset: ["-58%", "50%"],//与柱子的偏移角度
  161. symbolSize: [25, 10],//底面[宽,高]
  162. itemStyle: {
  163. normal: {
  164. color: color1//底面左右颜色(深,浅)
  165. },
  166. },
  167. tooltip: {
  168. show: false,
  169. },
  170. },
  171. {
  172. z: 3,
  173. name: '柱子1',
  174. type: "pictorialBar",
  175. symbolPosition: "end",
  176. data: showData1,//此数据对应顶部组件
  177. symbol: "diamond",
  178. symbolOffset: ["-55%", "-50%"],
  179. symbolSize: [barWidth - 4, (10 * (barWidth - 4)) / barWidth],
  180. itemStyle: {
  181. normal: {
  182. /* borderColor: colorArr1[2],
  183. borderWidth: 2, */ //加上棱角分明
  184. color: colorArr1[2]
  185. },
  186. },
  187. tooltip: {
  188. show: false,
  189. },
  190. }, {
  191. z: 1,
  192. type: 'bar',
  193. name: '柱子2',
  194. itemStyle: {
  195. borderRadius: [0, 0, 0, 0],
  196. color: color2
  197. },
  198. data: controlBall
  199. },
  200. {
  201. z: 2,
  202. name: '柱子2',
  203. type: "pictorialBar",
  204. data: constData2,
  205. symbol: "diamond",
  206. symbolOffset: ["58%", "50%"],
  207. symbolSize: [25, 10], //=========================
  208. itemStyle: {
  209. normal: {
  210. color: color2
  211. },
  212. },
  213. tooltip: {
  214. show: false,
  215. },
  216. },
  217. {
  218. z: 3,
  219. name: '柱子2',
  220. type: "pictorialBar",
  221. symbolPosition: "end",
  222. data: showData2,
  223. symbol: "diamond",
  224. symbolOffset: ["58%", "-50%"],
  225. symbolSize: [barWidth - 4, (10 * (barWidth - 4)) / barWidth],
  226. itemStyle: {
  227. normal: {
  228. /* borderColor: colorArr2[2],
  229. borderWidth: 2, */
  230. color: colorArr2[2]
  231. },
  232. },
  233. tooltip: {
  234. show: false,
  235. },
  236. }
  237. ]
  238. }
  239. let chart1 = echarts.init(document.querySelector("#litiBar1"))
  240. chart1.setOption(option)
  241. </script>
  242. </html>

 2.3D饼图

3D饼图没有标签,实现方式是将2d饼图,旋转一定角度覆盖于3D表面,如果有好的方法,欢迎评论区留下链接

注意:需要引入与echarts版本对应的echarts-gl

效果图如下:

完整代码实例:(根据需要自行调整)

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Ehcarts Demo</title>
  8. <script src="https://cdn.staticfile.org/echarts/4.3.0/echarts.min.js"></script>
  9. <script src="https://echarts.baidu.com/resource/echarts-gl-latest/dist/echarts-gl.min.js"></script>
  10. </head>
  11. <body>
  12. <div class="container">
  13. <div id="chartsContent" style="width:560px;height:150px;"></div>
  14. </div>
  15. <script>
  16. var myChart = echarts.init(document.getElementById('chartsContent'));
  17. // 生成扇形的曲面参数方程,用于 series-surface.parametricEquation
  18. function getParametricEquation(startRatio, endRatio, isSelected, isHovered) {
  19. // 计算
  20. let midRatio = (startRatio + endRatio) / 2;
  21. let startRadian = startRatio * Math.PI * 2;
  22. let endRadian = endRatio * Math.PI * 2;
  23. let midRadian = midRatio * Math.PI * 2;
  24. // 如果只有一个扇形,则不实现选中效果。
  25. if (startRatio === 0 && endRatio === 1) {
  26. isSelected = false;
  27. }
  28. // 计算选中效果分别在 x 轴、y 轴方向上的位移(位移均为 0)
  29. let offsetX = 0;
  30. let offsetY = 0;
  31. // 计算选中效果在 z 轴方向上的位移(未选中,位移均为 0)
  32. let offsetZ = isSelected ? 0.25 : 0;
  33. // 计算高亮效果的放大比例(未高亮,则比例为 1)
  34. let hoverRate = isHovered ? 1.05 : 1;
  35. let tmp = 0;
  36. // 返回曲面参数方程
  37. return {
  38. u: {
  39. min: 0,
  40. max: Math.PI * 2,
  41. step: Math.PI / 100,
  42. },
  43. v: {
  44. min: 0,
  45. max: Math.PI,
  46. step: Math.PI / 50,
  47. },
  48. x: function (u, v) {
  49. if (midRatio - 0.5 < 0) {
  50. if (u < startRadian || u > midRadian + Math.PI) {
  51. tmp =
  52. u - Math.PI - midRadian < 0
  53. ? u + Math.PI - midRadian
  54. : u - Math.PI - midRadian;
  55. return (
  56. offsetX +
  57. ((Math.sin(startRadian) * tmp) /
  58. (Math.PI - midRadian + startRadian)) *
  59. hoverRate
  60. );
  61. }
  62. if (u > endRadian && u < midRadian + Math.PI) {
  63. tmp = midRadian + Math.PI - u;
  64. return (
  65. offsetX +
  66. ((Math.sin(endRadian) * tmp) /
  67. (Math.PI - midRadian + startRadian)) *
  68. hoverRate
  69. );
  70. }
  71. } else {
  72. if (u < startRadian && u > midRadian - Math.PI) {
  73. tmp = u + Math.PI - midRadian;
  74. return (
  75. offsetX +
  76. ((Math.sin(startRadian) * tmp) /
  77. (Math.PI - midRadian + startRadian)) *
  78. hoverRate
  79. );
  80. }
  81. if (u > endRadian || u < midRadian - Math.PI) {
  82. tmp =
  83. midRadian - Math.PI - u < 0
  84. ? midRadian + Math.PI - u
  85. : midRadian - Math.PI - u;
  86. return (
  87. offsetX +
  88. ((Math.sin(endRadian) * tmp) /
  89. (Math.PI - midRadian + startRadian)) *
  90. hoverRate
  91. );
  92. }
  93. }
  94. return offsetX + Math.sin(v) * Math.sin(u) * hoverRate;
  95. },
  96. y: function (u, v) {
  97. if (midRatio - 0.5 < 0) {
  98. if (u < startRadian || u > midRadian + Math.PI) {
  99. tmp =
  100. u - Math.PI - midRadian < 0
  101. ? u + Math.PI - midRadian
  102. : u - Math.PI - midRadian;
  103. return (
  104. offsetY +
  105. ((Math.cos(startRadian) * tmp) /
  106. (Math.PI - midRadian + startRadian)) *
  107. hoverRate
  108. );
  109. }
  110. if (u > endRadian && u < midRadian + Math.PI) {
  111. tmp = midRadian + Math.PI - u;
  112. return (
  113. offsetY +
  114. ((Math.cos(endRadian) * tmp) /
  115. (Math.PI - midRadian + startRadian)) *
  116. hoverRate
  117. );
  118. }
  119. } else {
  120. if (u < startRadian && u > midRadian - Math.PI) {
  121. tmp = u + Math.PI - midRadian;
  122. return (
  123. offsetY +
  124. ((Math.cos(startRadian) * tmp) /
  125. (Math.PI - midRadian + startRadian)) *
  126. hoverRate
  127. );
  128. }
  129. if (u > endRadian || u < midRadian - Math.PI) {
  130. tmp =
  131. midRadian - Math.PI - u < 0
  132. ? midRadian + Math.PI - u
  133. : midRadian - Math.PI - u;
  134. return (
  135. offsetY +
  136. ((Math.cos(endRadian) * tmp) /
  137. (Math.PI - midRadian + startRadian)) *
  138. hoverRate
  139. );
  140. }
  141. }
  142. return offsetY + Math.sin(v) * Math.cos(u) * hoverRate;
  143. },
  144. z: function (u, v) {
  145. return offsetZ + (Math.cos(v) > 0 ? 0.1 : -0.1);
  146. },
  147. };
  148. }
  149. // 生成模拟 3D 饼图的配置项
  150. function getPie3D(pieData) {
  151. let series = [];
  152. let sumValue = 0;
  153. let startValue = 0;
  154. let endValue = 0;
  155. let legendData = [];
  156. // 为每一个饼图数据,生成一个 series-surface 配置
  157. for (let i = 0; i < pieData.length; i++) {
  158. sumValue += pieData[i].value;
  159. let seriesItem = {
  160. name:
  161. typeof pieData[i].name === "undefined"
  162. ? `series${i}`
  163. : pieData[i].name,
  164. type: "surface",
  165. parametric: true,
  166. wireframe: {
  167. show: false,
  168. },
  169. pieData: pieData[i],
  170. pieStatus: {
  171. selected: false,
  172. hovered: false,
  173. },
  174. };
  175. if (typeof pieData[i].itemStyle != "undefined") {
  176. let itemStyle = {};
  177. if (typeof pieData[i].itemStyle.color != "undefined") {
  178. itemStyle.color = pieData[i].itemStyle.color;
  179. }
  180. if (typeof pieData[i].itemStyle.opacity != "undefined") {
  181. itemStyle.opacity = pieData[i].itemStyle.opacity;
  182. }
  183. seriesItem.itemStyle = itemStyle;
  184. }
  185. series.push(seriesItem);
  186. }
  187. // 使用上一次遍历时,计算出的数据和 sumValue,调用 getParametricEquation 函数,
  188. // 向每个 series-surface 传入不同的参数方程 series-surface.parametricEquation,也就是实现每一个扇形。
  189. for (let i = 0; i < series.length; i++) {
  190. endValue = startValue + series[i].pieData.value;
  191. series[i].pieData.startRatio = startValue / sumValue;
  192. series[i].pieData.endRatio = endValue / sumValue;
  193. series[i].parametricEquation = getParametricEquation(
  194. series[i].pieData.startRatio,
  195. series[i].pieData.endRatio,
  196. false,
  197. false
  198. );
  199. startValue = endValue;
  200. legendData.push(series[i].name);
  201. }
  202. // 补充一个透明的圆环,用于支撑高亮功能的近似实现。
  203. series.push({
  204. name: "mouseoutSeries",
  205. type: "surface",
  206. parametric: true,
  207. wireframe: {
  208. show: false,
  209. },
  210. itemStyle: {
  211. opacity: 0,
  212. },
  213. parametricEquation: {
  214. u: {
  215. min: 0,
  216. max: Math.PI * 2,
  217. step: Math.PI / 20,
  218. },
  219. v: {
  220. min: 0,
  221. max: Math.PI,
  222. step: Math.PI / 20,
  223. },
  224. x: function (u, v) {
  225. return Math.sin(v) * Math.sin(u) + Math.sin(u);
  226. },
  227. y: function (u, v) {
  228. return Math.sin(v) * Math.cos(u) + Math.cos(u);
  229. },
  230. z: function (u, v) {
  231. return Math.cos(v) > 0 ? 0.1 : -0.1;
  232. },
  233. },
  234. });
  235. // 准备待返回的配置项,把准备好的 legendData、series 传入。
  236. let option = {
  237. legend: {
  238. show: false,
  239. data: legendData,
  240. },
  241. xAxis3D: {
  242. min: -1,
  243. max: 1,
  244. },
  245. yAxis3D: {
  246. min: -1,
  247. max: 1,
  248. },
  249. zAxis3D: {
  250. min: -1,
  251. max: 1,
  252. },
  253. grid3D: {
  254. show: false,
  255. boxHeight: 200, // 厚度
  256. top: 4,
  257. left: 0,
  258. boxWidth: 244,
  259. viewControl: {
  260. //3d效果可以放大、旋转等,请自己去查看官方配置
  261. alpha: 45, // 角度
  262. beta: 0, // 饼块开始位置角度
  263. rotateSensitivity: 0,
  264. zoomSensitivity: 0,
  265. panSensitivity: 0,
  266. autoRotate: false,
  267. },
  268. light: {
  269. main: {
  270. color: "rgb(85, 84, 84)", // 主光源的颜色。
  271. shadow: true, // 主光源是否投射阴影
  272. alpha: 80, // 主光源绕 x 轴,即上下旋转的角度
  273. },
  274. },
  275. },
  276. series: series,
  277. };
  278. return option;
  279. }
  280. // 监听鼠标事件,实现饼图选中效果(单选),近似实现高亮(放大)效果。
  281. let selectedIndex = '';
  282. let hoveredIndex = '';
  283. // 监听点击事件,实现选中效果(单选)
  284. myChart.on('click', function (params) {
  285. // 从 option.series 中读取重新渲染扇形所需的参数,将是否选中取反。
  286. let isSelected = !option.series[params.seriesIndex].pieStatus.selected;
  287. let isHovered = option.series[params.seriesIndex].pieStatus.hovered;
  288. let startRatio = option.series[params.seriesIndex].pieData.startRatio;
  289. let endRatio = option.series[params.seriesIndex].pieData.endRatio;
  290. // 如果之前选中过其他扇形,将其取消选中(对 option 更新)
  291. if (selectedIndex !== '' && selectedIndex !== params.seriesIndex) {
  292. option.series[selectedIndex].parametricEquation = getParametricEquation(option.series[selectedIndex].pieData.startRatio, option.series[selectedIndex].pieData.endRatio, false, false);
  293. option.series[selectedIndex].pieStatus.selected = false;
  294. }
  295. // 对当前点击的扇形,执行选中/取消选中操作(对 option 更新)
  296. option.series[params.seriesIndex].parametricEquation = getParametricEquation(startRatio, endRatio, isSelected, isHovered);
  297. option.series[params.seriesIndex].pieStatus.selected = isSelected;
  298. // 如果本次是选中操作,记录上次选中的扇形对应的系列号 seriesIndex
  299. isSelected ? selectedIndex = params.seriesIndex : null;
  300. console.log('option-click: ', option)
  301. // 使用更新后的 option,渲染图表
  302. myChart.setOption(option);
  303. });
  304. // 监听 mouseover,近似实现高亮(放大)效果
  305. myChart.on('mouseover', function (params) {
  306. // 准备重新渲染扇形所需的参数
  307. let isSelected;
  308. let isHovered;
  309. let startRatio;
  310. let endRatio;
  311. // 如果触发 mouseover 的扇形当前已高亮,则不做操作
  312. if (hoveredIndex === params.seriesIndex) {
  313. return;
  314. // 否则进行高亮及必要的取消高亮操作
  315. } else {
  316. // 如果当前有高亮的扇形,取消其高亮状态(对 option 更新)
  317. if (hoveredIndex !== '') {
  318. // 从 option.series 中读取重新渲染扇形所需的参数,将是否高亮设置为 false。
  319. isSelected = option.series[hoveredIndex].pieStatus.selected;
  320. isHovered = false;
  321. startRatio = option.series[hoveredIndex].pieData.startRatio;
  322. endRatio = option.series[hoveredIndex].pieData.endRatio;
  323. // 对当前点击的扇形,执行取消高亮操作(对 option 更新)
  324. option.series[hoveredIndex].parametricEquation = getParametricEquation(startRatio, endRatio, isSelected, isHovered);
  325. option.series[hoveredIndex].pieStatus.hovered = isHovered;
  326. // 将此前记录的上次选中的扇形对应的系列号 seriesIndex 清空
  327. hoveredIndex = '';
  328. }
  329. // 如果触发 mouseover 的扇形不是透明圆环,将其高亮(对 option 更新)
  330. if (params.seriesName !== 'mouseoutSeries') {
  331. // 从 option.series 中读取重新渲染扇形所需的参数,将是否高亮设置为 true。
  332. isSelected = option.series[params.seriesIndex].pieStatus.selected;
  333. isHovered = true;
  334. startRatio = option.series[params.seriesIndex].pieData.startRatio;
  335. endRatio = option.series[params.seriesIndex].pieData.endRatio;
  336. // 对当前点击的扇形,执行高亮操作(对 option 更新)
  337. option.series[params.seriesIndex].parametricEquation = getParametricEquation(startRatio, endRatio, isSelected, isHovered);
  338. option.series[params.seriesIndex].pieStatus.hovered = isHovered;
  339. // 记录上次高亮的扇形对应的系列号 seriesIndex
  340. hoveredIndex = params.seriesIndex;
  341. }
  342. // 使用更新后的 option,渲染图表
  343. myChart.setOption(option);
  344. }
  345. });
  346. // 修正取消高亮失败的 bug
  347. myChart.on('globalout', function () {
  348. if (hoveredIndex !== '') {
  349. // 从 option.series 中读取重新渲染扇形所需的参数,将是否高亮设置为 true。
  350. isSelected = option.series[hoveredIndex].pieStatus.selected;
  351. isHovered = false;
  352. startRatio = option.series[hoveredIndex].pieData.startRatio;
  353. endRatio = option.series[hoveredIndex].pieData.endRatio;
  354. // 对当前点击的扇形,执行取消高亮操作(对 option 更新)
  355. option.series[hoveredIndex].parametricEquation = getParametricEquation(startRatio, endRatio, isSelected, isHovered);
  356. option.series[hoveredIndex].pieStatus.hovered = isHovered;
  357. // 将此前记录的上次选中的扇形对应的系列号 seriesIndex 清空
  358. hoveredIndex = '';
  359. }
  360. // 使用更新后的 option,渲染图表
  361. myChart.setOption(option);
  362. });
  363. const colorList = ['#D98053', '#E2B062', '#5A9CF1', '#6ED3D3']
  364. const dataSource = [{
  365. name: "啤酒",
  366. value: 25,
  367. },
  368. {
  369. name: "高粱酒",
  370. value: 25,
  371. },
  372. {
  373. name: "桃花酿",
  374. value: 30,
  375. },
  376. {
  377. name: "白酒",
  378. value: 20,
  379. }]
  380. const paramsList = dataSource.map((item, index) => {
  381. return {
  382. ...item,
  383. shading: 'realistic',
  384. itemStyle: {
  385. color: colorList[index]
  386. },
  387. }
  388. })
  389. // 传入数据生成 option
  390. let option = getPie3D(paramsList);
  391. // 是否需要label指引线,如果要就添加一个透明的2d饼状图并调整角度使得labelLine和3d的饼状图对齐,并再次setOption
  392. option.series.push({
  393. name: '酒水销售占比', //自己根据场景修改
  394. type: 'pie',
  395. hoverAnimation: false,// 悬停不放大
  396. label: {
  397. // position: "bottom",
  398. formatter: function (params) {
  399. return `{percentSty|${params.percent}%}\n{nameSty|${params.name}}`;
  400. },
  401. rich: {
  402. nameSty: {
  403. fontSize: 16,
  404. lineHeight: 22,
  405. fontFamily: "PingFangSC-Regular",
  406. fintWeight: 400,
  407. },
  408. percentSty: {
  409. fontSize: 14,
  410. lineHeight: 20,
  411. fontFamily: "PingFangSC-Regular",
  412. fintWeight: 400,
  413. color: '#FFFFFF',
  414. },
  415. countSty: {
  416. fontSize: 14,
  417. lineHeight: 20,
  418. fontFamily: "PingFangSC-Regular",
  419. fintWeight: 400,
  420. color: '#B9D3ED',
  421. padding: [0, 8, 0, 8],
  422. backgroundColor: 'rgb(90,156,241,0.3)',
  423. borderRadius: 2,
  424. },
  425. },
  426. },
  427. labelLine: {
  428. showAbove: false,
  429. length: 20, // 视觉引导线第一段的长度
  430. length2: 40, // 视觉引导项第二段的长度
  431. lineStyle: {
  432. color: "#686868", // 改变标示线的颜色
  433. width: 1,
  434. type: 'solid', // 线的类型
  435. },
  436. },
  437. startAngle: 60, // 起始角度,支持范围[0, 360]。
  438. clockwise: true, // 饼图的扇区是否是顺时针排布。上述这两项配置主要是为了对齐3d的样式
  439. /* radius: ['40%', '52%'],
  440. center: ['50%', '53%'], */
  441. data: paramsList,
  442. itemStyle: {
  443. opacity: 0 //这里必须是0,不然2d的图会覆盖在表面
  444. }
  445. })
  446. console.log('demo配置参数',option);
  447. myChart.setOption(option)
  448. </script>
  449. <style>
  450. .container {
  451. width: 560px;
  452. height: 164px;
  453. background-color: #000000;
  454. position: relative;
  455. }
  456. .imgContent {
  457. width: 164px;
  458. height: 86px;
  459. position: absolute;
  460. left: 50%;
  461. top: 50%;
  462. transform: translate(-50%, -50%);
  463. z-index: 5;
  464. }
  465. </style>
  466. </body>
  467. </html>

更多参数配置,前往echarts官网查询,传送门

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/82938
推荐阅读
相关标签
  

闽ICP备14008679号