aboutsummaryrefslogtreecommitdiff
path: root/frontend/src/app/_elements/_charts/box-plot/box-plot.component.ts
blob: 1dd3354d6a1f3566d6c43c856205e7b44747fe51 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
import { AfterViewInit, Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';
import { Chart, LinearScale, CategoryScale } from 'chart.js';
import { BoxPlotController, BoxAndWiskers } from '@sgratzl/chartjs-chart-boxplot';

function randomValues(count: number, min: number, max: number) {
  const delta = max - min;
  return Array.from({ length: count }).map(() => Math.random() * delta + min);
}

Chart.register(BoxPlotController, BoxAndWiskers, LinearScale, CategoryScale);

@Component({
  selector: 'app-box-plot',
  templateUrl: './box-plot.component.html',
  styleUrls: ['./box-plot.component.css']
})
export class BoxPlotComponent implements AfterViewInit {

  @Input()width?: number;
  @Input()height?: number;
  @Input()mean?: number;
  @Input()median?: number;
  @Input()min?: number;
  @Input()max?: number;
  @Input()q1?: number;
  @Input()q3?: number;


  updateChart(min: number, max: number, q1: number, q3: number, median: number){
    console.log(this.min, this.max);
    const newBoxPlotData = {
      labels: [""],
        datasets: [{
        label: 'Dataset 1',
        backgroundColor: '#0063AB',
        borderColor: '#dfd7d7',
        borderWidth: 1,
        outlierColor: '#999999',
        scaleFontColor: '#0063AB',
        padding: 10,
        itemRadius: 0,
        data: [
          {min, q1, median, q3, max}/*,
          [0, 25, 51, 75, 99]*/
        
      ]}]
    };

    const newOptionsTmp = {
     
        plugins:{   
          legend: {
            display: false
                  },
               },
               scales : {
                 x: {
                  ticks: {
                    color: '#dfd7d7'
                  },
                  grid: {
                    color: "rgba(0, 99, 171, 0.5)"
                  }
                 },
                y : {
                    min: this.min,
                    max: this.max,
                    ticks: {
                      color: '#dfd7d7'
                    },
                    grid: {
                      color: "rgba(0, 99, 171, 0.5)"
                    }
                }
            
      }
    };
    Object.assign(this.boxplotData, newBoxPlotData);
    Object.assign(this.options, newOptionsTmp);
  };

  options = {
    plugins:{   
      legend: {
        display: false
              },
           },
           scales : {
             x: {
              ticks: {
                color: '#dfd7d7'
              },
              grid: {
                color: "rgba(0, 99, 171, 0.5)"
              }
             },
            y : {
                min: this.min,
                max: this.max,
                ticks: {
                  color: '#dfd7d7'
                },
                grid: {
                  color: "rgba(0, 99, 171, 0.5)"
                }
            }
        }
  }

  @ViewChild('boxplot') chartRef!: ElementRef;
  constructor() {
    //this.updateChart();
  }

  boxplotData = {
    // define label tree
    //labels: ['January'/*, 'February', 'March', 'April', 'May', 'June', 'July'*/],
      datasets: [{
      label: 'Dataset 1',
      backgroundColor: '#0063AB',
      borderColor: '#dfd7d7',
      borderWidth: 1,
      outlierColor: '#999999',
      scaleFontColor: '#0063AB',
      padding: 10,
      itemRadius: 0,
      data: [
      randomValues(100, 0, 100),
      /*randomValues(100, 0, 20),
      randomValues(100, 20, 70),
      randomValues(100, 60, 100),
      randomValues(40, 50, 100),
      randomValues(100, 60, 120),
      randomValues(100, 80, 100)*/
    ]}/*, {
    label: 'Dataset 2',
    backgroundColor: 'rgba(0,0,255,0.5)',
    borderColor: 'blue',
    borderWidth: 1,
    outlierColor: '#999999',
    padding: 10,
    itemRadius: 0,
    data: [
    randomValues(100, 60, 100),
    randomValues(100, 0, 100),
    randomValues(100, 0, 20),
    randomValues(100, 20, 70),
    randomValues(40, 60, 120),
    randomValues(100, 20, 100),
    randomValues(100, 80, 100)
    ]
    }*/]
    };
  ngAfterViewInit(): void {
  const myChart = new Chart(this.chartRef.nativeElement, {
    type: "boxplot",
    data: this.boxplotData,
    options: this.options
  });
}

}