案例1
| |
| |
| |
| <!DOCTYPE html> |
| <html lang="en" style="height: 100%"> |
| <head> |
| <meta charset="utf-8"> |
| </head> |
| <body style="height: 100%; margin: 0"> |
| <div id="container" style="width: 400px;height: 350px"></div> |
| |
| <script src="./ecStat.min.js"></script> |
| <script type="text/javascript" src="https://registry.npmmirror.com/echarts/5.5.0/files/dist/echarts.min.js"></script> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <script type="text/javascript"> |
| var dom = document.getElementById('container'); |
| var myChart = echarts.init(dom, null, { |
| renderer: 'canvas', |
| useDirtyRect: false |
| }); |
| var app = {}; |
| |
| var option; |
| |
| |
| echarts.registerTransform(ecStat.transform.histogram); |
| option = { |
| dataset: [ |
| { |
| source: [ |
| [8.3, 143], |
| [8.6, 214], |
| [8.8, 251], |
| [10.5, 26], |
| [10.7, 86], |
| [10.8, 93], |
| [11.0, 176], |
| [11.0, 39], |
| [11.1, 221], |
| [11.2, 188], |
| [11.3, 57], |
| [11.4, 91], |
| [11.4, 191], |
| [11.7, 8], |
| [12.0, 196], |
| [12.9, 177], |
| [12.9, 153], |
| [13.3, 201], |
| [13.7, 199], |
| [13.8, 47], |
| [14.0, 81], |
| [14.2, 98], |
| [14.5, 121], |
| [16.0, 37], |
| [16.3, 12], |
| [17.3, 105], |
| [17.5, 168], |
| [17.9, 84], |
| [18.0, 197], |
| [18.0, 155], |
| [20.6, 125] |
| ] |
| }, |
| { |
| transform: { |
| type: 'ecStat:histogram', |
| config: {} |
| } |
| }, |
| { |
| transform: { |
| type: 'ecStat:histogram', |
| |
| config: { dimensions: [1] } |
| } |
| } |
| ], |
| tooltip: {}, |
| grid: [ |
| { |
| top: '50%', |
| right: '50%' |
| }, |
| { |
| bottom: '52%', |
| right: '50%' |
| }, |
| { |
| top: '50%', |
| left: '52%' |
| } |
| ], |
| xAxis: [ |
| { |
| scale: true, |
| gridIndex: 0 |
| }, |
| { |
| type: 'category', |
| scale: true, |
| axisTick: { show: false }, |
| axisLabel: { show: false }, |
| axisLine: { show: false }, |
| gridIndex: 1 |
| }, |
| { |
| scale: true, |
| gridIndex: 2 |
| } |
| ], |
| yAxis: [ |
| { |
| gridIndex: 0 |
| }, |
| { |
| gridIndex: 1 |
| }, |
| { |
| type: 'category', |
| axisTick: { show: false }, |
| axisLabel: { show: false }, |
| axisLine: { show: false }, |
| gridIndex: 2 |
| } |
| ], |
| series: [ |
| { |
| name: 'origianl scatter', |
| type: 'scatter', |
| xAxisIndex: 0, |
| yAxisIndex: 0, |
| encode: { tooltip: [0, 1] }, |
| datasetIndex: 0 |
| }, |
| { |
| name: 'histogram', |
| type: 'bar', |
| xAxisIndex: 1, |
| yAxisIndex: 1, |
| barWidth: '99.3%', |
| label: { |
| show: true, |
| position: 'top' |
| }, |
| encode: { x: 0, y: 1, itemName: 4 }, |
| datasetIndex: 1 |
| }, |
| { |
| name: 'histogram', |
| type: 'bar', |
| xAxisIndex: 2, |
| yAxisIndex: 2, |
| barWidth: '99.3%', |
| label: { |
| show: true, |
| position: 'right' |
| }, |
| encode: { x: 1, y: 0, itemName: 4 }, |
| datasetIndex: 2 |
| } |
| ] |
| }; |
| |
| if (option && typeof option === 'object') { |
| myChart.setOption(option); |
| } |
| |
| window.addEventListener('resize', myChart.resize); |
| </script> |
| </body> |
| </html> |
- 效果图

案例2
| |
| |
| |
| <!DOCTYPE html> |
| <html lang="en" style="height: 100%"> |
| <head> |
| <meta charset="utf-8"> |
| </head> |
| <body style="height: 100%; margin: 0"> |
| <div id="container" style="width: 400px;height: 350px"></div> |
| |
| <script type="text/javascript" src="https://registry.npmmirror.com/echarts/5.5.0/files/dist/echarts.min.js"></script> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <script type="text/javascript"> |
| var dom = document.getElementById('container'); |
| var myChart = echarts.init(dom, null, { |
| renderer: 'canvas', |
| useDirtyRect: false |
| }); |
| var app = {}; |
| |
| var option; |
| |
| const colorList = [ |
| '#4f81bd', |
| '#c0504d', |
| '#9bbb59', |
| '#604a7b', |
| '#948a54', |
| '#e46c0b' |
| ]; |
| const data = [ |
| [10, 16, 3, 'A'], |
| [16, 18, 15, 'B'], |
| [18, 26, 12, 'C'], |
| [26, 32, 22, 'D'], |
| [32, 56, 7, 'E'], |
| [56, 62, 17, 'F'] |
| ].map(function (item, index) { |
| return { |
| value: item, |
| itemStyle: { |
| color: colorList[index] |
| } |
| }; |
| }); |
| option = { |
| title: { |
| text: 'Profit', |
| left: 'center' |
| }, |
| tooltip: {}, |
| xAxis: { |
| scale: true |
| }, |
| yAxis: {}, |
| series: [ |
| { |
| type: 'custom', |
| renderItem: function (params, api) { |
| var yValue = api.value(2); |
| var start = api.coord([api.value(0), yValue]); |
| var size = api.size([api.value(1) - api.value(0), yValue]); |
| var style = api.style(); |
| return { |
| type: 'rect', |
| shape: { |
| x: start[0], |
| y: start[1], |
| width: size[0], |
| height: size[1] |
| }, |
| style: style |
| }; |
| }, |
| label: { |
| show: true, |
| position: 'top' |
| }, |
| dimensions: ['from', 'to', 'profit'], |
| encode: { |
| x: [0, 1], |
| y: 2, |
| tooltip: [0, 1, 2], |
| itemName: 3 |
| }, |
| data: data |
| } |
| ] |
| }; |
| |
| if (option && typeof option === 'object') { |
| myChart.setOption(option); |
| } |
| |
| window.addEventListener('resize', myChart.resize); |
| </script> |
| </body> |
| </html> |
- 效果图

案例3
| |
| |
| |
| <!DOCTYPE html> |
| <html lang="en" style="height: 100%"> |
| <head> |
| <meta charset="utf-8"> |
| </head> |
| <body style="height: 100%; margin: 0"> |
| <div id="container" style="width: 400px;height: 350px"></div> |
| |
| <script type="text/javascript" src="https://registry.npmmirror.com/echarts/5.5.0/files/dist/echarts.min.js"></script> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <script type="text/javascript"> |
| var dom = document.getElementById('container'); |
| var myChart = echarts.init(dom, null, { |
| renderer: 'canvas', |
| useDirtyRect: false |
| }); |
| var app = {}; |
| |
| var option; |
| |
| const data = [ |
| { value: 800, name: 'A' }, |
| { value: 635, name: 'B' }, |
| { value: 580, name: 'C' }, |
| { value: 484, name: 'D' }, |
| { value: 300, name: 'E' }, |
| { value: 200, name: 'F' } |
| ]; |
| const defaultPalette = [ |
| |
| '#5470c6', |
| '#91cc75', |
| '#fac858', |
| '#ee6666', |
| '#73c0de', |
| '#3ba272', |
| '#fc8452', |
| '#9a60b4', |
| '#ea7ccc' |
| ]; |
| const radius = ['30%', '80%']; |
| const pieOption = { |
| series: [ |
| { |
| type: 'pie', |
| id: 'distribution', |
| radius: radius, |
| label: { |
| show: false |
| }, |
| universalTransition: true, |
| animationDurationUpdate: 1000, |
| data: data |
| } |
| ] |
| }; |
| const parliamentOption = (function () { |
| let sum = data.reduce(function (sum, cur) { |
| return sum + cur.value; |
| }, 0); |
| let angles = []; |
| let startAngle = -Math.PI / 2; |
| let curAngle = startAngle; |
| data.forEach(function (item) { |
| angles.push(curAngle); |
| curAngle += (item.value / sum) * Math.PI * 2; |
| }); |
| angles.push(startAngle + Math.PI * 2); |
| function parliamentLayout(startAngle, endAngle, totalAngle, r0, r1, size) { |
| let rowsCount = Math.ceil((r1 - r0) / size); |
| let points = []; |
| let r = r0; |
| for (let i = 0; i < rowsCount; i++) { |
| |
| let totalRingSeatsNumber = Math.round((totalAngle * r) / size); |
| let newSize = (totalAngle * r) / totalRingSeatsNumber; |
| for ( |
| let k = Math.floor((startAngle * r) / newSize) * newSize; |
| k < Math.floor((endAngle * r) / newSize) * newSize - 1e-6; |
| k += newSize |
| ) { |
| let angle = k / r; |
| let x = Math.cos(angle) * r; |
| let y = Math.sin(angle) * r; |
| points.push([x, y]); |
| } |
| r += size; |
| } |
| return points; |
| } |
| return { |
| series: { |
| type: 'custom', |
| id: 'distribution', |
| data: data, |
| coordinateSystem: undefined, |
| universalTransition: true, |
| animationDurationUpdate: 1000, |
| renderItem: function (params, api) { |
| var idx = params.dataIndex; |
| var viewSize = Math.min(api.getWidth(), api.getHeight()); |
| var r0 = ((parseFloat(radius[0]) / 100) * viewSize) / 2; |
| var r1 = ((parseFloat(radius[1]) / 100) * viewSize) / 2; |
| var cx = api.getWidth() * 0.5; |
| var cy = api.getHeight() * 0.5; |
| var size = viewSize / 50; |
| var points = parliamentLayout( |
| angles[idx], |
| angles[idx + 1], |
| Math.PI * 2, |
| r0, |
| r1, |
| size + 3 |
| ); |
| return { |
| type: 'group', |
| children: points.map(function (pt) { |
| return { |
| type: 'circle', |
| autoBatch: true, |
| shape: { |
| cx: cx + pt[0], |
| cy: cy + pt[1], |
| r: size / 2 |
| }, |
| style: { |
| fill: defaultPalette[idx % defaultPalette.length] |
| } |
| }; |
| }) |
| }; |
| } |
| } |
| }; |
| })(); |
| let currentOption = (option = pieOption); |
| setInterval(function () { |
| currentOption = currentOption === pieOption ? parliamentOption : pieOption; |
| myChart.setOption(currentOption); |
| }, 2000); |
| |
| if (option && typeof option === 'object') { |
| myChart.setOption(option); |
| } |
| |
| window.addEventListener('resize', myChart.resize); |
| </script> |
| </body> |
| </html> |
- 效果图:过渡


【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?