実現したいこと
<要件>
・各モデルのスコアとカテゴリを日付毎に表示する
※カテゴリ:全てのモデルのスコアを元に算出し、高、中、低で表現したもの。
<希望>
・chart.jsを使用する
※現在chart.jsを使用して色々と試行錯誤しているので、chart.jsを使いたいです。
chart.jsで実現できなければ他のライブラリでも全く問題ないです。
環境
Angular 10
Internet Explorer 11(または、Microsoft Edge)
chart.js 2.9.24
困っていること
実現方法は何でも良いのですが、
以下の通り、X軸ラベルに日付とカテゴリをセットしてグラフ上部の表を作成しようと思っています。
labels: [[6/1, 低], [6/5, 低], ~, [7/13, 中]]
次にラベルの項目毎(低、中、高)のfontColorを変更しようと考えたのですが、
方法が分かりませんでした。
試したこと
以下を参考に、fontColorを配列にしてみましたが、デフォルトの色になり、
設定通りにセット出来ませんでした。
https://github.com/chartjs/Chart.js/issues/2442
お手数ですが、アドバイスをお願い致します。
ソースコードの抜粋
HTMLとJavaScriptのコードです。(CSSはないです)
JavaScriptのコードは多少切り貼りしています。
また、Scoreオブジェクトは日付、カテゴリ、スコアを持っています。
html
1<div> 2 <canvas #categoryChart width="744px" height="212px"></canvas> 3</div>
javascript
1 2(省略) 3 4// 宣言 5@ViewChild('categoryChart') 6elementRef: ElementRef; 7chartData = { labels: [], series1: [], series2: [] }; 8chartOptions: ChartOptions; 9context: CanvasRenderingContext2D; 10chart: Chart; 11 12(省略) 13 14// chart作成関数 15chartCreate(history: Score[]): void { 16 17 // チャートデータのセット 18 this.chartData.labels = []; 19 this.chartData.series1 = []; 20 this.chartData.series2 = []; 21 history.forEach((score, i) => { 22 const scoringDate = new Date(score.SCORINGDATE); 23 // ラベルを日付とカテゴリの配列にする(日付\nカテゴリと表示される) 24 this.chartData.labels[i] = 25 [this.datepipe.transform(scoringDate, 'M/d'), score.CATEGORY]; 26 this.chartData.series1[i] = score.model[0].SCORE; 27 this.chartData.series2[i] = score.model[1].SCORE; 28 }); 29 30 // チャートオプションのセット 31 this.chartOptions = { 32 scales: { 33 yAxes: [ 34 { 35 ticks: { 36 min: 0, 37 max: 100 38 }, 39 }], 40 xAxes: [ 41 { 42 ticks: { 43 fontSize: 16, 44 // 色をつけようと試した箇所 45 // fontColor: ['#f0554e', '#f3ca3e'], 46 // callback: (tickValue, index, ticks) => { 47 // return tickValue; 48 // } 49 }, 50 }], 51 }, 52 events: ['click'], 53 onClick: (event, elements) => { 54 this.changeDate(elements, history); 55 } 56 }; 57 58 // canvasの取得 59 this.context = this.elementRef.nativeElement.getContext('2d'); 60 61 // チャートの作成 62 this.chart = new Chart(this.context, { 63 type: environment.chart_type, 64 data: { 65 labels: this.chartData.labels, 66 datasets: [{ 67 label: 'Aモデル', 68 data: this.chartData.series1, 69 backgroundColor: ['rgba(0, 0, 255, 0)'], 70 borderColor: ['rgba(20, 0, 255, 100)'], 71 steppedLine: true, 72 borderWidth: 4, 73 }, { 74 label: 'Bモデル', 75 data: this.chartData.series2, 76 backgroundColor: ['rgba(135, 206, 250, 0)'], 77 borderColor: ['rgba(135, 206, 250, 100)'], 78 steppedLine: true, 79 borderWidth: 2, 80 }], 81 }, 82 options: this.chartOptions, 83 }); 84};
回答1件
あなたの回答
tips
プレビュー