案例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: 800px;height: 350px"></div> |
| |
| |
| <script type="text/javascript" src="https://registry.npmmirror.com/echarts/5.4.3/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; |
| |
| option = { |
| title: { |
| text: 'World Population' |
| }, |
| tooltip: { |
| trigger: 'axis', |
| axisPointer: { |
| type: 'shadow' |
| } |
| }, |
| legend: {}, |
| grid: { |
| left: '3%', |
| right: '4%', |
| bottom: '3%', |
| containLabel: true |
| }, |
| xAxis: { |
| type: 'value', |
| boundaryGap: [0, 0.01] |
| }, |
| yAxis: { |
| type: 'category', |
| data: ['Brazil', 'Indonesia', 'USA', 'India', 'China', 'World'] |
| }, |
| series: [ |
| { |
| name: '2011', |
| type: 'bar', |
| data: [18203, 23489, 29034, 104970, 131744, 630230] |
| }, |
| { |
| name: '2012', |
| type: 'bar', |
| data: [19325, 23438, 31000, 121594, 134141, 681807] |
| } |
| ] |
| }; |
| |
| 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.4.3/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; |
| |
| option = { |
| tooltip: { |
| trigger: 'axis', |
| axisPointer: { |
| |
| type: 'shadow' |
| } |
| }, |
| legend: {}, |
| grid: { |
| left: '3%', |
| right: '4%', |
| bottom: '3%', |
| containLabel: true |
| }, |
| xAxis: { |
| type: 'value' |
| }, |
| yAxis: { |
| type: 'category', |
| data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] |
| }, |
| series: [ |
| { |
| name: 'Direct', |
| type: 'bar', |
| stack: 'total', |
| label: { |
| show: true |
| }, |
| emphasis: { |
| focus: 'series' |
| }, |
| data: [320, 302, 301, 334, 390, 330, 320] |
| }, |
| { |
| name: 'Mail Ad', |
| type: 'bar', |
| stack: 'total', |
| label: { |
| show: true |
| }, |
| emphasis: { |
| focus: 'series' |
| }, |
| data: [120, 132, 101, 134, 90, 230, 210] |
| }, |
| { |
| name: 'Affiliate Ad', |
| type: 'bar', |
| stack: 'total', |
| label: { |
| show: true |
| }, |
| emphasis: { |
| focus: 'series' |
| }, |
| data: [220, 182, 191, 234, 290, 330, 310] |
| }, |
| { |
| name: 'Video Ad', |
| type: 'bar', |
| stack: 'total', |
| label: { |
| show: true |
| }, |
| emphasis: { |
| focus: 'series' |
| }, |
| data: [150, 212, 201, 154, 190, 330, 410] |
| }, |
| { |
| name: 'Search Engine', |
| type: 'bar', |
| stack: 'total', |
| label: { |
| show: true |
| }, |
| emphasis: { |
| focus: 'series' |
| }, |
| data: [820, 832, 901, 934, 1290, 1330, 1320] |
| } |
| ] |
| }; |
| |
| 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: 600px;height: 350px"></div> |
| |
| |
| <script type="text/javascript" src="https://registry.npmmirror.com/echarts/5.4.3/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 rawData = [ |
| [100, 302, 301, 334, 390, 330, 320], |
| [320, 132, 101, 134, 90, 230, 210], |
| [220, 182, 191, 234, 290, 330, 310], |
| [150, 212, 201, 154, 190, 330, 410], |
| [820, 832, 901, 934, 1290, 1330, 1320] |
| ]; |
| const totalData = []; |
| for (let i = 0; i < rawData[0].length; ++i) { |
| let sum = 0; |
| for (let j = 0; j < rawData.length; ++j) { |
| sum += rawData[j][i]; |
| } |
| totalData.push(sum); |
| } |
| const grid = { |
| left: 100, |
| right: 100, |
| top: 50, |
| bottom: 50 |
| }; |
| const series = [ |
| 'Direct', |
| 'Mail Ad', |
| 'Affiliate Ad', |
| 'Video Ad', |
| 'Search Engine' |
| ].map((name, sid) => { |
| return { |
| name, |
| type: 'bar', |
| stack: 'total', |
| barWidth: '60%', |
| label: { |
| show: true, |
| formatter: (params) => Math.round(params.value * 1000) / 10 + '%' |
| }, |
| data: rawData[sid].map((d, did) => |
| totalData[did] <= 0 ? 0 : d / totalData[did] |
| ) |
| }; |
| }); |
| option = { |
| legend: { |
| selectedMode: false |
| }, |
| grid, |
| yAxis: { |
| type: 'value' |
| }, |
| xAxis: { |
| type: 'category', |
| data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] |
| }, |
| series |
| }; |
| |
| if (option && typeof option === 'object') { |
| myChart.setOption(option); |
| } |
| |
| window.addEventListener('resize', myChart.resize); |
| </script> |
| </body> |
| </html> |
- 效果图

案例4
| |
| |
| |
| <!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: 600px;height: 350px"></div> |
| |
| |
| <script type="text/javascript" src="https://registry.npmmirror.com/echarts/5.4.3/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 rawData = [ |
| [100, 302, 301, 334, 390, 330, 320], |
| [320, 132, 101, 134, 90, 230, 210], |
| [220, 182, 191, 234, 290, 330, 310], |
| [150, 212, 201, 154, 190, 330, 410], |
| [820, 832, 901, 934, 1290, 1330, 1320] |
| ]; |
| const totalData = []; |
| for (let i = 0; i < rawData[0].length; ++i) { |
| let sum = 0; |
| for (let j = 0; j < rawData.length; ++j) { |
| sum += rawData[j][i]; |
| } |
| totalData.push(sum); |
| } |
| const grid = { |
| left: 100, |
| right: 100, |
| top: 50, |
| bottom: 50 |
| }; |
| const gridWidth = myChart.getWidth() - grid.left - grid.right; |
| const gridHeight = myChart.getHeight() - grid.top - grid.bottom; |
| const categoryWidth = gridWidth / rawData[0].length; |
| const barWidth = categoryWidth * 0.6; |
| const barPadding = (categoryWidth - barWidth) / 2; |
| const series = [ |
| 'Direct', |
| 'Mail Ad', |
| 'Affiliate Ad', |
| 'Video Ad', |
| 'Search Engine' |
| ].map((name, sid) => { |
| return { |
| name, |
| type: 'bar', |
| stack: 'total', |
| barWidth: '60%', |
| label: { |
| show: true, |
| formatter: (params) => Math.round(params.value * 1000) / 10 + '%' |
| }, |
| data: rawData[sid].map((d, did) => |
| totalData[did] <= 0 ? 0 : d / totalData[did] |
| ) |
| }; |
| }); |
| const color = ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de']; |
| const elements = []; |
| for (let j = 1, jlen = rawData[0].length; j < jlen; ++j) { |
| const leftX = grid.left + categoryWidth * j - barPadding; |
| const rightX = leftX + barPadding * 2; |
| let leftY = grid.top + gridHeight; |
| let rightY = leftY; |
| for (let i = 0, len = series.length; i < len; ++i) { |
| const points = []; |
| const leftBarHeight = (rawData[i][j - 1] / totalData[j - 1]) * gridHeight; |
| points.push([leftX, leftY]); |
| points.push([leftX, leftY - leftBarHeight]); |
| const rightBarHeight = (rawData[i][j] / totalData[j]) * gridHeight; |
| points.push([rightX, rightY - rightBarHeight]); |
| points.push([rightX, rightY]); |
| points.push([leftX, leftY]); |
| leftY -= leftBarHeight; |
| rightY -= rightBarHeight; |
| elements.push({ |
| type: 'polygon', |
| shape: { |
| points |
| }, |
| style: { |
| fill: color[i], |
| opacity: 0.25 |
| } |
| }); |
| } |
| } |
| option = { |
| legend: { |
| selectedMode: false |
| }, |
| grid, |
| yAxis: { |
| type: 'value' |
| }, |
| xAxis: { |
| type: 'category', |
| data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] |
| }, |
| series, |
| graphic: { |
| elements |
| } |
| }; |
| |
| if (option && typeof option === 'object') { |
| myChart.setOption(option); |
| } |
| |
| window.addEventListener('resize', myChart.resize); |
| </script> |
| </body> |
| </html> |
- 效果图

· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术