Search code examples
chartsnext.jschart.jslinereact-chartjs

How to add Chart background borderColor gradient to Next.js


I want to add gradient to my chart background. Here below an example:

enter image description here

I'm using Next.js and react-chart.js.

Here below an example of my code:


import { ChartProps } from "./Chart.props";
import styles from "./Chart.module.css";
import React, { useState, useEffect, useRef } from 'react';

import { Chart as ChartJS, ArcElement, CategoryScale, LinearScale, PointElement, LineElement, Title, Tooltip, Legend, ScriptableContext, } from "chart.js";
import { Chart, Line } from "react-chartjs-2";
ChartJS.register(ArcElement, Tooltip, Legend, CategoryScale, LinearScale, PointElement, LineElement);

import { optionsChart } from "./ChartConfig.js";




export const CoinPriceChart = (props) => {

    
    const data = {
        labels: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14"],
        datasets: [
            {
                data: [22, 45, 23, 41, 18, 11, 32, 31, 63, 54, 45, 49, 54, 36],
                pointRadius: 0,
                pointHoverRadius: 2,
                borderColor: "rgba(91,56,237,255)",

            }
        ],
        options: {
            ...optionsChart
        },
    };


    return (
        <div
            className={styles.CardList}
            {...props}
        >
            <Line id="myChart" data={data} options={optionsChart}/>
        </div>
    );
};

Once I'd tried something like this:

enter image description here

But in React (not in Node.js). In Node.js it doesn't work for me.

And here below how my chart looks like (now):

enter image description here

Waiting for your propositions. Thanks in advance!


Solution

  • This is because in chart.js V3 the line chart does not fill by default. You will need to import the filler plugin and tell the dataset to fill like so:

    import {Chart, Filler} from 'chart.js'
    import {Chart as ReactChart, Line} from 'react-chartjs-2'
    
    Chart.register(Filler);
    
    const data = {
      labels: labels,
      datasets: [{
        data: data,
        fill: true // Set fill to true to enable the backgroundColor under the line
      }]
    }