D3横棒グラフは新しいデータセットに移行しません

sparta93

ユーザーの選択に基づいて更新/遷移するd3.js水平棒グラフ(http://bl.ocks.org/juan-cb/ab9a30d0e2ace0d2dc8c)に取り組んでいます。現在、グラフにラベルを追加しましたが、更新されていません。問題がどこにあるのかわからない。バーは左側から開始する必要がありますが、何らかの理由で右側に移動しています。バーにラベルを追加するために、四角形とテキストの両方を保持する「g」要素を追加しました。どんな助けでもありがたいです。

JsFiddle- https: //jsfiddle.net/fewpwqhd/1/

JS

datasetTotal = [{
    label: "Category 1",
    value: 19
}, {
    label: "Category 2",
    value: 5
}, {
    label: "Category 3",
    value: 13
}, {
    label: "Category 4",
    value: 17
}, {
    label: "Category 5",
    value: 21
}, {
    label: "Category 6",
    value: 25
}];

datasetOption1 = [{
    label: "Category 1",
    value: 22
}, {
    label: "Category 2",
    value: 33
}, {
    label: "Category 3",
    value: 4
}, {
    label: "Category 4",
    value: 15
}, {
    label: "Category 5",
    value: 36
}, {
    label: "Category 6",
    value: 0
}];

datasetOption2 = [{
    label: "Category 1",
    value: 10
}, {
    label: "Category 2",
    value: 20
}, {
    label: "Category 3",
    value: 30
}, {
    label: "Category 4",
    value: 5
}, {
    label: "Category 5",
    value: 12
}, {
    label: "Category 6",
    value: 23
}];

d3.selectAll("input").on("change", selectDataset);

function selectDataset() {
    var value = this.value;
    if (value == "total") {
        change(datasetTotal);
    } else if (value == "option1") {
        change(datasetOption1);
    } else if (value == "option2") {
        change(datasetOption2);
    }
}

var margin = {
        top: (parseInt(d3.select('body').style('height'), 10) / 20),
        right: (parseInt(d3.select('body').style('width'), 10) / 20),
        bottom: (parseInt(d3.select('body').style('height'), 10) / 20),
        left: (parseInt(d3.select('body').style('width'), 10) / 5)
    },
    width = parseInt(d3.select('body').style('width'), 10) - margin.left - margin.right,
    height = parseInt(d3.select('body').style('height'), 10) - margin.top - margin.bottom;

var div = d3.select("body").append("div").attr("class", "toolTip");

var formatPercent = d3.format("");

var y = d3.scale.ordinal()
    .rangeRoundBands([height, 0], .2, 0.5);

var x = d3.scale.linear()
    .range([0, width]);

var xAxis = d3.svg.axis()
    .scale(x)
    .tickSize(-height)
    .orient("bottom");

var yAxis = d3.svg.axis()
    .scale(y)
    .orient("left");
//.tickFormat(formatPercent);

var svg = d3.select("body").append("svg")
    .attr("width", width + margin.left + margin.right)
    .attr("height", height + margin.top + margin.bottom)
    .append("g")
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

svg.append("g")
    .attr("class", "x axis")
    .attr("transform", "translate(0," + height + ")")
    .call(xAxis);

d3.select("input[value=\"total\"]").property("checked", true);
change(datasetTotal);

function change(dataset) {

    y.domain(dataset.map(function(d) {
        return d.label;
    }));
    x.domain([0, d3.max(dataset, function(d) {
        return d.value;
    })]);

    svg.append("g")
        .attr("class", "x axis")
        .attr("transform", "translate(0," + height + ")")
        .call(xAxis);

    svg.select(".y.axis").remove();
    svg.select(".x.axis").remove();

    svg.append("g")
        .attr("class", "y axis")
        .call(yAxis)
        .append("text")
        .attr("transform", "rotate(0)")
        .attr("x", 50)
        .attr("dx", ".1em")
        .style("text-anchor", "end")
        .text("Option %");


    var bar = svg.selectAll(".bar")
        .data(dataset, function(d) {
            return d.label;
        })
        // new data:
        .enter().append("g");

    bar.append("rect")
        .attr("class", "bar")
        .attr("x", function(d) {
            return x(d.value);
        })
        .attr("y", function(d) {
            return y(d.label);
        })
        .attr("width", function(d) {
            return width - x(d.value);
        })
        .attr("height", y.rangeBand());

    bar.append("text")
        .attr("x", function(d) {
            return x(d.value) - 3;
        })
        .attr("text-anchor", "end")
        .attr("y", function(d) {
            return y(d.label) + y.rangeBand() / 2;
        })
        .attr("dy", ".35em")
        .text(function(d) {
            return d.value;
        });


    var bars = d3.select("svg").selectAll("g.rects").data(dataset);

    // removed data:
    bars.exit().remove();

    // updated data:
    bars.transition()
        .duration(750)
        .attr("x", function(d) {
            return 0;
        })
        .attr("y", function(d) {
            return y(d.label);
        })
        .attr("width", function(d) {
            return x(d.value);
        })
        .attr("height", y.rangeBand());

};
ジェラルド・フルタド

これが私の提案です:長方形とテキスト要素の両方を<g>(グループ)に追加しているので、enter-update-exitパターンは長方形とテキストではなくグループに適用する必要があります:

var bar = svg.selectAll(".bar")
    .data(dataset, function(d) {
        return d.label;
    });

var barExit = bar.exit().remove();

var barEnter = bar.enter()
    .append("g")
    .attr("class", "bar");

実際、データセットには常に6つのカテゴリがあるため、これらすべてが必要になることはありません(コードは大幅に短くなる可能性があります)。

更新されたフィドルは次のとおりです:https//jsfiddle.net/2523onr3/

PS私は自由にバーを右からではなく、左から右に成長させました。それが正しくない場合は、xwidth属性を変更するだけです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

D3: `bubble.nodes`が正しいグラフィックデータをデータセットに適用していません

分類Dev

d3はjsonを更新しましたが、新しいデータにアクセスしません

分類Dev

D3 v4グラフはバーを更新しませんが、新しい軸データを追加します

分類Dev

可変長の新しいデータでd3棒グラフラベルを更新する

分類Dev

データは変更されますが、リロードしても新しいデータはフェッチされません、D3

分類Dev

d3.js:新しいデータセットでグラフを更新します

分類Dev

棒グラフのng2グラフのデータセットが正しく設定されていません

分類Dev

d3棒グラフのラベルが新しいデータでグラフを更新しても更新されない

分類Dev

D3積み上げ棒グラフのデータを更新しています

分類Dev

d3.jsは、データセットを異なるキーを持つ新しいデータセットにマッピングします

分類Dev

ggbarplotを使用して棒グラフに個々のデータポイントを追加するにはどうすればよいですか?(ジッターの追加は機能せず、ドットプロットも機能しません)

分類Dev

charts.jsライブラリを介してデータセットの棒グラフをプロットできません

分類Dev

剣道縦棒グラフの棒グラフは、データが比較的小さいかどうかを示しません-剣道角度グラフ

分類Dev

mysqlデータベースを使用したd3の棒グラフ

分類Dev

JavaScript D3円グラフは、辞書のリストを含むJSONファイルからデータをプルしません

分類Dev

D3を使用してSVG内に棒グラフを作成した後、SVG全体に適合していません

分類Dev

Matplotlibは新しいデータでグラフを更新しますが、グラフは表示されません

分類Dev

横棒グラフの目盛りの中央に目盛りラベルをオフセットします

分類Dev

ローカルストレージデータを使用して棒グラフを作成します(棒の描画は機能しません)

分類Dev

x軸のカスタムD3`tickValue`-横棒グラフ

分類Dev

プロット的にグループ化された棒グラフは負の値を表示しません

分類Dev

型にはまらないデータセットを含むExcelの積み上げ縦棒グラフ

分類Dev

中央または上のD3.js棒グラフにデータ値を追加します

分類Dev

Googleの棒グラフの棒と軸がデータと相関していません

分類Dev

d3.js 1つのデータセットでは機能するが、他のデータセットでは機能しない積み上げ棒グラフ

分類Dev

横棒グラフのテキスト-d3

分類Dev

d3散布図を更新すると、新しいデータポイントが正しい位置にありません

分類Dev

D3横棒グラフの正確なコピー

分類Dev

ネストデータをd3.stackに渡すときに、d3がエラー「eは関数ではありません」を返します

Related 関連記事

  1. 1

    D3: `bubble.nodes`が正しいグラフィックデータをデータセットに適用していません

  2. 2

    d3はjsonを更新しましたが、新しいデータにアクセスしません

  3. 3

    D3 v4グラフはバーを更新しませんが、新しい軸データを追加します

  4. 4

    可変長の新しいデータでd3棒グラフラベルを更新する

  5. 5

    データは変更されますが、リロードしても新しいデータはフェッチされません、D3

  6. 6

    d3.js:新しいデータセットでグラフを更新します

  7. 7

    棒グラフのng2グラフのデータセットが正しく設定されていません

  8. 8

    d3棒グラフのラベルが新しいデータでグラフを更新しても更新されない

  9. 9

    D3積み上げ棒グラフのデータを更新しています

  10. 10

    d3.jsは、データセットを異なるキーを持つ新しいデータセットにマッピングします

  11. 11

    ggbarplotを使用して棒グラフに個々のデータポイントを追加するにはどうすればよいですか?(ジッターの追加は機能せず、ドットプロットも機能しません)

  12. 12

    charts.jsライブラリを介してデータセットの棒グラフをプロットできません

  13. 13

    剣道縦棒グラフの棒グラフは、データが比較的小さいかどうかを示しません-剣道角度グラフ

  14. 14

    mysqlデータベースを使用したd3の棒グラフ

  15. 15

    JavaScript D3円グラフは、辞書のリストを含むJSONファイルからデータをプルしません

  16. 16

    D3を使用してSVG内に棒グラフを作成した後、SVG全体に適合していません

  17. 17

    Matplotlibは新しいデータでグラフを更新しますが、グラフは表示されません

  18. 18

    横棒グラフの目盛りの中央に目盛りラベルをオフセットします

  19. 19

    ローカルストレージデータを使用して棒グラフを作成します(棒の描画は機能しません)

  20. 20

    x軸のカスタムD3`tickValue`-横棒グラフ

  21. 21

    プロット的にグループ化された棒グラフは負の値を表示しません

  22. 22

    型にはまらないデータセットを含むExcelの積み上げ縦棒グラフ

  23. 23

    中央または上のD3.js棒グラフにデータ値を追加します

  24. 24

    Googleの棒グラフの棒と軸がデータと相関していません

  25. 25

    d3.js 1つのデータセットでは機能するが、他のデータセットでは機能しない積み上げ棒グラフ

  26. 26

    横棒グラフのテキスト-d3

  27. 27

    d3散布図を更新すると、新しいデータポイントが正しい位置にありません

  28. 28

    D3横棒グラフの正確なコピー

  29. 29

    ネストデータをd3.stackに渡すときに、d3がエラー「eは関数ではありません」を返します

ホットタグ

アーカイブ