Javascript 处理具有很长类别名称的highcharts条形图

Javascript 处理具有很长类别名称的highcharts条形图,javascript,graph,charts,highcharts,Javascript,Graph,Charts,Highcharts,我有一个用Highcharts构建的条形图,它的x轴使用类别——非常冗长冗长的类别我想不出一个好方法来确保类别始终保持在一行上。我不能缩写它们,除非我可以使用工具提示或其他东西在鼠标悬停或其他一些直观的用户交互时显示长版本。当类别换行时,它开始看起来像一堵文字墙 有没有干净地显示长类别和数据的想法?我愿意考虑一种不同类型的图表,只要它以清晰而漂亮的方式显示数据。我想坚持高图表,但只有在可能的情况下 编辑: 经过很多努力,我已经放弃了以跨浏览器(IE6+)的方式向x轴类别标签添加工具提示的想法。即

我有一个用Highcharts构建的条形图,它的x轴使用类别——非常冗长冗长的类别我想不出一个好方法来确保类别始终保持在一行上。我不能缩写它们,除非我可以使用工具提示或其他东西在鼠标悬停或其他一些直观的用户交互时显示长版本。当类别换行时,它开始看起来像一堵文字墙

有没有干净地显示长类别和数据的想法?我愿意考虑一种不同类型的图表,只要它以清晰而漂亮的方式显示数据。我想坚持高图表,但只有在可能的情况下

编辑: 经过很多努力,我已经放弃了以跨浏览器(IE6+)的方式向x轴类别标签添加工具提示的想法。即使使用JQuery,它似乎也不可能或不实用。我仍然在寻找任何能让我很好地显示这些长类别的解决方案(我对之前创建的不满意,因为将鼠标悬停在数据栏上对用户来说不够明显)

问题图的图片,类别被遮住:

JSIDLE代码:

HTML:

工作

移动刀具尖端:

HTML

这就是如何从悬停的工具提示中获取类别名称

      this.key

试试这把小提琴:

我们有一个类似的问题,我们最终通过允许标签使用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]
            }]
        });
    });

});
$(函数(){
var图;
$(文档).ready(函数(){
图表=新的高点图表。图表({
图表:{
renderTo:'容器',
类型:'bar',
活动:{
加载:函数(事件){
$('.js').tooltip();
}
}
},
标题:{
正文:“按区域分列的历史世界人口”
},
副标题:{
文本:“来源:Wikipedia.org”
},
xAxis:{
分类:[“非洲是最好的狩猎之地。标签太大了,现在已经很难看了。”(-38023-8412-4812-4812-403-8523-52309583409853409530495340985),“美国是你能生活的最好的地方”,“亚洲是有史以来最好的食物”,“欧洲是地球上有史以来最好的小鸡”,“大洋洲我对这个地方一无所知”,
标题:{
文本:空
},
标签:{
格式化程序:函数(){
var text=this.value,
格式化=text.length>25?text.substring(0,25)+'…':text;
返回“”+格式化+“”;
},
风格:{
宽度:“150px”
},
useHTML:true
}
},
亚克斯:{
分:0,,
标题:{
正文:“人口(百万)”,
对齐:“高”
},
标签:{
溢出:'justify'
}
},
工具提示:{
格式化程序:函数(){
$(“#mytoolTip”).html(this.x+,值为“+this.y”);
返回false;
}
},
打印选项:{
酒吧:{
数据标签:{
已启用:true
}
}
},
图例:{
布局:“垂直”,
对齐:“右”,
垂直排列:“顶部”,
x:-100,
y:100,
浮动:是的,
边框宽度:1,
背景颜色:“#FFFFFF”,
影子:对
},
学分:{
已启用:false
},
系列:[{
名称:“1800年”,
数据:[107,31635203,2]
}, {
名称:"1900年",,
数据:[133156947408,6]
}, {
名称:"二零零八年",,
数据:[9739144054732,34]
}]
});
});
});
修剪标签

xAxis: {
            categories: ['Foo afkhbakfbakjfbakfbnbafnbaf', 'Bar', 'Foobar'],
            labels: {
                formatter: function() {
                    return this.value.substring(0, 8);
                }
            }
        },

如果你将工具提示移动到external
div
以获得更好的格式,这就是对你问题的回答。是的,尽管我已经考虑过这个选项。知道如何获得类别标签的坐标吗?你想对类别做些什么吗?好答案——这可能会有帮助。如果有更好的答案,我会给你评分这个答案唯一的问题是,当屏幕尺寸很小或标签很大时,它不能解决类别标签沿x轴线缠绕的问题:看,你还没有告诉我你对类别线的具体计划是什么我需要能够在某处看到完整的长版本,但它不能线-当它是x轴标签时进行换行。只要完整类别标签可以查看(某处),缩写就可以了。我可能会创建一个短标签数组,映射到一个长标签数组,然后使用jquery工具提示技术创建自定义工具提示。如果有更简单的解决方案,尽管我很乐意看到。我想这足以让我继续。我将使用格式化程序在一定数量的字符t之后向x轴标签添加一些省略号当你的工具提示用于全文时。请看我的最终JSFIDLE。你需要添加的所有内容都是在类别中循环。我们可以在哪里找到.js-e的定义
    tooltip: {
            formatter: function() {

               $("#mytoolTip").html(this.x + 'and the value is ' + this.y) ; 
                return false ; 
            }
        },
      this.key
$(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]
            }]
        });
    });

});
xAxis: {
            categories: ['Foo afkhbakfbakjfbakfbnbafnbaf', 'Bar', 'Foobar'],
            labels: {
                formatter: function() {
                    return this.value.substring(0, 8);
                }
            }
        },