Two Y-axis not aligning correctly - chart.js

I added two Y-axes into the chart, but for some reason they don't align correctly. The labels to the left are aligned slightly higher than the ones on the right.
What could be the issue here? I've tried messing around with some options etc, but no luck so far.
Any help is appreciated, thank you.

Assuming your chart is of type 'horizontalBar', you could define the second y-axis as follows:
{
type: 'category',
position: 'right', // depends on your choice
offset: true,
gridLines: {
display: false
}
}

Related

In a Stacked Line Chart, is there a way to stack multiple Y-Axes to match each graphed line?

Example of Stacked Y-Axes
I can't figure out a way in Chart.js to get the Y-Axes to stack like I have in the example picture.
When I keep the scales object simple like this:
scales: {
y: {
stacked: true,
title: {
display: true,
text: "Temperature (°C)",
}
},
x: {
type: "time",
time: {
tooltipFormat: "LTS",
unit: "hour",
},
title: {
display: true,
text: "Datetime",
},
}
},
I obviously get a single Y-Axis, but instead of scaling to the maximum of any of the datasets, it seems to add each dataset up (ex: Say max Temp from any set is 40 °C, if I have 6 datasets the Y Scale goes from 0 - 250)
Additive Y-Axis example
It does stack all of the lines nicely though so I'm really hoping there is a decent solution as the Y-Axis right now is not helpful to a viewer. Thanks for any help!
With help from the Chart.js Slack channel, the easiest and actually great looking solution was just to separate each dataset into their own chart with only the top most chart showing a legend, and only the bottom chart showing an X-Axis. All middle charts have the X-Axis and legend turned off.

How to fix the number of gridlines in X-Axis as label are too condensed

How to fix the number of gridlines in X-Axis as label are too condensed.
Example: https://www.chartjs.org/samples/latest/charts/line/basic.html
If we add 60+ Data labels are too condensed, then after some more values axis lines adjust to hide some value in between to show label properly.
Is there a way to control trigger point which adjusts the axis line number ?
Assuming you defined xAxes.time.unit: 'month', you can define time.stepSize as follows.
xAxes: [{
type: 'time',
time: {
unit: 'month',
stepSize: 2
},
time.stepSize: the number of units between grid lines.
Chart.js internally uses Moment.js for the functionality of the time axis. Therefore you should use the bundled version of Chart.js that includes Moment.js in a single file.

Chartjs labels position

At any point I will only have 2 labels, min and max. I would like to bring in the labels like in the design. I have tried mirror but that will affect both min and max. The only way I can think of doing this is by using positioned divs to make it look like labels
Any help would be greatly appreciated
Current:
Expected:
Thanks
You could define options.scales.xAxis.offset = true, this adds extra space to both edges and the axis is scaled to fit into the chart area.
options: {
...
scales: {
xAxes: [{
offset: true,
...
}],
}
}

Chart.js - Line chart does not render all points when using Point[] format

Charts.js does not render all data points when using Point[] format.
Codepen example
Questions:
Why only two out of four data points are rendered for each dataset?
Why there are no ticks on X axis?
Why is "undefined" string shown on point hover?
How can I get both X and Y values display on point hover?
Thank you!
Adding "scales" option fixed the problem:
scales: {
xAxes: [{
type: 'linear',
position: 'bottom',
}]
}

Bar chart (chart.js) with only 2 points does not show one of the bars

I have a strange behavior that seems like a bug to me. I have a bar chart with one dataset with 2 points, but 1 is not shown, though it works fine with 3 or with horizontal bar e.g.
Is it a known bug of some kind that can be worked around? It seems that the chart does not scale itself well enough and one of the bars is below the "visibility point" somehow.
The problem was apparently that the Y-axis started not at 0 by default. It's possible to add an option for that:
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero: true
}
}]
}
}