diff --git a/lib/charts/histogram.js b/lib/charts/histogram.js index 289c10e..00b598f 100644 --- a/lib/charts/histogram.js +++ b/lib/charts/histogram.js @@ -93,6 +93,12 @@ conf.xAxisData = []; this.source = []; var dimenT = conf.allDimensions; + if (conf.typeNames == null) { + conf.typeNames = []; + for (i = 0, j = source[0].length; i < j; i++) { + conf.typeNames.push(source[0][i]); + } + } for (i = 1, l = source.length; i < l; i++) { for(j = 1; j <= conf.typeNames.length; j++) { var line = {}; @@ -103,6 +109,7 @@ conf.xAxisData.push(source[i][0]); } + //设置默认的定义域 var getExtent = function (s, dimen) { return d3.extent(s, function (p) { @@ -168,7 +175,7 @@ tickText.push(paper.text(x[dimenX](ticks[j]), downPos+10, conf.xAxisData[ticks[j]-1]).attr({ "fill": "#878791", "fill-opacity": 0.7, - "font-family": "雅黑", + "font-family": "宋", "font-size": 12 }).attr({ "text-anchor": "middle" @@ -188,7 +195,7 @@ tickText.push(paper.text(leftPos - 10, y[dimenY](ticks[j]), ticks[j]).attr({ "fill": "#878791", "fill-opacity": 0.7, - "font-family": "雅黑", + "font-family": "宋", "font-size": 12 }).attr({ "text-anchor": "end" @@ -234,16 +241,17 @@ var paper = bars[0].paper; var i, j, k; var textWidth; - for(i = 0, j = rectBn.length; i < j; i++) + for (i = 0, j = rectBn.length; i < j; i++) if(rectBn[i].data.isClicked) { clicked = true; typeSeq = i; } //hover - if(clicked) { - if(typeSeq != this.data.seqNum % typeNum) + if (clicked) { + if (typeSeq != this.data.seqNum % typeNum) { return; - for(i = this.data.seqNum % typeNum, j = bars.length; i < j; i+=typeNum) { + } + for (i = this.data.seqNum % typeNum, j = bars.length; i < j; i+=typeNum) { bars[i].attr({ "fill-opacity":0.3 }); @@ -269,39 +277,39 @@ temp = paper.text(xPos + 16, yPos, bars[this.data.seqNum].data.yAxisLabel).attr({ "fill": "#ffffff", "fill-opacity": 1, - "font-family": "雅黑", + "font-family": "宋", "font-weight": "bold", "font-size": 12, "text-anchor": "middle" }); bars.push(temp); } else { - for(i = 0, j = bars.length; i < j; i++) { + for (i = 0, j = bars.length; i < j; i++) { if(i == seq) { - i+=typeNum-1; + i += typeNum - 1; } else { - - bars[i].attr({ - "fill-opacity":0.3 - }); + bars[i].attr({ + "fill-opacity":0.3 + }); } } //check if the labels will be overlapped var overlapped = false; var pos = []; - for(i = 0; i < typeNum; i++) { + for (i = 0; i < typeNum; i++) { pos.push(bars[seq + i].attrs.y); } pos.sort(); var sub = []; - for(i = 0; i < pos.length - 1; i++) { + for (i = 0; i < pos.length - 1; i++) { sub.push(pos[i+1] - pos[i]); } sub.sort(); - if(sub[0] < 20) + if (sub[0] < 20) { overlapped = true; - for(i = 0; i < typeNum; i++) { + } + for (i = 0; i < typeNum; i++) { xPos = bars[seq].attrs.x + 8 * typeNum + 8; yPos = overlapped?(bars[seq + typeNum - 1].attrs.y + 20 * (typeNum - i - 1)):bars[seq + i].attrs.y; textWidth = 5 * bars[seq + i].data.yAxisLabel.length + 20; @@ -320,7 +328,7 @@ temp = paper.text(xPos + 16, yPos, bars[seq + i].data.yAxisLabel).attr({ "fill": "#ffffff", "fill-opacity": 1, - "font-family": "雅黑", + "font-family": "宋", "font-weight": "bold", "font-size": 12, "text-anchor": "middle" @@ -344,7 +352,7 @@ temp = paper.text(xPos, yPos + 18, this.data.xAxisLabel).attr({ "fill": "#ffffff", "fill-opacity": 1, - "font-family": "雅黑", + "font-family": "宋", "font-weight": "bold", "font-size": 12, "text-anchor": "middle" @@ -367,45 +375,47 @@ var typeNum = this.data.typeNum; var temp; var i, j, k; - for(i = 0, j = rectBn.length; i < j; i++) - if(rectBn[i].data.isClicked) { + for (i = 0, j = rectBn.length; i < j; i++) { + if (rectBn[i].data.isClicked) { clicked = true; typeSeq = i; } + } //hover if(clicked) { - if(typeSeq != this.data.seqNum % typeNum) + if (typeSeq != this.data.seqNum % typeNum) { return; - for(i = this.data.seqNum % typeNum, j = bars.length; i < j; i+=typeNum) { + } + for (i = this.data.seqNum % typeNum, j = bars.length; i < j; i+=typeNum) { bars[i].attr({ "fill-opacity":1 }); } - for(i = 0; i < 3; i++) { + for (i = 0; i < 3; i++) { temp = bars.pop(); temp.remove(); } } else { - for(i = 0, j = bars.length; i < j; i++) { + for (i = 0, j = bars.length; i < j; i++) { bars[i].attr({ "fill-opacity":1 }); } - for(i = 0, j = typeNum * 3; i < j; i++) { + for (i = 0, j = typeNum * 3; i < j; i++) { temp = bars.pop(); temp.remove(); } } //pins - for(i = 0; i < 3; i++) { + for (i = 0; i < 3; i++) { temp = bars.pop(); temp.remove(); } }; for (i = 0, j = this.source.length; i < j; i++) { - for (k = 0, l = conf.typeNames.length; k < l; k++) - if(i%l == k) { + for (k = 0, l = conf.typeNames.length; k < l; k++) { + if (i%l == k) { temp = paper.rect((x[dimenX](this.source[i][dimenX])-barWidth * (l / 2 - i % l)), y[dimenY](this.source[i][dimenY]), barWidth, downPos - y[dimenY](this.source[i][dimenY])).attr({ "fill": conf.barColor[k], @@ -424,6 +434,7 @@ temp.mouseout(mouseOutBar); bars.push(temp); } + } } //legend var mouseOverLegend = function (event) { @@ -432,16 +443,17 @@ var rectBn = this.data.rectBn; var typeNum = this.data.typeNum; var i, j, k; - for(i = 0, j = rectBn.length; i < j; i++) + for (i = 0, j = rectBn.length; i < j; i++) if(rectBn[i].data.isClicked) return; - for(k = 0; k < typeNum; k++) { - if(seq % typeNum != k) - for(i = k, j = bars.length; i < j; i+=typeNum) { + for (k = 0; k < typeNum; k++) { + if (seq % typeNum != k) { + for (i = k, j = bars.length; i < j; i+=typeNum) { bars[i].attr({ "fill-opacity":0.3 }); } + } } this.data.underBn[seq].attr({ "fill-opacity":0.5 @@ -453,17 +465,20 @@ var rectBn = this.data.rectBn; var typeNum = this.data.typeNum; var i, j, k; - for(i = 0, j = rectBn.length; i < j; i++) - if(rectBn[i].data.isClicked) + for (i = 0, j = rectBn.length; i < j; i++) { + if(rectBn[i].data.isClicked) { return; + } + } // - for(k = 0; k < typeNum; k++) { - if(seq % typeNum != k) - for(i = k, j = bars.length; i < j; i+=typeNum) { + for (k = 0; k < typeNum; k++) { + if (seq % typeNum != k) { + for (i = k, j = bars.length; i < j; i+=typeNum) { bars[i].attr({ "fill-opacity":1 }); } + } } this.data.underBn[seq].attr({ "fill-opacity":0 @@ -479,8 +494,8 @@ var typeNum = this.data.typeNum; var i, j, k; //check if any legend has been already clicked - for(i = 0, j = rectBn.length; i < j; i++) { - if(rectBn[i].data.isClicked) { + for (i = 0, j = rectBn.length; i < j; i++) { + if (rectBn[i].data.isClicked) { clicked = true; lastClickedSeq = i; break; @@ -489,17 +504,18 @@ if(this.data.isClicked) { for(i = 0; i < typeNum; i++) { if(i != seq % typeNum) { - for(var j = i, m = bars.length; j < m; j+=typeNum) + for(var j = i, m = bars.length; j < m; j+=typeNum) { bars[j].attr({ "fill-opacity":0.3 }); + } } } this.data.isClicked = false; } else if(!clicked) { - for(i = 0; i < typeNum; i++) { - if(i != seq % typeNum) { - for(j = i, m = bars.length; j < m; j+=typeNum) + for (i = 0; i < typeNum; i++) { + if (i != seq % typeNum) { + for (j = i, m = bars.length; j < m; j+=typeNum) bars[j].attr({ "fill-opacity":0.1 }); @@ -511,14 +527,16 @@ underBn[lastClickedSeq].attr({ "fill-opacity":0 }); - for(i = lastClickedSeq % typeNum, j = bars.length; i < j; i+=typeNum) + for (i = lastClickedSeq % typeNum, j = bars.length; i < j; i+=typeNum) { bars[i].attr({ "fill-opacity":0.1 }); - for(i = seq % typeNum, j = bars.length; i < j; i+=typeNum) + } + for (i = seq % typeNum, j = bars.length; i < j; i+=typeNum) { bars[i].attr({ "fill-opacity":1 }); + } this.data.rectBn[lastClickedSeq].data.isClicked = false; this.data.isClicked = true; }