ccchartで欠測値を表示させないようにする方法(折れ線、エリアグラフ)

ccchart.jsを修正する

1.はデータの数値変換部分について、null、””(空文字)を0に変換せず、NaNにする

      //データのnumber化
      var _data =[];
      for(var i = 0;i< this.data.length; i++){
        _data[i]=[];
        for(var j = 0; j<this.data[i].length; j++){
          if (this.typeMulti[i] === 'linedush' || this.typeMulti[i] === 'linearea' || this.typeMulti[i] === 'line') {
            //数値変換(null、""はNAN)
            _data[i][j] = parseFloat(this.data[i][j]);
          } else {
            //nullなどは0にし、三桁カンマは除去
            _data[i][j] = parseFloat((''+this.data[i][j]).split(',').join('')||0);
          }
        }
      }
      this.data = _data;

2.データにヘッダー行がある場合はヘッダー行を列数とする(データ行は列数としてカウントしない)

      //データ行数
      this.dataRowLen = this.data.length;
      //データ列数(欠測対応)
      if (this.useFirstToRowName === true) {
      	  // ヘッダ行をデータ列数とする
	  this.dataColLen = this.colNames.length;
      } else {
    	  this.dataColLen = this.data[0].length;
      }

3.折れ線グラフの表示
 ・1)データが存在しない場合は、x軸の座標を次のデータに移動させる
 ・2)欠測値(isNaN)から次のデータに線を描画させない

_drawLine: function (op, func, k) {
 ・・・1)
      for (var l = 0; l < this.data[k].length; l++) {	
      	// データが非数の場合(欠測対応)
      	if (isNaN(this.data[k][l])) {
      		x += this.xGap
      		// 次のx軸目盛に移動
      		this.ctx.moveTo(x, this.chartBottom);
      		// 次のデータを処理する
      		continue;
      	}
・・・2)
      	// 最初のデータの場合
        if (l === 0) this.ctx.moveTo(x, y);
      	// 一つ前のデータが非数値の場合(欠測対応)
        else if (l !== 0 && isNaN(this.data[k][l-1])) this.ctx.moveTo(x, y);
        else this.ctx.lineTo(x, y);
      

4.塗りつぶしグラフの表示  ・1)データが存在しない場合(isNaN)は、現在座標の真下までのパスを引いてx軸の座標を次のデータに移動させる

_drawArea: function (op, func, k) {
・・・1)
       	// データが非数の場合(欠測対応)
      	if (isNaN(this.data[k][l])) {
      		// 座標の真下までのパスを引く
	        this.ctx.lineTo(x - this.xGap, this.chartBottom);
      		x += this.xGap
      		// 次のx軸目盛に移動
      		this.ctx.moveTo(x, this.chartBottom);
      		// 次のデータを処理する
      		continue;
      	}
     	

5.データの最大値を取得す処理
 ・1)非数値(isNaN)の場合最大値に含めない

      _preGetMinMax: function (that){
        //全データを連結した配列を返す
        var _ary = [];
        for(var i = 0; i < that.dataRowLen; i++){
          var _aryR=[];
          for(var j = 0; j < that.data[i].length; j++){
          	// isNaN(that.data[i][j](欠測対応)
            if(
              !(that.data[i][j]===null ||
              that.data[i][j]===undefined ||  
              	isNaN(that.data[i][j]))  ・・・・1)
            ){
              //for candle chart
              if(that.type==='candle'){
                if(i===1 || i===2)_aryR=_aryR.concat(that.data[i][j]);
              } else {
                _aryR=_aryR.concat(that.data[i][j]);
              }
            }
          }
          _ary=_ary.concat(_aryR);
        }
        return _ary;
      },

スポンサーリンク
google 6948682462
google 6948682462

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
google 6948682462