Chart.js의 스케일 제목을 회전하는 방법

13622 단어 chart.js
추가
x의 position에 right 지정하면 미치겠네요, 그중 고치겠습니다

계기



? ? ? 「y축이 2개 있는 그래프의 스케일 타이틀은 양쪽 모두 같은 방향이군요」

코드



Chart.js 자체의 코드를 변경합니다.
우선 아래의 부분을 찾습니다.
if (scaleLabel.display) {
    // Draw the scale label
    var scaleLabelX;
    var scaleLabelY;
    var rotation = 0;
    var halfLineHeight = scaleLabelFont.lineHeight / 2;

    if (isHorizontal) {
        scaleLabelX = me.left + ((me.right - me.left) / 2); // midpoint of the width
    scaleLabelY = position === 'bottom'
    ? me.bottom - halfLineHeight - scaleLabelPadding.bottom
    : me.top + halfLineHeight + scaleLabelPadding.top;
    } else {
        var isLeft = position === 'left';
    scaleLabelX = isLeft
    ? me.left + halfLineHeight + scaleLabelPadding.top
        : me.right - halfLineHeight - scaleLabelPadding.top;
    scaleLabelY = me.top + ((me.bottom - me.top) / 2);
    rotation = isLeft ? -0.5 * Math.PI : 0.5 * Math.PI;
    }


    context.save();
    context.translate(scaleLabelX, scaleLabelY);
    context.rotate(rotation);
    context.textAlign = 'center';
    context.textBaseline = 'middle';
    context.fillStyle = scaleLabelFontColor; // render in correct colour
    context.font = scaleLabelFont.string;
    context.fillText(scaleLabel.labelString, 0, 0);
    context.restore();
}

position = left 처리 만 작성하므로 right를 추가합니다.
if (scaleLabel.display) {
    // Draw the scale label
    var scaleLabelX;
    var scaleLabelY;
    var rotation = 0;
    var halfLineHeight = scaleLabelFont.lineHeight / 2;

    if (isHorizontal) {
        scaleLabelX = me.left + ((me.right - me.left) / 2); // midpoint of the width
    scaleLabelY = position === 'bottom'
    ? me.bottom - halfLineHeight - scaleLabelPadding.bottom
    : me.top + halfLineHeight + scaleLabelPadding.top;
    } else {
        var isLeft = position === 'left';
    scaleLabelX = isLeft
    ? me.left + halfLineHeight + scaleLabelPadding.top
        : me.right - halfLineHeight - scaleLabelPadding.top;
    scaleLabelY = me.top + ((me.bottom - me.top) / 2);
    rotation = isLeft ? -0.5 * Math.PI : 0.5 * Math.PI;
    }

    /*------------ ここを追加 ------------*/
    if (position === "right") {
        rotation += Math.PI;
    }
    /*----------------------------------*/

    context.save();
    context.translate(scaleLabelX, scaleLabelY);
    context.rotate(rotation);
    context.textAlign = 'center';
    context.textBaseline = 'middle';
    context.fillStyle = scaleLabelFontColor; // render in correct colour
    context.font = scaleLabelFont.string;
    context.fillText(scaleLabel.labelString, 0, 0);
    context.restore();
}

결과



좋은 웹페이지 즐겨찾기