}
function titleArgs(scale, offset, position, align) {
- const {top, left, bottom, right} = scale;
+ const {top, left, bottom, right, chart} = scale;
+ const {chartArea, scales} = chart;
let rotation = 0;
let maxWidth, titleX, titleY;
+ const height = bottom - top;
+ const width = right - left;
if (scale.isHorizontal()) {
titleX = _alignStartEnd(align, left, right);
- titleY = offsetFromEdge(scale, position, offset);
+
+ if (isObject(position)) {
+ const positionAxisID = Object.keys(position)[0];
+ const value = position[positionAxisID];
+ titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;
+ } else if (position === 'center') {
+ titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;
+ } else {
+ titleY = offsetFromEdge(scale, position, offset);
+ }
maxWidth = right - left;
} else {
- titleX = offsetFromEdge(scale, position, offset);
+ if (isObject(position)) {
+ const positionAxisID = Object.keys(position)[0];
+ const value = position[positionAxisID];
+ titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;
+ } else if (position === 'center') {
+ titleX = (chartArea.left + chartArea.right) / 2 - width + offset;
+ } else {
+ titleX = offsetFromEdge(scale, position, offset);
+ }
titleY = _alignStartEnd(align, bottom, top);
rotation = position === 'left' ? -HALF_PI : HALF_PI;
}
const align = title.align;
let offset = font.lineHeight / 2;
- if (position === 'bottom') {
+ if (position === 'bottom' || position === 'center' || isObject(position)) {
offset += padding.bottom;
if (isArray(title.text)) {
offset += font.lineHeight * (title.text.length - 1);