Javascript 谷歌折线图不起作用

Javascript 谷歌折线图不起作用,javascript,charts,google-visualization,linechart,Javascript,Charts,Google Visualization,Linechart,下面的代码将数据写入屏幕,这需要绘制在图形中。该图应类似于So,当计算阵列指示符时(第112行),它包含3个子阵列:一个带有日期,一个带有标准化价格,另一个带有mRS值。阵列指示器也计算了3次:一次用于AAL,一次用于ABF,一次用于ADM。因此,我需要显示3个图形,每个符号一个。 因此,本质上,多行代码需要集成到转置代码中,从而生成3个折线图,即在计算指示器阵列之后 <script type="text/javascript" src="https://www.gstatic.c

下面的代码将数据写入屏幕,这需要绘制在图形中。该图应类似于So,当计算阵列指示符时(第112行),它包含3个子阵列:一个带有日期,一个带有标准化价格,另一个带有mRS值。阵列指示器也计算了3次:一次用于AAL,一次用于ABF,一次用于ADM。因此,我需要显示3个图形,每个符号一个。 因此,本质上,多行代码需要集成到转置代码中,从而生成3个折线图,即在计算指示器阵列之后

    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">

var prices = [['Date', 'AAL', 'ABF', 'ADM'],
['2016-12-01', 1207.5, 2514.55, 1847.00],
['2016-11-01', 1123.5, 2475.00, 1901.00],
['2016-10-01', 1131, 2462.00, 1917.00],
['2016-09-01', 967.6, 2600.00, 2049.00],
['2016-08-01', 779.8, 3041, 2013.36],
['2016-07-01', 830.5, 2691, 2125.32],
['2016-06-01', 726.9, 2719, 1993.72],
['2016-05-02', 600.1, 2933.644, 1933.282],
['2016-04-01', 763.4, 3053.222, 1792.365],
['2016-03-01', 552.1, 3337.219, 1913.98],
['2016-02-01', 480.25, 3394.019, 1671.716],
['2016-01-04', 277.45, 3138.919, 1712.254],
['2015-12-01', 299.45, 3330.244, 1601.257],
['2015-11-02', 408.65, 3508.387, 1564.58],
['2015-10-01', 546.6, 3418.352, 1556.858],
['2015-09-01', 550.9, 3304.572, 1449.722],
['2015-08-03', 741, 3168.036, 1472.785],
['2015-07-01', 789.923, 3189.803, 1407.223],
['2015-06-01', 894.409, 2840.547, 1317.905],
['2015-05-01', 999.089, 2985.838, 1414.824],
['2015-04-01', 1076.017, 2817.219, 1458.897],
['2015-03-02', 985.457, 2778.762, 1432.678],
['2015-02-02', 1119.873, 3081.488, 1381.177],
['2015-01-01', 1030.099, 3059.794, 1355.894],
['2014-12-01', 1111.081, 3109.098, 1237.909],
['2014-11-03', 1223.068, 3134.425, 1161.125],
['2014-10-01', 1218.441, 2695.038, 1250.082],
['2014-09-01', 1280.913, 2621.644, 1201.39],
['2014-08-01', 1416.038, 2801.704, 1227.186],
['2014-07-01', 1461.646, 2718.524, 1339.334],
['2014-06-02', 1307.163, 2983.722, 1423.904],
['2014-05-01', 1332.301, 2943.89, 1340.253],
['2014-04-01', 1446.106, 2898.044, 1285.099],
['2014-03-03', 1395.374, 2712.71, 1290.464],
['2014-02-03', 1369.37, 2924.382, 1296.79],
['2014-01-01', 1284.4, 2648.331, 1305.827],
['2013-12-02', 1180.646, 2384.961, 1183.829],
['2013-11-01', 1206.584, 2212.07, 1123.282],
['2013-10-01', 1328.227, 2186.987, 1155.815],
['2013-09-02', 1357.743, 1809.787, 1114.245],
['2013-08-01', 1322.413, 1779.881, 1119.517],
['2013-07-01', 1242.815, 1875.387, 1245.585],
['2013-06-03', 1117.474, 1673.764, 1178.112],
['2013-05-01', 1347.412, 1738.319, 1187.878],
['2013-04-01', 1381.396, 1856.318, 1118.274],
['2013-03-01', 1493.496, 1823.7, 1162.796],
['2013-02-01', 1664.242, 1776.693, 1092.085],
['2013-01-01', 1633.503, 1677.881, 1067.642],
['2012-12-03', 1639.998, 1500.404, 1012.645]];

// Pairwise multiplication of the elements in two arrays; for use in mUp and mDown calculation
function dotproduct(a, b) {
  var n = 0;
  for (var i = 0; i < Math.min(a.length, b.length); i++) n += a[i][1] * b[i];
  return n;
}

// Define array of weights that is global to the program
var weight = [];

// Weighting function
function weights() {
  var k = 1;
  var lambda = 2;
  for (var x = 0.1; x < 20; x++) {
    weight.push([x, k * Math.pow(x/lambda, k-1) * Math.exp(-Math.pow(x/lambda, k)) / lambda]);
  }
}

// Create the weights
weights();
document.write(weight + '<hr>');

// Fetch first row of the prices array and keep the remainder as actual prices
var symbols = prices[0];
prices.shift();

// Loop through all columns of prices
for (var c in prices[0]) {
  var min = prices[0][c];
  var max = prices[0][c];
  var up = [];
  var down = [];
  var indicator = [];

  // Loop through all rows of prices and calculate the minimum and maximum, the up-value and down-value
  for (var r in prices) {
    min = Math.min(prices[r][c], min);             // minimum price, for normalisation
    max = Math.max(prices[r][c], max);             // maximum price, for normalisation
    var last = (typeof prices[parseInt(r)+1] != "undefined") ? prices[parseInt(r)+1][c] : 0;
    up.push(Math.max(prices[r][c] - last, 0));     // up value
    down.push(-Math.min(prices[r][c] - last, 0));  // down value
  }
  document.write('symbol: ' + symbols[c] + '<br>');

  var mUp = [];    // weighted up values
  var mDown = [];  // weighted down values

  // Loop through all values of up and down and apply the weighting to the up and down values progressively
  for (var i in up) {
    mUp.push(dotproduct(weight, up));
    up.shift();    // drop the first element off the up array
    mDown.push(dotproduct(weight, down));
    down.shift();  // drop the first element off the down array
  }
  // Add date and price to indicator array
  for (var r in prices) {
    indicator.push([prices[r][0], (prices[r][c]-min)/max, mUp[r]/(mUp[r]+mDown[r])]);
  }

  // *********
  // Add the code to generate the line graph of array indicator here
  // *********
  document.write('indicator: ' + indicator + '<br>');

  // Calculate percentile
  document.write('first indicator: ' + indicator[0][2] + '<br>');
  // Define a counter
  var count = 0;
  // Count the number of data points smaller than or equal to n
  for (i in indicator) if (indicator[i][2] <= indicator[0][2]) count++;
  document.write('count: ' + count + '<br>');
  // Return the percentile
  document.write('percentile: ' + count/indicator.length + '<br>');
  document.write('<hr>');
}

</script>

风险值价格=[“日期”、“AAL”、“ABF”、“ADM”],
['2016-12-01', 1207.5, 2514.55, 1847.00],
['2016-11-01', 1123.5, 2475.00, 1901.00],
['2016-10-01', 1131, 2462.00, 1917.00],
['2016-09-01', 967.6, 2600.00, 2049.00],
['2016-08-01', 779.8, 3041, 2013.36],
['2016-07-01', 830.5, 2691, 2125.32],
['2016-06-01', 726.9, 2719, 1993.72],
['2016-05-02', 600.1, 2933.644, 1933.282],
['2016-04-01', 763.4, 3053.222, 1792.365],
['2016-03-01', 552.1, 3337.219, 1913.98],
['2016-02-01', 480.25, 3394.019, 1671.716],
['2016-01-04', 277.45, 3138.919, 1712.254],
['2015-12-01', 299.45, 3330.244, 1601.257],
['2015-11-02', 408.65, 3508.387, 1564.58],
['2015-10-01', 546.6, 3418.352, 1556.858],
['2015-09-01', 550.9, 3304.572, 1449.722],
['2015-08-03', 741, 3168.036, 1472.785],
['2015-07-01', 789.923, 3189.803, 1407.223],
['2015-06-01', 894.409, 2840.547, 1317.905],
['2015-05-01', 999.089, 2985.838, 1414.824],
['2015-04-01', 1076.017, 2817.219, 1458.897],
['2015-03-02', 985.457, 2778.762, 1432.678],
['2015-02-02', 1119.873, 3081.488, 1381.177],
['2015-01-01', 1030.099, 3059.794, 1355.894],
['2014-12-01', 1111.081, 3109.098, 1237.909],
['2014-11-03', 1223.068, 3134.425, 1161.125],
['2014-10-01', 1218.441, 2695.038, 1250.082],
['2014-09-01', 1280.913, 2621.644, 1201.39],
['2014-08-01', 1416.038, 2801.704, 1227.186],
['2014-07-01', 1461.646, 2718.524, 1339.334],
['2014-06-02', 1307.163, 2983.722, 1423.904],
['2014-05-01', 1332.301, 2943.89, 1340.253],
['2014-04-01', 1446.106, 2898.044, 1285.099],
['2014-03-03', 1395.374, 2712.71, 1290.464],
['2014-02-03', 1369.37, 2924.382, 1296.79],
['2014-01-01', 1284.4, 2648.331, 1305.827],
['2013-12-02', 1180.646, 2384.961, 1183.829],
['2013-11-01', 1206.584, 2212.07, 1123.282],
['2013-10-01', 1328.227, 2186.987, 1155.815],
['2013-09-02', 1357.743, 1809.787, 1114.245],
['2013-08-01', 1322.413, 1779.881, 1119.517],
['2013-07-01', 1242.815, 1875.387, 1245.585],
['2013-06-03', 1117.474, 1673.764, 1178.112],
['2013-05-01', 1347.412, 1738.319, 1187.878],
['2013-04-01', 1381.396, 1856.318, 1118.274],
['2013-03-01', 1493.496, 1823.7, 1162.796],
['2013-02-01', 1664.242, 1776.693, 1092.085],
['2013-01-01', 1633.503, 1677.881, 1067.642],
['2012-12-03', 1639.998, 1500.404, 1012.645]];
//两个数组中元素的成对乘法;用于mUp和mDown计算
功能点积(a,b){
var n=0;
对于(var i=0;i”);
//获取prices数组的第一行,并将剩余部分保留为实际价格
var符号=价格[0];
价格;
//循环浏览所有价格栏
对于(价格中的风险值c[0]){
var min=价格[0][c];
var max=价格[0][c];
var up=[];
var向下=[];
var指标=[];
//循环遍历所有价格行,并计算最小值和最大值、上升值和下降值
对于(价格中的风险值r){
min=Math.min(价格[r][c],min);//最低价格,用于标准化
max=Math.max(价格[r][c],max);//最大价格,用于标准化
var last=(价格类型[parseInt(r)+1]!=“未定义”)?价格[parseInt(r)+1][c]:0;
up.push(Math.max(prices[r][c]-last,0));//up值
down.push(-Math.min(prices[r][c]-last,0));//向下值
}
编写('symbol:'+symbols[c]+'
'); var mUp=[];//加权值 var mDown=[];//向下加权的值 //循环所有向上和向下的值,并逐步对向上和向下的值应用权重 for(var i向上){ 单位推力(点积(重量,向上)); up.shift();//从up数组中删除第一个元素 向下推(点积(重量,向下)); down.shift();//从down数组中删除第一个元素 } //将日期和价格添加到指标数组 对于(价格中的风险值r){ 指标推送([prices[r][0],(prices[r][c]-min)/max,mUp[r]/(mUp[r]+mDown[r]); } // ********* //在此处添加代码以生成数组指示器的折线图 // ********* 编写('indicator:'+indicator+'
'); //计算百分位 document.write('第一个指示符:'+指示符[0][2]+'
'); //定义计数器 var计数=0; //计算小于或等于n的数据点的数量
对于(i in indicator)if(indicator[i][2]假设数组
prices
是这些计算的结果,则使用
.arrayToDataTable()
将数据连接到Google可视化API

一小条

折线图
google.charts.load('current'{
“包”:[“核心图表”]
});
google.charts.setOnLoadCallback(drawChart);
函数绘图图(){
var data=google.visualization.arrayToDataTable([
['Date'、'AAL'、'ABF'、'ADM'],
['2016-12-01', 1207.5, 2514.55, 1847.00],
['2016-11-01', 1123.5, 2475.00, 1901.00],
['2016-10-01', 1131, 2462.00, 1917.00],
['2016-09-01', 967.6, 2600.00, 2049.00],
['2016-08-01', 779.8, 3041, 2013.36],