我正在使用HighCharts制作条形图。我的值的范围可以从最小 0 到高达 100k(示例)。因此,图表的一个条形可能非常小,而另一个条形可能很长。HighCharts 引入了“对数缩放”功能。其中的例子可以在这里看到
我的 js 代码写在这个jsfiddle文件中。我想以对数方式显示我的水平轴(x 轴)。我已插入示例中所示的密钥类型,但脚本进入必须停止的无限循环。
执行中的缺陷是什么,或者 HighCharts 的对数缩放仍然不成熟?
PS jsfiddle 中的注释行导致了问题
我正在使用HighCharts制作条形图。我的值的范围可以从最小 0 到高达 100k(示例)。因此,图表的一个条形可能非常小,而另一个条形可能很长。HighCharts 引入了“对数缩放”功能。其中的例子可以在这里看到
我的 js 代码写在这个jsfiddle文件中。我想以对数方式显示我的水平轴(x 轴)。我已插入示例中所示的密钥类型,但脚本进入必须停止的无限循环。
执行中的缺陷是什么,或者 HighCharts 的对数缩放仍然不成熟?
PS jsfiddle 中的注释行导致了问题
由于“官方”方法仍然存在问题,您可以通过使用以 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"}],
});
根据官方文档,它仍然是实验性的,所以可能是这种情况:
“轴的类型。可以是“线性”或“日期时间”之一。在日期时间轴中,数字以毫秒为单位,刻度线放置在适当的值上,例如完整的小时或天。
从 2.1.6 开始,“对数”被添加为实验性功能,但尚未完全实现。默认为“线性”。
试试看:“线性”、“日期时间”有规律的间隔、“日期时间”有不规则的间隔、实验性的“对数”轴。
对于那些仍在寻找答案的人:
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>