2013-04-28 27 views
31

मेरे पास एक बार चार्ट है जो सकारात्मक और नकारात्मक बार बनाता है। मैं बाद में नकारात्मक सलाखों को हटाने की कोशिश कर रहा हूं लेकिन अभी के लिए, सलाखों को जोड़ने के बाद भी, अगर मैं तुरंत नकारात्मक सलाखों को हटाने की कोशिश करता हूं, तो वे अभी भी दिखाई देते हैं।डी 3: तत्वों को हटा रहा है

var margin = {top: 30, right: 10, bottom: 10, left: 10}, 
    width = 750 - margin.left - margin.right, 
    height = data.length * 20 //500 - margin.top - margin.bottom; 

var x = d3.scale.linear() 
    .range([0, width*.85]) 

//chart1.x =x 
//chart1.y = y 

var y = d3.scale.ordinal() 
    .rangeRoundBands([0, height], 0); 

var xAxis = d3.svg.axis() 
    .scale(x) 
    .orient("top"); 

var svg = d3.select("#barchart").append("svg") 
    .attr("width", width + margin.left + margin.right) 
    .attr("height", height + margin.top + margin.bottom) 
    .append("g") 
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); 

//d3.tsv("data.tsv", type, function(error, data) { 
    x.domain(d3.extent(data, function(d) { return +d.netdonations_over_population_to_gdppercap_percentage; })).nice(); 
    y.domain(data.map(function(d) { return d.name; })); 

    bar = svg.selectAll(".bar") 
     .data(data) 
    .enter().append("rect") 
     .attr("class", function(d) { return +d.netdonations_over_population_to_gdppercap_percentage < 0 ? "bar negative" : "bar positive"; }) 
     .attr("x", function(d) { return x(Math.min(0, +d.netdonations_over_population_to_gdppercap_percentage)); }) 
     .attr("y", function(d) { return y(d.name); }) 
     .attr("width", function(d) { return Math.abs(x(+d.netdonations_over_population_to_gdppercap_percentage) - x(0)); }) 
     .attr("height", y.rangeBand()).style("stroke","white") 

bar.selectAll(".negative").data([]).exit().remove() 

निकालना कथन आखिरी है। कोड के बाकी:

svg.selectAll("text") 
    .data(data) 
    .enter().append("text").text(function(d) { 
     return d; 
    }).attr("y", function(d, i) { 
     return y(d.name)+ y.rangeBand(); 
     //return i * (height/data.length)+30; 
    }).attr("x", function(d) { 
     return x(0) //x(Math.min(0, +d.netdonations_over_population_to_gdppercap_percentage)); 
    }).text(function(d) { 
     //return y(d) + y.rangeBand()/2; 
     return d.name + " " + d.netdonations_over_population_to_gdppercap_percentage; 
     }).style("font-size","14px").attr("dx", 3).attr("dy", "-0.45em") 


    svg.append("g") 
     .attr("class", "x axis") 
     .call(xAxis); 

    svg.append("g") 
     .attr("class", "y axis") 
    .append("line") 
     .attr("x1", x(0)) 
     .attr("x2", x(0)) 
     .attr("y2", height); 

उत्तर

81

करने के लिए अपने selectAll बयान स्विच करके देखें:

svg.selectAll("rect.negative").remove() 

यह टैग हालांकि मैं 100% यकीन है कि यह यह मिलेगा क्योंकि नहीं कर रहा हूँ वर्ग negative साथ rect का चयन करना चाहिए attrclassbar negative के रूप में लिखा गया है। यदि यह काम नहीं करता है तो मैं negative bar या negative जैसे कुछ class विशेषता को बदलने का प्रयास कर सकता हूं।

क्षमा करें अगर यह मदद नहीं करता है!

+3

धन्यवाद। यह भी काम करता है: svg.selectAll ("bar.negative")। डेटा ([])। बाहर निकलें() हटाएं() – user994165

+2

क्या आपको वास्तव में खाली डेटा चयन की आवश्यकता है? क्या आप उन्हें सीधे हटा नहीं सकते? svg.selectAll ("rect.negative") हटाएं() – dule

+0

नहीं, आपका स्निपेट भी ठीक काम करेगा। – AllenSH