मैंने एक डी 3 डोनट चार्ट बनाया है। यहां मेरा कोड है:डी 3: नए डेटा वाले चार्ट को रीफ्रेश कैसे करें?
var width = 480;
var height = 480;
var radius = Math.min(width, height)/2;
var doughnutWidth = 30;
var color = d3.scale.category10();
var arc = d3.svg.arc()
.outerRadius(radius - 10)
.innerRadius(radius - 70);
var pie = d3.layout.pie()
.sort(null)
.value(function(d) { return d[1]; });
var dataset = settings.dataset;
console.log(dataset);
var svg = d3.select("body")
.append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(" + width/2 + "," + height/2 + ")");
var path = svg.selectAll('path')
.data(pie(dataset))
.enter()
.append('path')
.attr('d', arc)
.attr('fill', function(d, i) {
return color(d.data[0]);
})
मेरे पास मेरे वेब पेज पर एक साधारण रूप है जो कई विकल्पों के साथ एक ड्रॉपडाउन मेनू प्रदर्शित करता है। हर बार जब उपयोगकर्ता फॉर्म पर एक मान बदलता है तो मेरी स्क्रिप्ट (settings.dataset) पर एक नया डेटासेट भेजा जाता है और पृष्ठ पर डोनट को फिर से खींचा जाता है।
समस्या यह है कि पिछले डेटासेट के कुछ मान डोम में रहते हैं। नीचे कंसोल आउटपुट में, आप देख सकते हैं कि दूसरे डेटासेट में केवल दो तत्व हैं। तीसरा एक पिछले डेटासेट से है। यह चार्ट को गड़बड़ कर रहा है, क्योंकि यह एक ऐसा मूल्य प्रदर्शित कर रहा है जो वहां नहीं होना चाहिए।
मेरा प्रश्न: मैं कैसे पुराने मूल्यों को स्पष्ट करते हैं? मैंने .exit()
और .remove()
पर पढ़ा है, लेकिन मैं इन तरीकों के आसपास अपना सिर नहीं प्राप्त कर सकता हूं।
तो जिस कोड को आपने ऊपर चिपकाया है वह हर समय उदेट पर निष्पादित हो जाता है? – Cyril
हां, स्क्रिप्ट को हर बार बुलाया जाता है जब उपयोगकर्ता मेरे फॉर्म पर एक अलग विकल्प चुनता है। – 24ma13wg
एक मुद्दा जो मैं देख सकता हूं वह है d3.select ("body") .append ("svg") जिसका अर्थ है कि आप अद्यतन पर हर बार svg जोड़ रहे हैं। d3.select ("svg") करें। हटाएं() को अद्यतन पर हटाए जाने के लिए। – Cyril