17

X 軸にカテゴリを使用する Highcharts で構築された棒グラフがあります。非常に長い単語のカテゴリです。 カテゴリが常に 1 行に収まるようにする良い方法がわかりません。ツールチップなどを使用して、マウスのホバーオーバーまたはその他の直感的なユーザー操作で長いバージョンを表示できない限り、それらを短縮することはできません。カテゴリが折り返されると、テキストの壁のように見え始めます。

長いカテゴリとデータをきれいに表示するためのアイデアはありますか? データが明確で見栄えのする方法で表示される限り、別の種類のグラフを検討したいと考えています。私は Highcharts を使い続けたいと思っていますが、可能な場合のみです。

編集:多くの努力の後、クロスブラウザー (IE6+) の方法で x 軸のカテゴリラベルにツールチップを追加するというアイデアをあきらめました。JQuery を使用しても、それは可能でも実用的でもないようです。これらの長いカテゴリを適切に表示できるソリューションをまだ探しています (データ バーにカーソルを合わせると、ユーザーにとって十分に明確ではないため、以前に作成したフィドルには満足していません)。

カテゴリが塗りつぶされた問題グラフの図: ラベルが長すぎます。次の行に移動します

JSFiddle コード:

HTML:

<div id="container" style="min-width: 400px; height: 400px; margin: 0 auto"></div>
<div id='mytoolTip'></div>

Javascript:

$(function() {
    var chart;
    $(document).ready(function() {
        chart = new Highcharts.Chart({
            chart: {
                renderTo: 'container',
                type: 'bar'
            },
            title: {
                text: 'Historic World Population by Region'
            },
            subtitle: {
                text: 'Source: Wikipedia.org'
            },
            xAxis: {
                categories: ['Africa blahblahblah blah blah blah ', 'America blahblahblah blah blah blah ', 'Asia blahblahblah blah blah blah', 'Europe blahblahblah blah blah blah ', 'Oceania blahblahblah blah blah blah '],
                    title: {
                        text: null
                    },
                    labels: {
                        formatter: function() {
                            return(this.value.substring(0,10) + "...");
                        }
                    }                            
                },
                yAxis: {
                    min: 0,
                    title: {
                        text: 'Population (millions)',
                        align: 'high'
                    },
                    labels: {
                        overflow: 'justify'
                    }
                },
                tooltip: {
                    formatter: function() { 
                       $("#mytoolTip").html(this.x + 'and the value is ' + this.y) ; 
                       return false ; 
                    }
                },
                plotOptions: {
                    bar: {
                        dataLabels: {
                            enabled: true
                        }
                    }
                },
                legend: {
                    layout: 'vertical',
                    align: 'right',
                    verticalAlign: 'top',
                    x: -100,
                    y: 100,
                    floating: true,
                    borderWidth: 1,
                    backgroundColor: '#FFFFFF',
                    shadow: true
                },
                credits: {
                    enabled: false
                },
                series: [{
                    name: 'Year 1800',
                    data: [107, 31, 635, 203, 2]
                }, {
                    name: 'Year 1900',
                    data: [133, 156, 947, 408, 6]
                }, {
                    name: 'Year 2008',
                    data: [973, 914, 4054, 732, 34]
                }]
            });
        });
    });
4

3 に答える 3

21

このフィドルを試してください: http://jsfiddle.net/a6zsn/70/

同様の問題がありましたが、ラベルで HTML を使用できるようにすることで最終的に解決しました。以下に掲載されている正確なソリューションには従いませんでしたが、ホバー時に jQueryUI ツールチップ ウィジェットを使用して全文を表示するため、これはうまくいくはずです。

xAxis.labels オブジェクトをどのように定義しているかに注意してください。

$(function () {
    var chart;
    $(document).ready(function() {
        chart = new Highcharts.Chart({
            chart: {
                renderTo: 'container',
                type: 'bar',
                events: {
                    load: function (event) {
                        $('.js-ellipse').tooltip();
                    }
                }
            },
            title: {
                text: 'Historic World Population by Region'
            },
            subtitle: {
                text: 'Source: Wikipedia.org'
            },
            xAxis: {
                categories: ['Africa is the best place to do safari.  Label is soooo big that it iss ugly now.  =(.  -38023-8412-4812-4812-403-8523-52309583409853409530495340985 ', 'America is the best place you can ever live in ', 'Asia is the best food ever ', 'Europe best chicks ever on earth ', 'Oceania i dont know any thing about this place '],
                title: {
                    text: null
                },
                labels: {
                    formatter: function () {
                        var text = this.value,
                            formatted = text.length > 25 ? text.substring(0, 25) + '...' : text;

                        return '<div class="js-ellipse" style="width:150px; overflow:hidden" title="' + text + '">' + formatted + '</div>';
                    },
                    style: {
                        width: '150px'
                    },
                    useHTML: true
            }
            },
            yAxis: {
                min: 0,
                title: {
                    text: 'Population (millions)',
                    align: 'high'
                },
                labels: {
                    overflow: 'justify'
                }
            },
            tooltip: {
                formatter: function() {
                   $("#mytoolTip").html(this.x + 'and the value is ' + this.y) ; 
                    return false ;
                }
            },
            plotOptions: {
                bar: {
                    dataLabels: {
                        enabled: true
                    }
                }
            },
            legend: {
                layout: 'vertical',
                align: 'right',
                verticalAlign: 'top',
                x: -100,
                y: 100,
                floating: true,
                borderWidth: 1,
                backgroundColor: '#FFFFFF',
                shadow: true
            },
            credits: {
                enabled: false
            },
            series: [{
                name: 'Year 1800',
                data: [107, 31, 635, 203, 2]
            }, {
                name: 'Year 1900',
                data: [133, 156, 947, 408, 6]
            }, {
                name: 'Year 2008',
                data: [973, 914, 4054, 732, 34]
            }]
        });
    });

});
于 2013-04-24T03:24:28.913 に答える
6

作業中 のjsFiddle

ツールチップの移動:

HTML

    <div id='mytoolTip'></div>​

JavaScript

    tooltip: {
            formatter: function() {

               $("#mytoolTip").html(this.x + 'and the value is ' + this.y) ; 
                return false ; 
            }
        },

これは、ツールチップのホバリングからカテゴリ名を取得する方法です

      this.key

jsフィドル

于 2012-07-18T14:41:06.503 に答える
4

ラベルをトリミングする

xAxis: {
            categories: ['Foo afkhbakfbakjfbakfbnbafnbaf', 'Bar', 'Foobar'],
            labels: {
                formatter: function() {
                    return this.value.substring(0, 8);
                }
            }
        },
于 2014-06-02T09:55:31.367 に答える