Bagaimanakah saya boleh membungkus label teks dalam visualisasi pokok D3 untuk kebolehbacaan yang lebih baik?

Susan Sarandon
Lepaskan: 2024-10-25 01:10:02
asal
723 orang telah melayarinya

How can I wrap text labels in a D3 tree visualization for improved readability?

Membungkus Teks dalam Pokok D3

Dalam visualisasi pepohon D3, kadangkala adalah wajar untuk membalut label teks pada nod untuk membuat pokok lebih mudah dibaca. Artikel ini menunjukkan cara untuk mencapai pembungkusan teks ini.

Cabarannya

Pertimbangkan pokok D3 berikut:

Foo is not a long word
Salin selepas log masuk

Sebaik-baiknya, teks harus bungkus ke:

Foo is
not a
long word
Salin selepas log masuk

Penyelesaian

Untuk mencapai pembalut teks, dua pengubahsuaian utama diperlukan:

  1. Buat Fungsi Balut:

    Laksanakan fungsi bungkus untuk menambah elemen kepada nod dan mengawal lebar pembalut:

    <code class="javascript">function wrap(text, width) {
        text.each(function () {
            var text = d3.select(this),
                words = text.text().split(/\s+/).reverse(),
                word,
                line = [],
                lineNumber = 0,
                lineHeight = 1.1, // ems
                x = text.attr("x"),
                y = text.attr("y"),
                dy = 0, //parseFloat(text.attr("dy")),
                tspan = text.text(null)
                            .append("tspan")
                            .attr("x", x)
                            .attr("y", y)
                            .attr("dy", dy + "em");
            while (word = words.pop()) {
                line.push(word);
                tspan.text(line.join(" "));
                if (tspan.node().getComputedTextLength() > width) {
                    line.pop();
                    tspan.text(line.join(" "));
                    line = [word];
                    tspan = text.append("tspan")
                                .attr("x", x)
                                .attr("y", y)
                                .attr("dy", ++lineNumber * lineHeight + dy + "em")
                                .text(word);
                }
            }
        });
    }</code>
    Salin selepas log masuk
  2. Gunakan Fungsi Balutan:

    Daripada menetapkan teks pada setiap nod, gunakan fungsi bungkus:

    <code class="javascript">// Add entering nodes in the parent’s old position.
    node.enter().append("text")
        .attr("class", "node")
        .attr("x", function (d) { return d.parent.px; })
        .attr("y", function (d) { return d.parent.py; })
        .text("Foo is not a long word")
        .call(wrap, 30); // wrap the text in <= 30 pixels</code>
    Salin selepas log masuk

Dengan melaksanakan pengubahsuaian ini, anda boleh berjaya membalut teks pada nod pokok D3.

Atas ialah kandungan terperinci Bagaimanakah saya boleh membungkus label teks dalam visualisasi pokok D3 untuk kebolehbacaan yang lebih baik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!