Tôi sử dụng thư viện wordcloud của Jason Davies cho d3 (https://github.com/jasondavies/d3-cloud) và vấn đề của tôi là các từ trong đám mây trùng nhau.Chồng chéo trong d3 wordcloud
Tôi biết rằng đã có các câu hỏi liên quan đến vấn đề này về tràn ngăn xếp (và các trang web khác), nhưng không có điều nào trong số này giúp ích trong trường hợp của tôi.
Trong ví dụ sau tôi sử dụng ví dụ đám mây từ trang web của Jason Davies' và thay đổi chỉ có một vài điều:
- tôi đọc những lời của tôi và kích thước của chúng từ một tập tin bên ngoài.
- Tôi đặt xoay thành 0. Góc quay dường như không tạo nên sự khác biệt.
- Tôi đã nhận xét phông chữ "Tác động", để loại trừ bất kỳ sự cố nào khi tải phông chữ. (Nó làm cho có sự khác biệt trong hai mặc dù.)
Đây là mã của tôi:
<!DOCTYPE html>
<meta charset="utf-8">
<body>
<script src="d3.js"></script>
<script src="d3.layout.cloud.js"></script>
<script>
d3.tsv("testdata.txt",
function(error, data) {
var fill = d3.scale.category20();
d3.layout.cloud().size([300, 300])
.words(data)
.padding(1)
.rotate(function(d) { return 0; })
// .font("Impact")
.fontSize(function(d) { return d.size; })
.on("end", draw)
.start();
function draw(words) {
d3.select("body").append("svg")
.attr("width", 300)
.attr("height", 300)
.append("g")
.attr("transform", "translate(150,150)")
.selectAll("text")
.data(words)
.enter().append("text")
.style("font-size", function(d) { return d.size + "px"; })
// .style("font-family", "Impact")
.style("fill", function(d, i) { return fill(i); })
.attr("text-anchor", "middle")
.attr("transform", function(d) {
return "translate(" + [d.x, d.y] + ")rotate(" + d.rotate + ")";
})
.text(function(d) { return d.word; });
}
}
)
</script>
Các TestData trông như thế này (các thông tin màu không được sử dụng trong ví dụ):
word size color
der 39 #a9a9a9
die 37 #a9a9a9
und 30 #a9a9a9
athenischen 29 #a9a9a9
Die 29 #a9a9a9
eine 28 #a9a9a9
, 27 #a9a9a9
einer 26 #a9a9a9
attischen 26 #a9a9a9
liberalen 26 #1e90ff
zur 25 #a9a9a9
athenische 24 #a9a9a9
christliche 23 #a9a9a9
attische 23 #a9a9a9
_START_ 22 #a9a9a9
reinen 22 #a9a9a9
englischen 21 #a9a9a9
oder 21 #a9a9a9
-- 21 #a9a9a9
radikalen 21 #a9a9a9
Q*M 21 #a9a9a9
Q*M 21 #a9a9a9
christlichen 20 #a9a9a9
schöne 20 #1e90ff
repräsentativen 20 #a9a9a9
sozialen 20 #a9a9a9
hellenische 19 #1e90ff
modernen 19 #a9a9a9
radikale 19 #a9a9a9
griechische 19 #a9a9a9
- 18 #a9a9a9
schönen 18 #1e90ff
alle 18 #a9a9a9
radicalen 18 #a9a9a9
als 17 #a9a9a9
neuen 17 #a9a9a9
perikleischen 16 #a9a9a9
bürgerlichen 16 #a9a9a9
Namen 16 #1e90ff
Nếu tôi chạy tập lệnh js với dữ liệu thử nghiệm thì đám mây từ của tôi xuất hiện với các chồng chéo. Đôi khi nó chỉ xảy ra sau một vài lần tải lại, nhưng nó khá thường xuyên.
Những người khác đã báo cáo cùng một vấn đề và nhận thấy rằng nó liên quan đến việc sử dụng phông chữ web hoặc bỏ qua thông số xoay. Điều này không áp dụng trong ví dụ của tôi.
Tôi nghi ngờ rằng nó có thể liên quan đến thực tế là có nhiều từ cho kích cỡ canvas, tuy nhiên, tôi cũng đã thử nghiệm nơi tôi tăng kích thước canvas một cách đáng kể và nó vẫn xảy ra (mặc dù ít thường xuyên hơn, như ngẫu nhiên vị trí của các từ làm cho nó ít có khả năng). Ngoài ra, bạn có thể thấy rằng một số từ không được hiển thị ở tất cả do kích thước canvas nhỏ. Tại sao để lại một số và tạo chồng chéo cho người khác? Vì vậy, tôi nghĩ vấn đề nằm ở nơi khác.
Bất kỳ ý tưởng nào?
Cảm ơn!
Đồng ý rằng có những khó khăn. Tuy nhiên, chơi một chút với kích thước (bố cục và svg) và họ phông chữ, có thể chỉ đạt được các chồng chéo thường xuyên và tương đối nhẹ (nhưng mức độ trùng lặp có thể chấp nhận được một chút chủ quan). Trong mọi trường hợp, đây là một [plunk] (http://plnkr.co/edit/1In5m9Ot7nUPrNULOOYv?p=preview) mà tôi tạo ra để chơi với nó. Ít nhất, tôi tin rằng những chiều hướng này được cải thiện về việc loại trừ các từ ... có vẻ như hầu hết trong số chúng đều có (mặc dù chúng cần tất cả ở đó). – FernOfTheAndes
Vâng, cảm ơn bạn. Bạn đã thay đổi kích thước và phông chữ theo như tôi thấy?Nó hoạt động khá ổn cho ví dụ này. Tuy nhiên, tôi thực sự muốn giải quyết vấn đề nói chung. Tôi thực sự khá ngạc nhiên khi nó xảy ra vì toàn bộ quan điểm của bố cục đám mây từ nên tránh trùng lặp và tôi thấy rất nhiều lời khen ngợi cho nó. – spaebrun
Bạn nói đúng. Đó là tất cả những gì tôi đã làm. Và đồng ý với bạn, một giải pháp chung là những gì cần thiết. Chúng ta có thể thiếu một cái gì đó ... Tôi không có thời gian để nghiên cứu sâu về nó quá sâu. Bạn cũng có thể viết một email tới [Jason] (http://www.jasondavies.com). – FernOfTheAndes