के आसपास लेबल पुनर्वितरण मैं बाहर के लेबल के साथ एक डोनट चार्ट बनाने के लिए d3.js का उपयोग कर रहा हूं। पाई के प्रत्येक टुकड़े के सेंट्रॉइड के आधार पर कुछ त्रिकोणमिति का उपयोग करके, मैं लेबल को स्थिति देता हूं।d3js एक पाई चार्ट
g.append("g")
.attr("class", "percentage")
.append("text")
.attr("transform", function(d)
{
var c = arc.centroid(d);
var x = c[0];
var y = c[1];
var h = Math.sqrt(x*x + y*y);
return "translate(" + (x/h * obj.labelRadius) + ',' + (y/h * obj.labelRadius) + ")";
}
)
.attr("dy", ".4em")
.attr("text-anchor", function(d)
{
return (d.endAngle + d.startAngle)/2 > Math.PI ? "end" : "start";
}
)
.text(function(d) { return d.data.percentage+"%"; });
क्या मैं अंत में पूरा करने के लिए कोशिश कर रहा हूँ लेबल कि पाइ चार्ट के किनारों से बाहर हैं, ओवरलैप को रोकने के लिए पुन: व्यवस्थित करने के लिए है।
तरीके मैं समस्या को हल करने की कोशिश की है में से एक "लंगर अंक", जहां लेबल तैनात किया जा सकता है सेट को परिभाषित करने के लिए, की गारंटी है कि वे कोई ओवरलैप। समस्या एंकरों के लिए सेंट्रॉइड मैपिंग कर रही है और स्लाइस और लेबल के बीच दृश्य पत्राचार की कुछ समझ को संरक्षित कर रही है (स्लाइस स्लिम के दौरान विशेष रूप से मुश्किल है)।
छवि ऊपर एंकर के संभावित स्थान दिखाता है (स्लाइस centroids के दिखाया गया है)। इन पदों के साथ ओवरलैप होना असंभव है।
समस्या में जटिलता जोड़ना तथ्य यह है कि जब लेबल (वे क्षैतिज होते हैं) पाई के ऊपर या नीचे के करीब होते हैं, तो वे पाई के दाएं या बाएं होने की तुलना में अधिक आसानी से ओवरलैप होते हैं ।
इस समस्या से कैसे संपर्क करें इस पर कोई विचार?
.attr("dy", function(d)
{
var c = arc.centroid(d);
var x = c[0];
var y = c[1];
var h = Math.sqrt(x*x + y*y);
var dy = y/h * obj.labelRadius;
dy=dy*fontSizeParam*.14/heightParam);
return (dy)+"em";
})
यह थोड़ा में मदद करता है, और लेबल के लिए कुछ प्रदान करती है, अभी भी एक समाधान है कि सभी मामलों को कवर किया जाएगा, हालांकि की तलाश:
[संपादित करें] meetamit के सुझाव के बाद, मैं निम्नलिखित लागू किया। ..
क्या आप jsfiddle पर अब तक जो कुछ भी कर चुके हैं उसका एक उदाहरण प्रस्तुत कर सकते हैं? – Jonah
मैंने स्पष्टता के लिए एक छवि जोड़ा। मैंने "एंकर" समाधान कोड में लागू नहीं किया है, क्योंकि मैंने कागज पर विभिन्न मामलों पर काम किया है जहां यह असफल हो सकता है। – Cenobyte321
मैं देखता हूं। दरअसल, आपको एक मुश्किल समस्या है, और जिसकी वास्तव में डी 3 प्रति से कम नहीं है: आप अपने ग्राफ पर लेबल की नियुक्ति के लिए एक सामान्य एल्गोरिदम खोज रहे हैं। क्या आप कोई धारणा कर सकते हैं? उदाहरण के लिए, यदि सभी टुकड़े हरे और पीले रंग के जितने छोटे थे, तो सभी लेबलों में फिट होने का कोई अच्छा तरीका नहीं होगा? एक निश्चित आकार से नीचे के टुकड़ों के लिए केवल होवर पर लेबल दिखाने के बारे में क्या? – Jonah