Można spróbować to
Tworzenie sklepu ukrytych zbiorów danych
window.chartName = new Chart(...
window.chartName.store = new Array();
Następnie za pomocą tej funkcji można aktualizować wykresu, należy obchodzić się przez kliknięcie na pozycji legendy
function updateDataset(legendLi, chart, label) {
var store = chart.store;
var exists = false;
for (var i = 0; i < store.length; i++) {
if (store[i][0] === label) {
exists = true;
chart.datasets.push(store.splice(i, 1)[0][1]);
legendLi.fadeTo("slow", 1);
}
}
if (!exists) {
for (var i = 0; i < chart.datasets.length; i++) {
if (chart.datasets[i].label === label) {
chart.store.push([label, chart.datasets.splice(i, 1)[0]]);
legendLi.fadeTo("slow", 0.33);
}
}
}
chart.update();
}
nie zapomnij zaktualizowane szablon legendy w opcjach wykresu:
legendTemplate : "<ul class=\"<%=name.toLowerCase()%>-legend\"><% for (var i=0; i<datasets.length; i++){%><li class=\"legend-item\" onclick=\"updateDataset($(this), window.chartName, '<%=datasets[i].label%>')\"><span style=\"background-color:<%=datasets[i].strokeColor%>\"></span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%></ul>"
Krótko, dodałem ten moduł obsługi onclick dla elementu li
<li class=\"legend-item\" onclick=\"updateDataset($(this), window.chartName , '<%=datasets[i].label%>')\"><
Na przykład fiddle
Po prostu przerysować wykres bez tej serii? – Pointy
@Pointy Zastanawiam się, czy był łatwiejszy, samowystarczalny i bardziej automatyczny sposób na zrobienie tego. W ten sposób muszę dołączać wydarzenie do elementów legendy, wykluczać lub dołączać serie i przerysowywać. Z wieloma wykresami idzie to szybko w kierunku chaosu, imo, ale i tak dziękuję. – pomarc
Cóż, o ile mogę powiedzieć, Chart.js w szczególności nie ma wiele wyrafinowania na temat obsługi interakcji. – Pointy