Chart.js -添加渐变色而不是纯色-实现解决方案

sqxo8psd  于 2022-11-07  发布在  Chart.js
关注(0)|答案(6)|浏览(362)

我正在使用Chart.js,一切都很好,但我想用一个渐变替换当前的颜色背景(fillColor : "rgba(250,174,50,0.5)")。我有替换渐变的解决方案,但它对我来说太困难了,以我可怜的JS知识来实现这一点。我想对了解JS的人来说很容易。

所以我的Chart.js代码:

  1. <script>
  2. var data = {
  3. labels : ["02:00","04:00","06:00","08:00","10:00","12:00","14:00","16:00","18:00","20:00","22:00","00:00"],
  4. datasets: [
  5. {
  6. fillColor : "rgba(250,174,50,0.5)",
  7. strokeColor : "#ff6c23",
  8. pointColor : "#fff",
  9. pointStrokeColor : "#ff6c23",
  10. pointHighlightFill: "#fff",
  11. pointHighlightStroke: "#ff6c23",
  12. data : [25.0,32.4,22.2,39.4,34.2,22.0,23.2,24.1,20.0,18.4,19.1,17.4]
  13. }
  14. ]
  15. };
  16. var options = {
  17. responsive: true,
  18. datasetStrokeWidth : 3,
  19. pointDotStrokeWidth : 4,
  20. tooltipFillColor: "rgba(0,0,0,0.8)",
  21. tooltipFontStyle: "bold",
  22. tooltipTemplate: "<%if (label){%><%=label + ' hod' %>: <%}%><%= value + '°C' %>",
  23. scaleLabel : "<%= Number(value).toFixed(0).replace('.', ',') + '°C'%>"
  24. };
  25. var ctx = document.getElementById("temp-chart").getContext("2d");
  26. var myLineChart = new Chart(ctx).Line(data, options);
  27. </script>

**和here is solution with gradient。**有人可以尝试实现这个渐变背景,而不是我目前的固体背景?谢谢帮助。

我试着实现它,但是其他函数不起作用(比如scaleLabels等)。

hujrc8aj

hujrc8aj1#

你提供的链接非常清楚,你必须在数据集中的fillColor字段中放入一个linearGradient对象,而不是一个普通的颜色。你可以做复杂的渐变,但下面是一个简单渐变的代码(改变同一个橙子的不透明度):

  1. var gradient = ctx.createLinearGradient(0, 0, 0, 400);
  2. gradient.addColorStop(0, 'rgba(250,174,50,1)');
  3. gradient.addColorStop(1, 'rgba(250,174,50,0)');

以及您的完整数据集:

  1. datasets: [
  2. {
  3. fillColor : gradient, // Put the gradient here as a fill color
  4. strokeColor : "#ff6c23",
  5. pointColor : "#fff",
  6. pointStrokeColor : "#ff6c23",
  7. pointHighlightFill: "#fff",
  8. pointHighlightStroke: "#ff6c23",
  9. data : [25.0,32.4,22.2,39.4,34.2,22.0,23.2,24.1,20.0,18.4,19.1,17.4]
  10. }
  11. ]

在此JSFiddle中查看实际应用

展开查看全部
m4pnthwp

m4pnthwp2#

注意:对于那些使用Chart.js的较新版本(v2.7.0)的人,当您将@bviale的答案复制粘贴回代码库时,请找出它不起作用;某些属性名称已更改:

  1. fillColor -> backgroundColor
  2. strokeColor -> borderColor
  3. pointColor -> pointBackgroundColor
  4. pointStrokeColor -> pointBorderColor

您将需要更新这些属性名称才能使其正常工作。
参考:https://github.com/chartjs/Chart.js/blob/master/docs/charts/line.md#dataset-properties

uwopmtnx

uwopmtnx3#

为了在react中使用,我采用了以下方法,您需要将一个id传递给组件,然后使用该id获取元素

  1. import React, { Component } from 'react'
  2. import { Line } from 'react-chartjs-2'
  3. export default class GraphComponent extends Component{
  4. constructor(props){
  5. super(props)
  6. this.state = {
  7. chartData: {}
  8. }
  9. }
  10. componentDidMount(){
  11. //your code
  12. var ctx = document.getElementById('canvas').getContext("2d")
  13. var gradient = ctx.createLinearGradient(0, 0, 0, 400)
  14. gradient.addColorStop(0, 'rgba(229, 239, 255, 1)')
  15. gradient.addColorStop(1, '#FFFFFF')
  16. const newData = {
  17. labels: [1, 1],
  18. datasets: [
  19. {
  20. label: 'usd',
  21. data: [1,1],
  22. backgroundColor: gradient,
  23. borderColor: this.props.border_color,
  24. pointRadius: 0
  25. }
  26. ]
  27. }
  28. this.setState({chartData: newData})
  29. }
  30. //more of your code
  31. render(){
  32. return(
  33. <Line
  34. id='canvas'//you need to give any id you want
  35. data={this.state.chartData}
  36. width={100}
  37. height={30}
  38. options={{
  39. legend: {
  40. display: false
  41. }
  42. }}
  43. />
  44. )
  45. }
  46. }

这只是我的第二个答案,所以如果我写错了,请原谅我

展开查看全部
csbfibhn

csbfibhn4#

2022年更新版本

  1. var ctx = document.getElementById("temp-chart").getContext("2d");

获取上下文元素后声明梯度,即ctx

  1. var gradient = ctx.createLinearGradient(0, 0, 0, 400);
  2. gradient.addColorStop(0.2, 'rgb(255, 10, 86,0.5)');
  3. gradient.addColorStop(1, 'rgb(255, 10, 86,0.1)');

您的数据集将

  1. datasets: [{
  2. label: 'Transactions',
  3. data: [1,3,4,5]
  4. backgroundColor: gradient,
  5. borderColor: 'rgb(255, 10, 86,1)',
  6. borderWidth: 2,
  7. }],
展开查看全部
lmvvr0a8

lmvvr0a85#

对于任何使用Angular 和ng 2-charts的人,这里是我的解决方案。为了简洁起见,省略了图表设置。

  1. import { Component, OnInit, ViewChild, ChangeDetectorRef, AfterViewInit } from '@angular/core';
  2. import { BaseChartDirective } from 'ng2-charts';
  3. import { GenericLineChart } from './generic-line-chart';
  4. @Component({
  5. selector: 'app-stats-chart',
  6. templateUrl: './stats-chart.component.html',
  7. styleUrls: ['./stats-chart.component.scss']
  8. })
  9. export class StatsChartComponent implements OnInit, AfterViewInit {
  10. @ViewChild(BaseChartDirective, { static: true }) chartDirective: BaseChartDirective;
  11. constructor(private changeDetectorRef: ChangeDetectorRef) { }
  12. ngOnInit() {
  13. // ...setup chart
  14. }
  15. ngAfterViewInit() {
  16. // set gradient
  17. const gradient = this.chartDirective.chart.ctx.createLinearGradient(0, 0, 0, 400);
  18. gradient.addColorStop(0, 'rgba(30, 214, 254, .3)');
  19. gradient.addColorStop(1, 'rgba(0,0,0,0)');
  20. this.chart.lineChartData[0].backgroundColor = gradient;
  21. this.changeDetectorRef.detectChanges();
  22. }
  23. }
展开查看全部
ct3nt3jp

ct3nt3jp6#

您可以使用这个npm包。
https://www.npmjs.com/package/chartjs-plugin-gradient
这使得创建渐变backgroundColor或borderColor变得非常容易。
示例:

  1. const chart = new Chart(ctx, {
  2. data: {
  3. datasets: [{
  4. // data
  5. gradient: {
  6. backgroundColor: {
  7. axis: 'y',
  8. colors: {
  9. 0: 'red',
  10. 50: 'yellow',
  11. 100: 'green'
  12. }
  13. },
  14. borderColor: {
  15. axis: 'x',
  16. colors: {
  17. 0: 'black',
  18. 1: 'white',
  19. 2: 'black',
  20. 3: 'white'
  21. }
  22. }
  23. }
  24. }]
  25. }
  26. });
展开查看全部

相关问题