0
棒グラフを作成したいと思います。すべての棒は特定の単語の頻度を表します。d3.jsの単語を使用して軸にラベルを付ける方法
私のデータはオブジェクトの配列であり、それぞれのプロパティはword
とfreq
です。
私はそのように私の軸を宣言:
let echelleX = d3.scaleBand()
.domain(d3.extent(data, d => d.word))
.range([marges.left, width - marges.right])
.padding(0.1);
そしてそれを呼んだ:
svg.append("g")
.attr("class","axeX")
.attr("transform", `translate(0,${height})`)
.call(axeX)
.selectAll("text")
.attr("font-weight", "normal")
.style("text-anchor", "end")
.attr("dx", "-.8em")
.attr("dy", ".5em")
.attr("transform", "rotate(-65)");
私は、SVGに自分のバーを追加:
svg.append("g").selectAll(".barre").data(data).enter()
.append("rect")
.attr("class", "barre")
.attr("x", (d,i) => echelleX(d.word))
.attr("y", (d) => echelleY(d.freq))
.attr("width", 2.5)
.attr("height", d => height - echelleY(d.freq))
.attr("fill","steelblue");
しかし、結果はこれです:
私は
.attr("x", (d,i) => marges.left + i*3)
に次の行
.attr("x", (d,i) => echelleX(d.word))
を変更すると、私は優れている、これを得るが、軸のラベルがまだ一致していません。
私はd3.scaleBandのドキュメントをチェックし、いくつかの調整を試みたが、私はそれは私がしたいと思うように動作させるように見えることはできません。私は何が欠けていますか?すべてのバー(d.freq
)の軸の下に対応するラベル(d.word
)が表示されます。
あなたのソリューションは実際には機能しませんでした。バーのどれも表示されていませんでした。私はこれを使用しなければなりません: '.domain(d3.set(data.map(function(d){return d.word;}))values())' 事は、別の例のこのコードをコピーしました。私はオンラインで見つけましたが、なぜそれが動作するのか分かりません。理由を説明できますか? 'data.map'と' d3.set(data.map [...]) 'の違いは何ですか? –
私はおそらくいくつかの小さな事を忘れてしまったでしょうが、序数の尺度について言われたことは真実でした。もし適切なデータを使ってjsfiddleを作成すると、喜んでそれを行う方法を示します。唯一の違いは、 'set'は一意の値を返しますが、元のデータには重複が含まれてはならないことです。 –
@Eric Guanさんに遅れて申し訳ありません、私はちょうど私のコンピュータに戻ってきました。ここではjsfiddleです:https://jsfiddle.net/yjw5aojr/ –