Saya memiliki satu set data yang saya plot di sebar. Ketika saya mengarahkan mouse ke salah satu lingkaran saya ingin popup dengan data (seperti nilai x, y, mungkin lebih). Inilah yang saya coba gunakan:
vis.selectAll("circle")
.data(datafiltered).enter().append("svg:circle")
.attr("cx", function(d) { return x(d.x);})
.attr("cy", function(d) {return y(d.y)})
.attr("fill", "red").attr("r", 15)
.on("mouseover", function() {
d3.select(this).enter().append("text")
.text(function(d) {return d.x;})
.attr("x", function(d) {return x(d.x);})
.attr("y", function (d) {return y(d.y);}); });
Saya kira saya harus lebih informatif tentang data apa yang akan dimasukkan?
Jawaban:
Saya berasumsi bahwa yang Anda inginkan adalah tooltip. Cara termudah untuk melakukan ini adalah menambahkan
svg:title
elemen ke setiap lingkaran, karena browser akan mengurus menunjukkan tooltip dan Anda tidak perlu penangan mouse. Kode tersebut akan menjadi sesuatu sepertiJika Anda ingin tooltips yang lebih keren, Anda bisa menggunakan tipsy misalnya. Lihat di sini untuk contoh.
sumber
svg:g
yang Anda overlay dengan lingkaran yang sebenarnya, tetapi berikan nol lebar dan tinggi. Saat ini sedang mengambil kotak pembatas dan meletakkan tooltip di tepinya. Bermain-main dengan opsi tipy mungkin bisa membantu juga.Cara yang sangat baik untuk membuat tooltip dijelaskan di sini: Contoh tooltip D3 sederhana
Anda harus menambahkan div
Maka Anda bisa beralih menggunakan
d3.event.pageX
/d3.event.pageY
adalah koordinat mouse saat ini.Jika Anda ingin mengubah teks yang dapat Anda gunakan
tooltip.text("my tooltip text");
Contoh Kerja
sumber
Ada perpustakaan yang luar biasa untuk melakukan itu yang baru-baru ini saya temukan. Sangat mudah digunakan dan hasilnya cukup rapi: d3-tip.
Anda dapat melihat contoh di sini :
Pada dasarnya, yang harus Anda lakukan adalah mengunduh ( index.js ), termasuk skrip:
dan kemudian ikuti instruksi dari sini (tautan yang sama seperti contoh)
Tetapi untuk kode Anda, itu akan menjadi seperti:
tentukan metode:
buat svg Anda (seperti yang sudah Anda lakukan)
panggil metode:
tambahkan tip ke objek Anda:
Jangan lupa untuk menambahkan CSS:
sumber
Anda dapat mengirimkan data yang akan digunakan di mouseover seperti ini- acara mouseover menggunakan fungsi dengan
enter
data yang sebelumnya Anda ed sebagai argumen (dan indeks sebagai argumen kedua) sehingga Anda tidak perlu menggunakanenter()
kedua kalinya.sumber
d3.select(this)
untuk memodifikasi bentuk dan tidak tahu bagaimana mendapatkan instance dalam enter / pembaruan.Contoh ringkas ini menunjukkan cara umum cara membuat tooltip kustom di d3.
sumber
return tooltip.style("top", (d.x + 40) + "px") .style("left", (d.y + 80) + "px");
dalam'mousemove'
atribut. Inid.x
akan membantu memindahkan ujung alat relatif ke objek, bukan seluruh halaman