3

当其中一个轴变得奇怪并开始重复数字(即:1、1、2、2 而不是 1、2、3、4)时,我正在使用 Google 可视化的组合(列/折线)图表进行错误修复。请看下面的图片

重复轴
(来源:rackcdn.com

以下是图表选项设置:

// Instantiate and draw our chart, passing in some options. 
var frequency_by_day_options = {
    vAxes: [
        {format:'#,###', title:"Call Volume"}, 
        {format: '#%', title:'Missed Call Rate',
          viewWindow:{
            max:1,
          }}
        ],      
    legend: {position: 'none'},
    chartArea: { height:'60%', width:'60%'},
    width: 800,
    height: 350,
    backgroundColor: 'transparent',
    bar: { groupWidth: '90%'},
    isStacked: true,
    seriesType: 'bars',
    series: {0: {type:'bar', targetAxisIndex:0}, 1: {type:'line', targetAxisIndex:1},},
    colors: ['blue', 'green'],
    animation:{
        duration: 1000,
        easing: 'out',},
    };

我不知道这里发生了什么。即使我注释掉所有的 vAxis 选项,我仍然会观察到这种行为。关于我做错了什么的任何想法?这让我发疯:)

4

2 回答 2

8

当我们的盒子数量较少时(比如说 1 个或 2 个),我也面临同样的问题。我用 maxValue 选项解决了它。只需在您的 vaxis 中添加 maxValue = 4 选项。它将始终添加 5 条(0 到 4 条)网格线。如果您的 maxValue 大于 4,它将自动调整。我的选项工作正常(标题:'No of box',格式:'#',minValue:0,maxValue:4)。minValue = 0 将不允许负数作为其框数。

于 2013-12-13T00:03:20.560 回答
3

我猜左边的 vAxis不是4,实际上是 2。这 5 个标签分别是 0、0.5、1、1.5、2。

由于您将格式设置为“#,###”,因此它不会显示小数。如果将其更改为“#,###.#”,则它将显示 0、0.5、1、1.5、2。

有十几种方法可以解决这个问题,但最简单的方法可能是确保您的轴值只是整数值,使用这样的 javascript 函数:

// Take the Max/Min of all data values in all graphs
var totalMax = 3;
var totalMin = -1;

// Figure out the largest number (positive or negative)
var biggestNumber = Math.max(Math.abs(totalMax),Math.abs(totalMin));

// Round to an exponent of 10 appropriate for the biggest number
var roundingExp = Math.floor(Math.log(biggestNumber) / Math.LN10);
var roundingDec = Math.pow(10,roundingExp);

// Round your max and min to the nearest exponent of 10
var newMax = Math.ceil(totalMax/roundingDec)*roundingDec;
var newMin = Math.floor(totalMin/roundingDec)*roundingDec;

// Determine the range of your values
var range = newMax - newMin;

// Calculate the best factor for number of gridlines (2-5 gridlines)
// If the range of numbers divided by 2 or 5 is a whole number, use it
for (var i = 2; i <= 5; ++i) {
    if ( Math.round(range/i) = range/i) {
        var gridlines = i
    }
}
于 2013-03-28T04:58:30.697 回答