Chart.js(v2)에서 선 그래프에서 선택 부분을 강조 표시
이게 뭐야
이번에는 Chart.js를 v2로 마이그레이션했습니다.
그때까지는 Chart.js의 선 그래프에 선택 기능 추가 - Qiita 적어 둡니다.
※2016/06/29 시점에서의 최신판이 되는 v2.1.6으로 이행해, 그 Chart.js를 대상으로 하여 각 수정을 실시하고 있습니다.
수정 부분
간단히 Chart.js를 직접 만지면 부분만 보여줍니다.
repository를 clone하고 수정하고 build ~ 라든지는 기호로 부디.
기본값 추가
기본적으로 이번에 추가할 강조 표시 기능을 사용하지 않도록 설정합니다.
Chart.js@@ -6564,6 +6564,9 @@ module.exports = function(Chart) {
tickMarkLength: 10,
zeroLineWidth: 1,
zeroLineColor: "rgba(0,0,0,0.25)",
+ highlightVerticalLine: false, // 強調表示を行うか否かのフラグ
+ highlightLineColor: "rgba(255,0,102,1)", // 強調表示時の線の色
+ highlightLineWidth: 2, // 強調表示時の線の太さ
offsetGridLines: false
},
기능을 유효하게 할 때는 new Chart()시 options에 적절히 파라미터를 건네줍니다.
options: {
...
scales: {
xAxes: [{
gridLines: {
highlightVerticalLine: true
}
}]
},
...
}
축의 label이 많은 경우 skip되어 버리므로 대처
이후 2개는 묘화 대상이 되는 item을 루프로가---와 조립하고 있는 근처에 편집을 실시합니다.
Chart.js는 어색하고 너무 축 항목 수가 많으면 skip 해 버립니다.
빠짐없이 강조 표시하고 싶은 grid선까지 skip 버리므로, 묘화 대상이 되도록 조건을 만지십시오.
Chart.js@@ -7111,9 +7114,10 @@ module.exports = function(Chart) {
var isLastTick = me.ticks.length === index + 1;
+ var isHighlightTick = gridLines.highlightVerticalLine && index === me.highlightIndex;
// Since we always show the last tick,we need may need to hide the last shown one before
var shouldSkip = (skipRatio > 1 && index % skipRatio > 0) || (index % skipRatio === 0 && index + skipRatio >= me.ticks.length);
- if (shouldSkip && !isLastTick || (label === undefined || label === null)) {
+ if (shouldSkip && !isLastTick && !isHighlightTick || (label === undefined || label === null)) {
return;
}
강조 표시
강조 표시 grid 선의 색상과 두께를 지정합니다.
Chart.js적으로는 skip 대상이 되는 grid선의 경우(shouldSkip가 treue의 경우), 원래는 묘화되어 있지 않은 label가 강조 표시시만 튀어 나와서 멋지기 때문에, label에 공문자를 대입하고 있습니다.
Chart.js@@ -7122,7 +7126,13 @@ module.exports = function(Chart) {
// Draw the first index specially
lineWidth = gridLines.zeroLineWidth;
lineColor = gridLines.zeroLineColor;
- } else {
+ } else if (isHighlightTick) {
+ if (shouldSkip) {
+ label = '';
+ }
+ lineWidth = gridLines.highlightLineWidth;
+ lineColor = gridLines.highlightLineColor;
+ } else {
lineWidth = helpers.getValueAtIndexOrDefault(gridLines.lineWidth, index);
lineColor = helpers.getValueAtIndexOrDefault(gridLines.color, index);
}
샘플
Chart.js/samples/line.html에서 예제를 보여줍니다.
강조 표시 기능이 유효하게 되는 것과 같은 플래그를 건네준다.
색상과 두께를 변경하려면 highlightVerticalLine과 같은 깊이로 적절하게 설정하십시오.
line.html@@ -99,6 +99,9 @@
scaleLabel: {
display: true,
labelString: 'Month'
+ },
+ gridLines: {
+ highlightVerticalLine: true
}
}],
yAxes: [{
리스너 설정 - mouseover&onclick
line.html@@ -127,6 +130,32 @@
window.onload = function() {
var ctx = document.getElementById("canvas").getContext("2d");
window.myLine = new Chart(ctx, config);
+
+ var chartElm = document.getElementById("canvas");
+
+ // point上ではクリックできる風にcursor = 'pointer';
+ chartElm.onmousemove = function(evt) {
+ if (window.myLine.getElementsAtEvent(evt).length > 0) {
+ chartElm.style.cursor = 'pointer';
+ } else {
+ chartElm.style.cursor = 'default';
+ }
+ }
+
+ chartElm.onclick = function(evt) {
+ console.log(evt);
+ // クリックした要素達を取得
+ var activePoints = window.myLine.getElementsAtEvent(evt);
+
+ // なければ撤退
+ if(activePoints.length <= 0) {
+ return;
+ }
+
+ // hilightIndexに渡して縦線を引く
+ window.myLine.scales['x-axis-0'].highlightIndex = activePoints[0]._index;
+ // update()忘れず
+ window.myLine.update();
+ }
};
$('#randomizeData').click(function() {
이렇게
수고하셨습니다.
아직도 js 힘 약하기 때문에 마사카리 먹고 싶어, 잘 부탁드립니다.
참고
간단히 Chart.js를 직접 만지면 부분만 보여줍니다.
repository를 clone하고 수정하고 build ~ 라든지는 기호로 부디.
기본값 추가
기본적으로 이번에 추가할 강조 표시 기능을 사용하지 않도록 설정합니다.
Chart.js
@@ -6564,6 +6564,9 @@ module.exports = function(Chart) {
tickMarkLength: 10,
zeroLineWidth: 1,
zeroLineColor: "rgba(0,0,0,0.25)",
+ highlightVerticalLine: false, // 強調表示を行うか否かのフラグ
+ highlightLineColor: "rgba(255,0,102,1)", // 強調表示時の線の色
+ highlightLineWidth: 2, // 強調表示時の線の太さ
offsetGridLines: false
},
기능을 유효하게 할 때는 new Chart()시 options에 적절히 파라미터를 건네줍니다.
options: {
...
scales: {
xAxes: [{
gridLines: {
highlightVerticalLine: true
}
}]
},
...
}
축의 label이 많은 경우 skip되어 버리므로 대처
이후 2개는 묘화 대상이 되는 item을 루프로가---와 조립하고 있는 근처에 편집을 실시합니다.
Chart.js는 어색하고 너무 축 항목 수가 많으면 skip 해 버립니다.
빠짐없이 강조 표시하고 싶은 grid선까지 skip 버리므로, 묘화 대상이 되도록 조건을 만지십시오.
Chart.js
@@ -7111,9 +7114,10 @@ module.exports = function(Chart) {
var isLastTick = me.ticks.length === index + 1;
+ var isHighlightTick = gridLines.highlightVerticalLine && index === me.highlightIndex;
// Since we always show the last tick,we need may need to hide the last shown one before
var shouldSkip = (skipRatio > 1 && index % skipRatio > 0) || (index % skipRatio === 0 && index + skipRatio >= me.ticks.length);
- if (shouldSkip && !isLastTick || (label === undefined || label === null)) {
+ if (shouldSkip && !isLastTick && !isHighlightTick || (label === undefined || label === null)) {
return;
}
강조 표시
강조 표시 grid 선의 색상과 두께를 지정합니다.
Chart.js적으로는 skip 대상이 되는 grid선의 경우(shouldSkip가 treue의 경우), 원래는 묘화되어 있지 않은 label가 강조 표시시만 튀어 나와서 멋지기 때문에, label에 공문자를 대입하고 있습니다.
Chart.js
@@ -7122,7 +7126,13 @@ module.exports = function(Chart) {
// Draw the first index specially
lineWidth = gridLines.zeroLineWidth;
lineColor = gridLines.zeroLineColor;
- } else {
+ } else if (isHighlightTick) {
+ if (shouldSkip) {
+ label = '';
+ }
+ lineWidth = gridLines.highlightLineWidth;
+ lineColor = gridLines.highlightLineColor;
+ } else {
lineWidth = helpers.getValueAtIndexOrDefault(gridLines.lineWidth, index);
lineColor = helpers.getValueAtIndexOrDefault(gridLines.color, index);
}
샘플
Chart.js/samples/line.html에서 예제를 보여줍니다.
강조 표시 기능이 유효하게 되는 것과 같은 플래그를 건네준다.
색상과 두께를 변경하려면 highlightVerticalLine과 같은 깊이로 적절하게 설정하십시오.
line.html@@ -99,6 +99,9 @@
scaleLabel: {
display: true,
labelString: 'Month'
+ },
+ gridLines: {
+ highlightVerticalLine: true
}
}],
yAxes: [{
리스너 설정 - mouseover&onclick
line.html@@ -127,6 +130,32 @@
window.onload = function() {
var ctx = document.getElementById("canvas").getContext("2d");
window.myLine = new Chart(ctx, config);
+
+ var chartElm = document.getElementById("canvas");
+
+ // point上ではクリックできる風にcursor = 'pointer';
+ chartElm.onmousemove = function(evt) {
+ if (window.myLine.getElementsAtEvent(evt).length > 0) {
+ chartElm.style.cursor = 'pointer';
+ } else {
+ chartElm.style.cursor = 'default';
+ }
+ }
+
+ chartElm.onclick = function(evt) {
+ console.log(evt);
+ // クリックした要素達を取得
+ var activePoints = window.myLine.getElementsAtEvent(evt);
+
+ // なければ撤退
+ if(activePoints.length <= 0) {
+ return;
+ }
+
+ // hilightIndexに渡して縦線を引く
+ window.myLine.scales['x-axis-0'].highlightIndex = activePoints[0]._index;
+ // update()忘れず
+ window.myLine.update();
+ }
};
$('#randomizeData').click(function() {
이렇게
수고하셨습니다.
아직도 js 힘 약하기 때문에 마사카리 먹고 싶어, 잘 부탁드립니다.
참고
@@ -99,6 +99,9 @@
scaleLabel: {
display: true,
labelString: 'Month'
+ },
+ gridLines: {
+ highlightVerticalLine: true
}
}],
yAxes: [{
@@ -127,6 +130,32 @@
window.onload = function() {
var ctx = document.getElementById("canvas").getContext("2d");
window.myLine = new Chart(ctx, config);
+
+ var chartElm = document.getElementById("canvas");
+
+ // point上ではクリックできる風にcursor = 'pointer';
+ chartElm.onmousemove = function(evt) {
+ if (window.myLine.getElementsAtEvent(evt).length > 0) {
+ chartElm.style.cursor = 'pointer';
+ } else {
+ chartElm.style.cursor = 'default';
+ }
+ }
+
+ chartElm.onclick = function(evt) {
+ console.log(evt);
+ // クリックした要素達を取得
+ var activePoints = window.myLine.getElementsAtEvent(evt);
+
+ // なければ撤退
+ if(activePoints.length <= 0) {
+ return;
+ }
+
+ // hilightIndexに渡して縦線を引く
+ window.myLine.scales['x-axis-0'].highlightIndex = activePoints[0]._index;
+ // update()忘れず
+ window.myLine.update();
+ }
};
$('#randomizeData').click(function() {
수고하셨습니다.
아직도 js 힘 약하기 때문에 마사카리 먹고 싶어, 잘 부탁드립니다.
참고
Reference
이 문제에 관하여(Chart.js(v2)에서 선 그래프에서 선택 부분을 강조 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/wara_be/items/44ef4d9d2c3942acfb7f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)