2

我正在使用HighCharts制作条形图。我的值的范围可以从最小 0 到高达 100k(示例)。因此,图表的一个条形可能非常小,而另一个条形可能很长。HighCharts 引入了“对数缩放”功能。其中的例子可以在这里看到

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

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

PS jsfiddle 中的注释行导致了问题

4

3 回答 3

9

由于“官方”方法仍然存在问题,您可以通过使用以 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"}],

});
于 2012-02-01T05:02:39.347 回答
2

根据官方文档,它仍然是实验性的,所以可能是这种情况:

“轴的类型。可以是“线性”或“日期时间”之一。在日期时间轴中,数字以毫秒为单位,刻度线放置在适当的值上,例如完整的小时或天。

从 2.1.6 开始,“对数”被添加为实验性功能,但尚未完全实现。默认为“线性”。

试试看:“线性”、“日期时间”有规律的间隔、“日期时间”有不规则的间隔、实验性的“对数”轴。

于 2012-01-25T11:22:05.927 回答
2

对于那些仍在寻找答案的人:

JSFiddle:http: //jsfiddle.net/TuKWT/76/

或 SO 片段:

chart = new Highcharts.Chart({
    chart: {
        renderTo: 'container',
        defaultSeriesType: 'bar'
    },
    title: {
        text: 'Negative'
    },
    xAxis: {
        categories: ['A','B','C','D','E','F','G','H'],
        title: {
            text: null
        }
    },
    yAxis: {
        type: 'logarithmic',
        //min: 0, <= THIS WILL CAUSE ISSUE 
        title: {
            text: null,
        }
    },
    legend: {
        enabled: false
    },
    tooltip: {
        formatter: function() {
            return this.x + ':' + this.y + ' millions';
        }
    },
    plotOptions: {
        bar: {
            dataLabels: {
                enabled: false
            }
        }
    },
    credits: {
        enabled: false
    },
    series: [{
        "data": [4396,4940,4440,2700,2400,6000,3000,15000],
        }],

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script src="http://code.highcharts.com/highcharts.js"></script>

<div id="container" style="height: 300px"></div>

于 2015-08-25T09:36:28.750 回答