2015-01-22 11 views
8

पर क्लिक करके श्रृंखला छुपाएं मैं चार्ट.जेएस (www.chartjs.org) का उपयोग करने वाली साइट विकसित कर रहा हूं।चार्ट.जेएस: किंवदंती

मुझे एक लाइन चार्ट बनाना है जो डेटा की कई श्रृंखला दिखाता है, जो उपयोगकर्ता संबंधित किंवदंती प्रतीक (इस http://js.syncfusion.com/demos/web/#!/azure/chart/linechart के समान) पर क्लिक करके छुपा या दिखा सकते हैं।

क्या चार्टज के साथ ऐसा करने का कोई तरीका है?

+0

बस उस श्रृंखला के बिना चार्ट को फिर से खींचा जाए? – Pointy

+0

@ पॉइंटी मैं सोच रहा था कि ऐसा करने के लिए एक आसान, आत्मनिर्भर और अधिक स्वचालित तरीका था। इस तरह मुझे किंवदंती वस्तुओं को एक घटना को जोड़ना होगा, श्रृंखला को शामिल करना या शामिल करना होगा। कई चार्टों के साथ यह तेजी से अराजकता की ओर जाता है, इमो, लेकिन वैसे भी धन्यवाद। – pomarc

+0

जहां तक ​​मैं कह सकता हूं, विशेष रूप से चार्ट.जेएस में इंटरैक्शन का समर्थन करने के बारे में बहुत परिष्कार नहीं है। – Pointy

उत्तर

0

मुझे ऐसा करने का कोई तरीका नहीं मिला है। किंवदंती टेम्पलेट पर कुछ ऑनक्लिक व्यवहार डालना आसान है, और आप आसानी से श्रृंखला स्ट्रोक और रंग अल्फा चैनल को 0 में बदल सकते हैं ताकि क्षेत्र और स्ट्रोक गायब हो जाए लेकिन मुझे अंक पर ऐसा करने का कोई तरीका नहीं मिला है।

मैंने इस विशेष चार्ट के लिए Google चार्ट का उपयोग करने का निर्णय लिया है, और जब भी मुझे उस व्यवहार की आवश्यकता नहीं है, तो चार्ट.जेएस को उम्मीद है कि चार्ट.जे के अच्छे निर्माता भविष्य में इसे जोड़ देंगे।

13

आप कोशिश कर सकते हैं इस
छिपा डेटासेट

window.chartName = new Chart(... 

window.chartName.store = new Array(); 

के लिए स्टोर बनाएँ तो चार्ट अद्यतन करने के लिए इस सुविधा का उपयोग, कथा आइटम पर क्लिक करके नियंत्रित किया जाना चाहिए

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(); 
    } 

अद्यतन मत भूलना चार्ट विकल्पों में किंवदंती टेम्पलेट

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>" 

शीघ्र ही, मैं इस onclick हैंडलर ली घटक

<li class=\"legend-item\" onclick=\"updateDataset($(this), window.chartName , '<%=datasets[i].label%>')\">< 

के लिए उदाहरण fiddle के लिए जोड़ा

+1

उदाहरण के लिए, चार्ट में टॉगल लाइन http://jsfiddle.net/1qjco9Ls/ – Igor

+2

यह उत्तर स्वीकार किया जाना चाहिए और ऊपर उठाया जाना चाहिए। – Vico

+0

मुझे नहीं पता कि यह अधिक लोकप्रिय क्यों नहीं है। इससे मुझे बहुत मदद मिली, धन्यवाद! +1 और अधिक यदि मैं – SirDerpington

-2
onLegendClick: function (e) { 
var series = e.target; 
       series.isVisible() ? series.hide() : series.show(); 
      }, 

dxcharts एक समारोह onLegendClick कहा जाता है, कुछ अन्य लोगों onSeriesClick और onPointClick हैं। आशा है कि ये आपकी मदद करेगा।

+2

मूल प्रश्न चार्टजेएस के उपयोग से संबंधित है, न कि dxCharts, इसलिए यह सहायक नहीं है। – jschrab

2

यह प्रलेखन http://www.chartjs.org/docs/#chart-configuration-legend-configuration

लीजेंड विन्यास

कथा विन्यास options.legend नाम स्थान में पारित हो जाता से अब Charts.js

में उपलब्ध है। चार्ट किंवदंती के लिए वैश्विक विकल्प चार्ट.defaults.global.legend में परिभाषित किए गए हैं।

onClick समारोह (घटना, legendItem) {} एक कॉलबैक है कि जब एक 'क्लिक' कहा जाता है घटना एक लेबल आइटम

onhover समारोह (घटना, legendItem) के शीर्ष पर पंजीकृत है {} एक कॉलबैक कहलाता है जब एक लेबल आइटम

संबंधित मुद्दे