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;
},