【问题标题】:google visualizations align 0 axis with two different y-axes谷歌可视化将 0 轴与两个不同的 y 轴对齐
【发布时间】:2013-10-15 14:42:44
【问题描述】:

我正在使用谷歌的可视化库创建一个combochart。我正在绘制一天中一家商店的客流量和收入图表。我已将抽奖选项设置为

var options = {
  seriesType: "bars",
  series:{0:{targetAxisIndex:0},1:{targetAxisIndex:1}},
  vAxes:{0:{title: "Revenue"},1:{title: "Traffic"}},
  hAxis: {title: "Time", showTextEvery: 1},
};

将收入设置在与​​流量不同的 Y 轴上。数据样本可能如下所示:

var data = [
  //   Time       Revenue Traffic
  ['10:00-10:30', '132.57', '33'],
  ['10:30-11:00', '249.23', '42'],
  ['11:00-11:30', '376.84', '37'],
  [... etc ..]
];

我遇到的问题是流量值总是为正数,而如果有回报,收入可能是负数。如果发生这种情况,我的收入轴将从 -50 之类的负值开始,而流量从 0 开始,并且水平基线不会对齐。我想要它,这样即使收入的值小于 0,它的 0 轴也会与流量 0 轴对齐。

这里有一个例子来说明正在发生的事情。查看交通 0 轴与收入的 -50 轴处于同一水平的情况。我想知道如何将流量基线提高到与收入 0 轴相同的水平。

【问题讨论】:

    标签: javascript charts google-visualization data-visualization


    【解决方案1】:

    我有一种方法,我有理由确定它总是会产生具有相同 0 点的轴值(我还没有证明它不能产生具有不同 0 点的轴,但我没有'没有遇到任何)。

    首先,获取两个日期系列的范围(就我们而言,第 1 列是“收入”,第 2 列是“流量”):

    var range1 = data.getColumnRange(1);
    var range2 = data.getColumnRange(2);
    

    对于每个系列,获取系列的最大值,如果最大值小于或等于 0,则为 1。这些值将用作图表的上限。

    var maxValue1 = (range1.max <= 0) ? 1 : range1.max;
    var maxValue2 = (range2.max <= 0) ? 1 : range2.max;
    

    然后计算两个上界相关的标量值:

    var scalar = maxValue2 / maxValue1;
    

    现在,通过取range1.min0 中的较低者来计算“收入”系列的下限:

    var minValue1 = Math.min(range1.min, 0);
    

    然后将该下限乘以标量值以获得“流量”系列的下限:

    var minValue2 = minValue1 * scalar;
    

    最后,为每个轴设置 vAxis minValue/maxValue 选项:

    vAxes: {
        0: {
            maxValue: maxValue1,
            minValue: minValue1,
            title: 'Revenue'
        },
        1: {
            maxValue: maxValue2,
            minValue: minValue2,
            title: 'Traffic'
        }
    }
    

    最终结果是每个系列的正负比例相等(maxValue1 / (maxValue1 - minValue1 == maxValue2 / (maxValue2 - minValue2minValue1 / (maxValue1 - minValue1 == minValue2 / (maxValue2 - minValue2),这意味着图表轴应该以相同的正负比例结束,把两边的 0 对齐。

    这是一个可以工作的 jsfiddle:http://jsfiddle.net/asgallant/hvJUC/。只要第二个数据系列没有负值,它就应该适用于任何数据集。我正在开发一个适用于任何数据集的版本,但这应该足以满足您的用例。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-19
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    相关资源
    最近更新 更多