4

Highcharts-more の columnrange タイプを使用しています。デフォルトのデータ ラベル フォーマッタは、最小/最大データを範囲の両端に配置します。これは便利です。

各ポイントに別のラベルを付ける方法はありますか? (例: データ名、バーの真ん中)

私の作品をご覧ください: JSFiddle

これは、生命の範囲を持つ家系図です。バーの中央にあるツールチップに表示される名前を表示したいと思います。

(参考までに、レンダラーを使用してチャートにテキストをオーバーロードしようとしました:うまくいきました...しかし、テキストはポイントではなくチャートに添付され、ポイントが移動している間、ズームはそれらを所定の位置に残しました。チャートの onLoad イベントの各ポイントにテキスト ラベルを付ける方法はありますか?)

ありがとうございました。

$(function () {

$('#container').highcharts({

    chart: {
        type: 'columnrange',
        inverted: true,
        marginLeft: 40,
        zoomType: 'xy'
    },

    title: {
        text: 'My family tree'
    },

    xAxis: {

        labels: {
            enabled: false
        },
        min: 0,
        max: 10
    },

    yAxis: {
        type: 'datetime',
        min: new Date().setYear(1900).valueOf(),
        max: new Date().valueOf(),
        title: {
            text: 'Year'
        },
        endOnTick: false
    },

    legend: {
        enabled: false
    },

    plotOptions: {
        columnrange: {
            grouping: false,
            pointPadding: 0,
            dataLabels: {
                enabled: true,
                useHTML: true,
                formatter: function () {
                    if (new Date().setHours(0, 0, 0, 0) !== new Date(this.y).setHours(0, 0, 0, 0)) return '<span style="color:black">' + Highcharts.dateFormat('%Y', this.y) + '</span>';
                    else return '';
                }
            }
        }
    },

    tooltip: {
        headerFormat: '{series.name}<br/>',
        formatter: function () {
            var l = this.point.name + '<br/>' + Highcharts.dateFormat('%e/%m/%Y', this.point.low);
            if (new Date().setHours(0, 0, 0, 0) !== new Date(this.point.high).setHours(0, 0, 0, 0)) l += '<br/>' + Highcharts.dateFormat('%e/%m/%Y', this.point.high);
            return l;
        }
    },

    series: [{
        color: 'rgb(100,100,255)',
        pointWidth: 150,
        data: [{
            name: 'Yann B',
            low: Date.UTC(1976, 1, 27),
            high: new Date().valueOf(),
            x: 1 * 10 / 2
        }]
    }, {
        color: 'rgb(150,150,255)',
        pointWidth: 70,
        data: [{
            name: 'Jean-Yves B',
            low: Date.UTC(1947, 3, 26),
            high: Date.UTC(2006, 2, 10),
            x: 1 * 10 / 4
        }, {
            name: 'Josiane M',
            low: Date.UTC(1946, 8, 21),
            high: Date.UTC(1998, 11, 26),
            x: 3 * 10 / 4
        }]
    }, {
        color: 'rgb(200,200,255)',
        pointWidth: 30,
        data: [{
            name: 'Guillaume B',
            low: Date.UTC(1907, 7, 4),
            high: Date.UTC(1988, 1, 11),
            x: 1 * 10 / 8
        }, {
            name: 'Marie-Jeanne S',
            low: Date.UTC(1911, 7, 17),
            high: Date.UTC(1986, 2, 3),
            x: 3 * 10 / 8
        }, {
            name: 'Joseph M',
            low: Date.UTC(1921, 3, 11),
            high: Date.UTC(1996, 4, 23),
            x: 5 * 10 / 8
        }, {
            name: 'Marie K',
            low: Date.UTC(1925, 4, 4),
            high: new Date().valueOf(),
            x: 7 * 10 / 8
        }]
    }]

});

});
4

2 に答える 2

3

フォーマッタ関数にいくつかの変更を加えました。datalabels insideプロパティを設定し、データ名をの値trueに添付します。pointhigh

dataLabels: {
    inside:true,
    enabled: true,
    useHTML: true,
    formatter: function () {
        if (new Date().setHours(0, 0, 0, 0) !== new Date(this.y).setHours(0, 0, 0, 0)) {
            if (this.y == this.point.high){
                return '<span style="color:black">' + Highcharts.dateFormat('%Y', this.y) +' - '+ this.point.name + '</span>';
            }
            return '<span style="color:black">' + Highcharts.dateFormat('%Y', this.y) + '</span>';
        }
        else return '';
    }
}
于 2013-07-31T08:15:24.013 に答える