import { Component, OnInit } from '@angular/core'; import { addMilliseconds, format } from 'date-fns'; import { CommomService } from 'src/app/core/services/commom.service'; @Component({ selector: 'app-test-base-bar-sub-chart', templateUrl: './test-base-bar-sub-chart.component.html', styleUrls: ['./test-base-bar-sub-chart.component.scss'] }) export class TestBaseBarSubChartComponent implements OnInit { constructor( private commonService: CommomService ) { } fileName: string = "各城市降雨量"; chartTitle: string = "测试基础柱状图"; loading: boolean = true; data; legend: boolean = true; position: string = 'bottom'; barData //条形图data bcacChartTitle = "达标率"; translateionNum: number = 0; tooltipUnit: string = ""; bcacTooltip; negativeBarData; negativeBarLoading: boolean = false; pyramidChartData; //金字塔图 stackColumnData; //堆叠柱状图数据 basicLineChartData;//基础折线图数据 bigDataLineChartData; //大数据量折线图 multiLineChartData; //点值折线图 basicPieChartData; //基础饼图 basicPieChartSeriesName; //基础饼图系列 rosePieChartData//玫瑰图数据 roseType: string; ngOnInit() { this.initChart(); this.initBarChart(); this.initNegativeBarChart(); this.initPyramidChart(); this.initBasicLineChart(); this.initBigDataLineChart(); this.initPointValueLineChart(); this.initStackColumnChart(); this.initBasicPieChart(); this.initRosePieChart(); } initChart() { this.data = { seriesName: ['东京', '纽约', '伦敦', '柏林'], xData: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'], yData: [["49.9", "71.5", "106.4", "129.2", "144.0", "176.0", "135.6", "148.5", "216.4", "194.1", "95.6", "54.4"], [83.6, 78.8, 98.5, 93.4, 106.0, 84.5, 105.0, 104.3, 91.2, 83.5, 106.6, 92.3], [48.9, 38.8, 39.3, 41.4, 47.0, 48.3, 59.0, 59.6, 52.4, 65.2, 59.3, 51.2], [42.4, 33.2, 34.5, 39.7, 52.6, 75.5, 57.4, 60.4, 47.6, 39.1, 46.8, 51.1]], markLine: [ [{ type: 'max' }, { type: 'min' }], null, [{ type: 'average' }, { type: 'min' }] ], } } initBarChart() { let chartData = { yData: ["东城", "西城", '朝阳', '丰台', '石景山', '海淀', '顺义', '通州', '大兴', '房山', '门头沟', '昌平', '平谷', '密云', '怀柔', '延庆'], xData: [], seriesName: ['昼间达标率'], }; function getVirtualData() { chartData.seriesName.forEach(legend => { let xData = [] chartData.yData.forEach(yCategory => { xData.push(Math.floor(Math.random() * 100).toFixed(1)); }); xData = xData.sort((a, b) => { return a - b; }) chartData.xData.push(xData) }); } getVirtualData(); this.barData = chartData; this.translateionNum = 55; this.tooltipUnit = "%" } initNegativeBarChart() { let datas = makeData(50, 7, 16); let style = this.commonService.changeFontSize(); style.interval.right = "110"; this.bcacTooltip = { tooltipUnit: "%", translationNumber: 60 } let params = { datas: datas, seriesNames: [ "东城区", "西城区", "朝阳区", "丰台区", "石景山区", "海淀区", "门头沟区", "房山区", "通州区", "顺义区", "昌平区", "大兴区", "怀柔区", "平谷区", "密云区", "延庆区" ], }; this.negativeBarData = params; // 数据模拟 function makeData(baseValue, number, seriesNumber): any[] { let seriesDatas = []; for (let j = 0; j < seriesNumber; j++) { let datas = []; if (j % 3 == 0) { baseValue = 40; } else { baseValue = 70; } let funcZones = ["0类", "1类", "2类", "3类", "4a类", "4b类"]; if (number > funcZones.length) { number = funcZones.length; } for (let i = 0; i < number; i++) { let value = ( baseValue + 10 * Math.random() ).toFixed(1); datas.push([funcZones[i], value]); } seriesDatas.push(datas); } return seriesDatas; } } initPyramidChart() { this.tooltipUnit = "%" let tempDataArr1 = ['-100', '-99', '-96', '-91', '-90', '-87', '-86', '-85', '-81', '-79', '-76', '-74', '-73', '-69', '-67', '-65', '-63', '-60'] let tempDataArr2 = tempDataArr1.map(item => { return Math.abs(+item).toFixed(0); }) let data = { seriesName: ['昼间', '夜间'], stack: '达标率', xData: [tempDataArr1, tempDataArr2], yData: ["东城", "西城", '朝阳', '丰台', '石景山', '海淀', '顺义', '通州', '大兴', '房山', '门头沟', '昌平', '平谷', '密云', '怀柔', '延庆'], } this.pyramidChartData = data; } initBasicLineChart() { let simulateData = makeData(); let style = this.commonService.changeFontSize(); style.interval.right = "30"; let params = { customGrid: style.interval, xAxisDatas: simulateData.xAxisDatas, seriesNames: simulateData.seriesNames, datas: simulateData.datas, markLine: simulateData.markLine, markArea: simulateData.markArea }; this.basicLineChartData = params; function makeData() { let data = { xAxisDatas: ["10-01", "10-02", "10-03", "10-04", "10-05", "10-06", "10-07"], // yNameGap: 30, seriesNames: ["会展中心站", "匡达制药厂", "造纸七厂", "兴谷开发区"], datas: [ [58.1, 60.4, 64.2, 50.8, 51.8, 64.5, 57.4], [57.1, 58.4, 63.4, 51.8, 51.5, 62.5, 62.1], [59.5, 60.4, 57.5, 50.0, 54.2, 57.2, 51.4], [60.5, 61.4, 58.5, 51.0, 55.2, 58.2, 60.5] ], markLine: [ [{ name: '最大值', type: 'max' }, { name: '最小值', type: 'min' }], false, [{ name: '平均值', type: 'average' }] ], markArea: [ [ [{ name: '开始高峰', xAxis: '10-01' }, { xAxis: '10-03' }], [{ name: '结束高峰', xAxis: '10-05' }, { xAxis: '10-06' }], ], [ [{ name: '开始高峰', xAxis: '10-03' }, { xAxis: '10-04' }], [{ name: '结束高峰', xAxis: '10-06' }, { xAxis: '10-07' }], ] ] }; return data; } } initBigDataLineChart() { this.bigDataLineChartData = { datas: [makeData(3000, 57), makeData(3000, 60.1)], seriesNames: ["Leq", "Lmax"], }; function makeData(num, level) { let datas = []; let a, b; let dateTime = new Date("2020-10-01 00:00:00"); for (let i = 0; i < num; i++) { if (i % 30 === 0) { a = 2 * Math.random(); } if (i % 30 === 0) { b = 2 * Math.random(); } dateTime = addMilliseconds(dateTime, 1000); datas.push([ format(dateTime, "yyyy-MM-dd HH:mm:ss"), (level + 2 * Math.sin(i / 50) + a + b + Math.random()).toFixed(2), ]); } return datas; } } initPointValueLineChart() { this.multiLineChartData = makeData() function makeData() { let xAxisDatas = ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']; let seryNames = []; let datas = []; for (let i = 1; i < 16; i++) { seryNames.push('监测站点' + i); let subDatas = []; for (let j = 0; j < 12; j++) { subDatas.push((50 + 20 * Math.random()).toFixed(2)); } datas.push(subDatas); } // let dataObj = { // xAxisDatas: xAxisDatas, // seriesNames: seriesNames, // datas:datas // }; return { xAxisDatas: xAxisDatas, seryNames: seryNames, datas: datas }; } } initStackColumnChart() { let data = { seriesName: ['大型车', '大型车', '中小型车', '中小型车',], stack: ['昼间', '夜间', '昼间', '夜间'], xData: ['0类', '1类', '2类', '3类', '4a类', '4b类'], yData: [[0, 12, 240, 404, 580, 640], [12, 20, 210, 774, 864, 856], [200, 564, 300, 646, 560, 604], [365, 416, 445, 506, 564, 654]], // tooltipFormatter: (params) => { // let another; // if (params.seriesIndex % 2 == 0) { // another = data.yData[2 - params.seriesIndex][params.dataIndex] // } else { // another = data.yData[4 - params.seriesIndex][params.dataIndex] // } // let total = params.value + another; // let str = ''; // str += params.name + '-' + data.stack[params.seriesIndex] + '
'; // str += '' + params.seriesName + ': ' + params.value + '
' // str += ' 总量: ' + total + '
' // return str; // } } this.stackColumnData = data; } initBasicPieChart() { this.basicPieChartSeriesName = '区域声环境质量等级比例'; this.basicPieChartData = [ { value: 123, name: '一级' }, { value: 311, name: '二级' }, { value: 102, name: '三级' }, { value: 28, name: '四级' }, { value: 8, name: '五级' } ] } initRosePieChart() { this.roseType = "radius" this.rosePieChartData = [ { value: 10, name: 'rose1' }, { value: 5, name: 'rose2' }, { value: 15, name: 'rose3' }, { value: 25, name: 'rose4' }, { value: 20, name: 'rose5' }, { value: 35, name: 'rose6' }, { value: 30, name: 'rose7' }, { value: 40, name: 'rose8' }, { value: 45, name: 'rose9' }, { value: 60, name: 'rose10' }, { value: 61, name: 'rose11' }, ] } selected($event) { console.log($event) } updateData() { this.data = { seriesName: ['xxx',], xData: ['一', '二'], yData: [["50.0", "71.5", "106.4"]], yAxisName: '降雨量(mm)', tooltipUnit: 'mm', } } over($event){ } calcFn = function ($event) { console.log($event) } }