Javascript Google Annotationchart-范围更改时,重新基准索引=100

Javascript Google Annotationchart-范围更改时,重新基准索引=100,javascript,google-visualization,Javascript,Google Visualization,我有一个谷歌注释图表来显示不同投资的相对表现。用户应该能够在选定的时间范围内比较性能,也就是说,一旦时间范围发生变化,序列值应在图表可见范围的起始日期重新设置为100 Amcharts等其他软件包提供了“可比”功能,因此一直在谷歌文档和其他问题中寻找“scaleColumns”和“scaleType”等选项,但没有找到任何关于如何做到这一点的线索 是否有我可以使用并且可能遗漏的功能,或者在“rangechange”时重新计算索引为100的DataTable的最佳方法是什么 代码和屏幕截图如下:

我有一个谷歌注释图表来显示不同投资的相对表现。用户应该能够在选定的时间范围内比较性能,也就是说,一旦时间范围发生变化,序列值应在图表可见范围的起始日期重新设置为100

Amcharts等其他软件包提供了“可比”功能,因此一直在谷歌文档和其他问题中寻找“scaleColumns”和“scaleType”等选项,但没有找到任何关于如何做到这一点的线索

是否有我可以使用并且可能遗漏的功能,或者在“rangechange”时重新计算索引为100的DataTable的最佳方法是什么

代码和屏幕截图如下:

google.charts.load('current', {
  packages: ['corechart', 'line', 'table','annotationchart']
});
google.charts.setOnLoadCallback(drawChart);

// ---------- Chart ---------------------------- //
function drawChart() {
  //data query
  var query = new google.visualization.Query(
    'https://docs.google.com/spreadsheets/d/1Gw67zHpKyEd1nu_V698yqYqNgE0x21_ZE_QDHJmsgtE/gviz/tq?gid=803335131&headers=1&range=A1:n451');
  query.send(handleQueryResponse);
}
function handleQueryResponse(response) {
  if (response.isError()) {
    alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
    return;
  }
  var data = response.getDataTable();
  var options = {
    title: 'Development of the choosen Portfolio since 2008',
    legend: {
      textStyle : { fontSize: 8 },
      maxLines : 2,
      position: 'top'
    },
    width: '30%',
    height: 700,
    lineWidth: 1,
    hAxis: {
      format: 'M/d/yy',
      title: 'Time'
    },
    vAxis: {
      scaleType: 'log',
      title: 'Return (log scale)'
    },
    //theme: 'maximized',
    chartArea:{
      left:0,
      top:20,
      width:'30%',
      height:'85%'
    },
    series: {
      22: {
        lineWidth: 3,
        color: 'red'
      }
    }
  };
  var chart = new google.visualization.AnnotationChart(document.getElementById('chart_div'))
  chart.draw(data, options);
}

google.visualization.events.addListener(chart, 'rangechange', rangechange_handler);

function rangechange_handler(e) {
  console.log('You changed the range to ', e['start'], ' and ', e['end']);
  // How to recalculate datatable to keep index=100 for all series upon rangechange?
}

更新:


有一种方法可以解决这个问题:$20zoom | sort:relevance/google visualization api/8HjybllsufY/z5uak6AymLcJ

在经历了一段时间的痛苦之后,希望它能帮助某些人:

var viewColumns=[0];
var颜色=[];
对于(var i=0;i
请您澄清一下,在可见范围内,系列应重设为100?不遵循,您是否始终希望在可见范围内有100条记录?为了澄清,应在图表可见范围的起始日期将系列值重新设置为100。因此,一旦改变了可见时间范围,所有系列的第一个可见值应重新计算为100的索引值。我相信“重新基准”操作有效地改变了所有系列的值,使得所有系列在图表的第一个可见时间范围内从100开始。通过这种方式,您可以比较此后所有序列相对于彼此的变化情况。在Google AnnotationChart中没有这样做的选项。每次更新范围滑块后,您可以自己更改值。但这将比预期的更昂贵。另外,您可能希望同时显示原始值和重定基值。
var viewColumns = [0];
var colors = [];
for (var i = 0; i < columnIndices.length; i++) {
  viewColumns.push({
    label: data.getColumnLabel(columnIndices[i]),
    type: 'number',
    calc: (function(x) {
      // use a closure here to lock the value of i to each column
      return function(dt, row) {
        // return the value normalized to the first row in the view
        return dt.getValue(row, columnIndices[x]) / dt.getValue(0, columnIndices[x]);
      };
    })(i)
  });
}