代码之家  ›  专栏  ›  技术社区  ›  Jacopo Sciampi

有棱角的图表.js海图比例尺

  •  0
  • Jacopo Sciampi  · 技术社区  · 7 年前

    我在用图表.js在角度图上取得一些结果。我要找的是有一个数字,每隔50毫秒就会改变一次。我做了这个,这是一个掠夺者:

    https://plnkr.co/edit/GEu6seOu1fbh9dnuSjMV?p=preview

    包.json:

    "dependencies": {
        "@angular/animations": "^5.2.0",
        "@angular/common": "^5.2.0",
        "@angular/compiler": "^5.2.0",
        "@angular/core": "^5.2.0",
        "@angular/forms": "^5.2.0",
        "@angular/http": "^5.2.0",
        "@angular/platform-browser": "^5.2.0",
        "@angular/platform-browser-dynamic": "^5.2.0",
        "@angular/router": "^5.2.0",
        "chart.js": "^2.7.2",
        "core-js": "^2.4.1",
        "rxjs": "^5.5.6",
        "zone.js": "^0.8.19"
      },
      "devDependencies": {
        "@angular/cli": "1.6.5",
        "@angular/compiler-cli": "^5.2.0",
        "@angular/language-service": "^5.2.0",
        "@types/jasmine": "~2.8.3",
        "@types/jasminewd2": "~2.0.2",
        "@types/node": "~6.0.60",
        "@types/chart.js": "2.7.19",
        "codelyzer": "^4.0.1",
        "jasmine-core": "~2.8.0",
        "jasmine-spec-reporter": "~4.2.1",
        "karma": "~2.0.0",
        "karma-chrome-launcher": "~2.2.0",
        "karma-cli": "~1.0.1",
        "karma-coverage-istanbul-reporter": "^1.2.1",
        "karma-jasmine": "~1.1.0",
        "karma-jasmine-html-reporter": "^0.2.2",
        "protractor": "~5.1.2",
        "ts-node": "~4.1.0",
        "tslint": "~5.9.1",
        "typescript": "~2.5.3"
      }
    

    组件.ts:

    import { Component, OnDestroy, ElementRef, OnInit, AfterViewInit } from '@angular/core';
    import { Observable } from 'rxjs/Observable';
    import { Chart, ChartPoint } from 'chart.js';
    
    import 'rxjs/add/observable/interval';
    import 'rxjs/add/operator/takeWhile';
    
    @Component({
        selector: 'app-root',
        templateUrl: './app.component.html',
        styleUrls: ['./app.component.css']
    })
    export class AppComponent implements OnInit, AfterViewInit {
        public isAlive = true;
        public chart: Chart;
        public data = [];
    
        canvas: any;
        ctx: any;
    
        public ngOnInit(): void {
    
            Observable.interval(50)
                .takeWhile(() => this.isAlive)
                .subscribe(
                    succ => {
                        if (!this.chart) {
                            return;
                        }
    
                        if (this.data.length > 200) {
                            this.data.splice(0, 1);
                            this.chart.data.labels.splice(0, 1);
                        }
    
                        this.data.push(new Date().getSeconds());
                        this.chart.data.labels.push(new Date().getSeconds().toString() + '-');
                        this.chart.update();
                    }
                );
        }
    
        public ngAfterViewInit(): void {
            if (!this.chart) {
                this.canvas = document.getElementById('myChart');
                this.ctx = this.canvas.getContext('2d');
                this.chart = new Chart(this.ctx, {
                    type: 'line',
                    data: {
                        labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
                        datasets: [{
                            label: '# of Votes',
                            data: this.data,
                            fill: false,
                            showLine: true,
                            backgroundColor: [
                                'rgba(255, 99, 132, 0)'
                            ],
                            borderColor: [
                                'rgba(255,99,132,1)'
                            ],
                            borderWidth: 2
                        }]
                    },
                    options: {
                        responsive: false,
                        title: {
                            display: true,
                            text: 'Chart.js - Fixed X and Y Axis',
                        },
                        tooltips: {
                            enabled: false
                        },
                        elements: {
                            point: {
                                radius: 0
                            }
                        },
                        scales: {
    
                            xAxes: [{
                                display: false,
                                ticks: {
    
                                }
                            }],
                            yAxes: [{
                                ticks: {
                                    min: 0,
                                    max: 60
                                }
                            }]
                        }
                    }
                });
    
                for (let i = 0; i < 200; i++) {
                    this.data.push(new Date().getSeconds());
                    this.chart.data.labels.push(new Date().getSeconds().toString() + '-');
                }
                this.chart.update();
            }
        }
    }
    

    组件.html:

    <canvas id="myChart" width="800" height="400"></canvas>
    

    import { BrowserModule } from '@angular/platform-browser';
    import { NgModule } from '@angular/core';
    
    
    import { AppComponent } from './app.component';
    
    
    @NgModule({
      declarations: [
        AppComponent
      ],
      imports: [
        BrowserModule
      ],
      providers: [],
      bootstrap: [AppComponent]
    })
    export class AppModule { }
    

    问题是我必须预先呈现(在本例中)200个元素,因为这样,图表将设置正确的比例。如果我不在代码前面加上:

    for (let i = 0; i < 200; i++) {
                        this.data.push(new Date().getSeconds());
                        this.chart.data.labels.push(new Date().getSeconds().toString() + '-');
                    }
                    this.chart.update();
    

    您将看到调整刻度单位的图表。启动检查数组是否包含超过200个元素的if语句。我所要达到的是有一个正确的规模,而不是首先循环200次,以放入数据“假”元素。

    有人知道正确的方法吗?

    谢谢您。

    1 回复  |  直到 7 年前
        1
  •  -1
  •   bluwaterdogz    7 年前

    我不确定我是否完全理解你的问题,但我有一个问题,缩放动画在角度图表和解决方案,我发现,在检查代码背后的例子在角度图表网站( http://jtblin.github.io/angular-chart.js/examples/app.js

    控制器

    app.controller("ctrl",['$scope', function($scope){
      $scope.options = {animation: {duration: 0}};
    }])
    

    <canvas id="line" class="chart chart-line"
      chart-options="options"
    ></canvas>
    

    或者在应用程序的config方法中全局使用ChartJsProvider:

    app.config(function(ChartJsProvider) {
        ChartJsProvider.setOptions({
          animation: {duration: 0}
        });
    })
    

    我希望这有帮助,我发布的所有信息都可以在图表.js文档: http://www.chartjs.org/docs/latest/configuration/animations.html

    推荐文章