Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Configurable axis title location #5218

Open
phongpt156 opened this issue Feb 1, 2018 · 5 comments
Open

Configurable axis title location #5218

phongpt156 opened this issue Feb 1, 2018 · 5 comments

Comments

@phongpt156
Copy link

After reading document, i don't found any options to add title to X and Y coordinate like image
image
See title "Month" and "Percent"

@etimberg
Copy link
Member

etimberg commented Feb 1, 2018

Tagging as an enhancement because this is not currently possible

@LordDraagonLive
Copy link

@zedsimple @etimberg I think you can use scaleLabel under yAxes or xAxes to change the label. For example scales: { xAxes: [{ display: true, scaleLabel: { display: true, labelString: 'Month' } }], yAxes: [{ type: 'category', position: 'left', display: true, scaleLabel: { display: true, labelString: 'Request State' }

@jatiny17
Copy link
Contributor

@phongpt156
Hey I want to submit the solution for this

@jatiny17
Copy link
Contributor

jatiny17 commented Oct 14, 2019

@phongpt156
I think this can work

var chartConfig = {
    type: 'line',
    data: {
      datasets: [ {
        label: 'DefaultLabel',
        backgroundColor: '#ff0000',
        borderColor: '#ff0000',
        fill: false,
        data: [],
      } ]
    },
    options: {
      responsive: true,
      scales: {
        xAxes: [ {
          type: 'time',
          display: true,
          scaleLabel: {
            display: true,
            labelString: 'Date'
          },
          ticks: {
            major: {
              fontStyle: 'bold',
              fontColor: '#FF0000'
            }
          }
        } ],
        yAxes: [ {
          display: true,
          scaleLabel: {
            display: true,
            labelString: 'value'
          }
        } ]
      }
    }
  };

jatiny17 added a commit to jatiny17/Chart.js that referenced this issue Oct 15, 2019
Added file for adding axes labels
chartjs#5218
jatiny17 added a commit to jatiny17/Chart.js that referenced this issue Oct 15, 2019
Added method for providing label for the axes
chartjs#5218
@etimberg etimberg changed the title How to add title to X and Y coordinate Configurable axis title location Oct 17, 2020
@LeeLenaleee
Copy link
Collaborator

For anyone wanting this, you can use a custom plugin to achieve this:

const customTitle = {
  id: 'customTitle',
  beforeLayout: (chart, args, opts) => {
    if (!opts.x.display) {
      return;
    }

    const {
      ctx
    } = chart;
    ctx.font = opts.x.font || '12px "Helvetica Neue", Helvetica, Arial, sans-serif'

    const {
      width
    } = ctx.measureText(opts.x.text);
    chart.options.layout.padding.right = width * 1.3;
  },
  afterDraw: (chart, args, opts) => {
    const {
      ctx,
      scales: {
        x,
        y
      },
      chartArea: {
        top,
        bottom,
        left,
        right
      }
    } = chart;

    if (opts.x.display) {
      ctx.fillStyle = opts.x.color || Chart.defaults.color
      ctx.font = opts.x.font || '12px "Helvetica Neue", Helvetica, Arial, sans-serif'
      ctx.fillText(opts.x.text, (right + (opts.x.offsetX || 0)), (bottom + ((opts.x.offsetY * -1) || 0)))
    }

    if (opts.y.display) {
      ctx.fillStyle = opts.y.color || Chart.defaults.color
      ctx.font = opts.y.font || '12px "Helvetica Neue", Helvetica, Arial, sans-serif'
      ctx.fillText(opts.y.text, opts.y.offsetX || 3, (top + ((opts.y.offsetY * -1) || -15)))
    }
  }
}

const options = {
  type: 'line',
  data: {
    labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
    datasets: [{
        label: '# of Votes',
        data: [12, 19, 3, 5, 2, 3],
        borderWidth: 1
      },
      {
        label: '# of Points',
        data: [7, 11, 5, 8, 3, 7],
        borderWidth: 1
      }
    ]
  },
  options: {
    layout: {
      padding: {
        right: 0 // Seems nesesarry cuz otherwise padding wont update
      }
    },
    plugins: {
      customTitle: {
        y: {
          display: true,
          text: 'Numbers'
        },
        x: {
          display: true,
          text: 'Month',
          offsetX: 5,
          offsetY: 5,
          font: '12px Comic Sans MS'
        }
      }
    }
  },
  plugins: [customTitle]
}

https://jsfiddle.net/Leelenaleee/L2vhwe6u/33/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants