d3.js kullanıyorum, dışarıda etiketli bir çörek grafiği oluşturmak için kullanıyorum. Turtanın her diliminin merkezlerine dayanan bir miktar trigonometri kullanarak etiketleri yerleştiriyorum. Ben sonuçta başarmak çalıştığım şeyd3js Bir pasta grafiğinin çevresindeki etiketlerin yeniden dağıtılması
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+"%"; });
çakışmaları önlemek için pasta grafiğin kenarlarında dışındadır etiketleri, yeniden düzenlemek etmektir.
sorunu çözmek için çalıştık yollardan
bir
garanti, etiketler konumlandırılabilir "bağlantı noktalarını" set tanımlamak için onlar olacak bir çakışma olduğu. Sorun, merkezlerin çapalara eşlenmesi ve dilimlerle etiketler arasındaki görsel yazışmaların bir anlamda korunmasıdır (Dilimler ince olduğunda özel olarak zor).Görüntü yukarıdaki çapa muhtemel konumunu gösterir (dilim centroids gösterilmiştir). Bu pozisyonlar ile bir çakışma olması imkansızdır.
Sorunla ilgili karmaşıklık eklemek, etiketlerin (yatay oldukları) pastanın üstüne veya altına yakın olması durumunda, pastaların sağında veya solunda olduklarından daha kolay örtüşmeleridir. .
Bu soruna nasıl yaklaşılacağı ile ilgili herhangi bir fikir var mı?
.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";
})
Bu biraz yardımcı olur ve etiketlere bazı oda verir, yine olsa bütün davaları kapsayacak bir çözüm arıyorsanız:
[DÜZENLE] meetamit önerisi ardından, aşağıdaki uyguladı. ..
Şimdiye kadar jsfiddle üzerinde sahip olduğunuz bir örneği koyabilir misiniz? – Jonah
Netlik için bir resim ekledim. Başarısız olabileceği çeşitli durumlarda kâğıt üzerinde çalıştığım için "çapa" çözümüne kod uygulamamıştım. – Cenobyte321
Anladım. Gerçekten de, zor bir probleminiz var ve d3'le gerçekten çok ilgisi olmayan bir şey var: grafiğinizdeki etiketlerin yerleştirilmesi için genel bir algoritma arıyorsunuz. Herhangi bir varsayım yapabilir misin? Örneğin, tüm parçalar yeşil ve sarı olanlar kadar az olsaydı, tüm etiketleri sığdırmak için iyi bir yol olmazdı? Etiketin, yalnızca belirli bir boyutun altında olan parçalar için vurgunun üzerinde gösterilmesi nedir? – Jonah