(data, settings)
| 11 | |
| 12 | // 生成图表的主函数 |
| 13 | function createChart(data, settings) { |
| 14 | // 获取Canvas元素 |
| 15 | const canvas = document.getElementById('chart-canvas'); |
| 16 | const ctx = canvas.getContext('2d'); |
| 17 | |
| 18 | // 如果已有图表,先销毁 |
| 19 | if (window.chartInstance) { |
| 20 | window.chartInstance.destroy(); |
| 21 | } |
| 22 | |
| 23 | // 应用颜色方案 |
| 24 | applyColorScheme(data, settings.colorScheme, settings.type); |
| 25 | |
| 26 | // 配置图表选项 |
| 27 | const options = getChartOptions(settings); |
| 28 | |
| 29 | // 处理特殊图表类型 |
| 30 | let type = settings.type; |
| 31 | let chartData = {...data}; |
| 32 | |
| 33 | // 检查是否为首系列图表类型 |
| 34 | const isFirstSeriesOnly = settings.type.includes(" (首系列)"); |
| 35 | if (isFirstSeriesOnly) { |
| 36 | // 提取真正的图表类型 |
| 37 | type = settings.type.replace(" (首系列)", ""); |
| 38 | |
| 39 | // 只保留第一个数据系列 |
| 40 | if (chartData.datasets.length > 1) { |
| 41 | const firstDataset = chartData.datasets[0]; |
| 42 | chartData.datasets = [{ |
| 43 | ...firstDataset, |
| 44 | label: firstDataset.label || '数据' |
| 45 | }]; |
| 46 | } |
| 47 | } |
| 48 | |
| 49 | // 移除可能存在的旧堆叠设置 |
| 50 | if (options.scales && options.scales.x) { |
| 51 | delete options.scales.x.stacked; |
| 52 | } |
| 53 | if (options.scales && options.scales.y) { |
| 54 | delete options.scales.y.stacked; |
| 55 | } |
| 56 | |
| 57 | // 移除旧的填充设置和其他特殊属性 |
| 58 | chartData.datasets.forEach(dataset => { |
| 59 | delete dataset.fill; |
| 60 | delete dataset.tension; |
| 61 | delete dataset.stepped; |
| 62 | delete dataset.borderDash; |
| 63 | }); |
| 64 | |
| 65 | // 基本图表类型处理 |
| 66 | switch(type) { |
| 67 | // 柱状图系列 |
| 68 | case 'horizontalBar': |
| 69 | type = 'bar'; |
| 70 | options.indexAxis = 'y'; |
no test coverage detected