HighCharts:水平条形图的对数标度

Zai*_*han 2 javascript scaling highcharts horizontal-scaling

我正在与HighCharts合作制作条形图.我的值可以从最小0到最高100k(示例).因此,图形的一条可以非常小而另一条可以非常长.HighCharts引入了"对数缩放"功能.这里的例子可以在这里看到

我的js代码写在这个jsfiddle文件中.我想以对数方式显示我的水平轴(x轴).我插入了键类型,如示例所示,但脚本进入无限循环,必须停止.

执行中的缺陷是什么,或者HighCharts的对数缩放仍然不成熟?

PS jsfiddle中的注释行引起了问题

Yan*_*sky 7

由于"官方"方法仍然存在问题,因此您可以通过使用基本10日志操作输入数据并将输出数据屏蔽为输出值10来更加手动地实现日志比例.请参阅下面的http://jsfiddle.net/7J6sc/代码.

function log10(n) {
 return Math.log(n)/Math.log(10);   
}

chart = new Highcharts.Chart({
    chart: {
        renderTo: 'container',
        defaultSeriesType: 'bar',
        marginRight: 200,
        marginLeft: 10,
    },
    title: {
        text: 'Negative'
    },
    xAxis: {
        categories: [''],
        title: {
            text: null
        }
    },
    yAxis: {
        min: 0,
        title: {
            text: '',
            align: 'high',
        },
        labels: {
            formatter: function() {
             return Math.round(Math.pow(10,this.value));
            }
        }
    },
    legend: {
        layout: 'vertical',
        align: 'right',
        verticalAlign: 'top',
        x: -50,
        y: 100,
        floating: true,
        borderWidth: 1,
        shadow: true
    },
    tooltip: {
        formatter: function() {
            return '' + this.series.name + ': ' + Math.round(Math.pow(10,this.y)) + ' millions';
        }
    },
    plotOptions: {
        bar: {
            dataLabels: {
                enabled: true,
                formatter: function() {
                   return Math.round(Math.pow(10,this.y)); 
                }
            }
        }
    },
    credits: {
        enabled: false
    },
    series: [{
        "data": [log10(4396)],
        "name": "A"},
    {
        "data": [log10(4940)],
        "name": "B"},
    {
        "data": [log10(4440)],
        "name": "C"},
    {
        "data": [log10(2700)],
        "name": "D"},
    {
        "data": [log10(2400)],
        "name": "E"},
    {
        "data": [log10(6000)],
        "name": "F"},
    {
        "data": [log10(3000)],
        "name": "G"},
    {
        "data": [log10(15000)],
        "name": "E"}],

});
Run Code Online (Sandbox Code Playgroud)