그룹화 된 막대 차트에서 사각형 크기를 줄이는 방법 d3js v4

H4rris

이 차트를 재현하려고하는데 사각형의 크기를 조정할 수 없습니다.

내가 찾은 해결책은 차트 너비 크기를 변경하는 것이었지만 동일한 너비를 유지하고 차트의 사각형 크기 만 변경하고 싶습니다.

그런 다음 각 직사각형 너비를 빼서 너비를 줄이려고 시도했지만 .attr("width", x1.bandwidth() - 50)이제 직사각형 사이의 공간이 더 커졌습니다.

var data = [{
  "State": "CA",
  "AA": 100,
  "BB": 200,
  "CC": 300
}, {
  "State": "TX",
  "AA": 454,
  "BB": 344,
  "CC": 250
}];

w = 900;
h = 500;

var svg = d3.select("#chart").append("svg"),
  margin = {
    top: 20,
    right: 20,
    bottom: 30,
    left: 40
  },
  width = w - margin.left - margin.right,
  height = h - margin.top - margin.bottom,
  g = svg
  .attr("width", w)
  .attr("height", h)
  .append("g")
  .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

// The scale spacing the groups:
var x0 = d3.scaleBand()
  .rangeRound([0, width])
  .paddingInner(0.1);

// The scale for spacing each group's bar:
var x1 = d3.scaleBand()
  .padding(0.05);

var y = d3.scaleLinear()
  .rangeRound([height, 0]);

var z = d3.scaleOrdinal()
  .range(["#98abc5", "#8a89a6", "#7b6888", "#6b486b", "#a05d56", "#d0743c", "#ff8c00"]);


var keys = d3.keys(data[0]).slice(1);


x0.domain(data.map(function(d) {
  return d.State;
}));
x1.domain(keys).rangeRound([0, x0.bandwidth()]);
y.domain([0, d3.max(data, function(d) {
  return d3.max(keys, function(key) {
    return d[key];
  });
})]).nice();

g.append("g")
  .selectAll("g")
  .data(data)
  .enter().append("g")
  .attr("class", "bar")
  .attr("transform", function(d) {
    return "translate(" + x0(d.State) + ",0)";
  })
  .selectAll("rect")
  .data(function(d) {
    return keys.map(function(key) {
      return {
        key: key,
        value: d[key]
      };
    });
  })
  .enter().append("rect")
  .attr("x", function(d) {
    return x1(d.key);
  })
  .attr("y", function(d) {
    return y(d.value);
  })
  .attr("width", x1.bandwidth())
  .attr("height", function(d) {
    return height - y(d.value);
  })
  .attr("fill", function(d) {
    return z(d.key);
  });

g.append("g")
  .attr("class", "axis")
  .attr("transform", "translate(0," + height + ")")
  .call(d3.axisBottom(x0));

g.append("g")
  .attr("class", "axis")
  .call(d3.axisLeft(y).ticks(null, "s"))
  .append("text")
  .attr("x", 2)
  .attr("y", y(y.ticks().pop()) + 0.5)
  .attr("dy", "0.32em")
  .attr("fill", "#000")
  .attr("font-weight", "bold")
  .attr("text-anchor", "start")
  .text("Population");

var legend = g.append("g")
  .attr("font-family", "sans-serif")
  .attr("font-size", 10)
  .attr("text-anchor", "end")
  .selectAll("g")
  .data(keys.slice().reverse())
  .enter().append("g")
  .attr("transform", function(d, i) {
    return "translate(0," + i * 20 + ")";
  });

legend.append("rect")
  .attr("x", width - 17)
  .attr("width", 15)
  .attr("height", 15)
  .attr("fill", z)
  .attr("stroke", z)
  .attr("stroke-width", 2)
  .on("click", function(d) {
    update(d)
  });

legend.append("text")
  .attr("x", width - 24)
  .attr("y", 9.5)
  .attr("dy", "0.32em")
  .text(function(d) {
    return d;
  });

var filtered = [];

////
//// Update and transition on click:
////

function update(d) {

  //
  // Update the array to filter the chart by:
  //

  // add the clicked key if not included:
  if (filtered.indexOf(d) == -1) {
    filtered.push(d);
    // if all bars are un-checked, reset:
    if (filtered.length == keys.length) filtered = [];
  }
  // otherwise remove it:
  else {
    filtered.splice(filtered.indexOf(d), 1);
  }

  //
  // Update the scales for each group(/states)'s items:
  //
  var newKeys = [];
  keys.forEach(function(d) {
    if (filtered.indexOf(d) == -1) {
      newKeys.push(d);
    }
  })
  x1.domain(newKeys).rangeRound([0, x0.bandwidth()]);
  y.domain([0, d3.max(data, function(d) {
    return d3.max(keys, function(key) {
      if (filtered.indexOf(key) == -1) return d[key];
    });
  })]).nice();

  //
  // Filter out the bands that need to be hidden:
  //
  var bars = svg.selectAll(".bar").selectAll("rect")
    .data(function(d) {
      return keys.map(function(key) {
        return {
          key: key,
          value: d[key]
        };
      });
    })

  bars.filter(function(d) {
      return filtered.indexOf(d.key) > -1;
    })
    .transition()
    .attr("x", function(d) {
      return (+d3.select(this).attr("x")) + (+d3.select(this).attr("width")) / 2;
    })
    .attr("height", 0)
    .attr("width", 0)
    .attr("y", function(d) {
      return height;
    })
    .duration(500);

  //
  // Adjust the remaining bars:
  //
  bars.filter(function(d) {
      return filtered.indexOf(d.key) == -1;
    })
    .transition()
    .attr("x", function(d) {
      return x1(d.key);
    })
    .attr("y", function(d) {
      return y(d.value);
    })
    .attr("height", function(d) {
      return height - y(d.value);
    })
    .attr("width", x1.bandwidth())
    .attr("fill", function(d) {
      return z(d.key);
    })
    .duration(500);


  // update legend:
  legend.selectAll("rect")
    .transition()
    .attr("fill", function(d) {
      if (filtered.length) {
        if (filtered.indexOf(d) == -1) {
          return z(d);
        } else {
          return "white";
        }
      } else {
        return z(d);
      }
    })
    .duration(100);

}
* {
  margin: 0;
  padding: 0;
  border: 0;
}

body {
  background: #ffd;
}

.axis .domain {
  display: none;
}
<script src="https://d3js.org/d3.v4.min.js">
</script>
<div id="chart"></div>

어떤 아이디어?

스모키 쉐이커

나는 완전히 따르지 않습니다. 막대 사이의 간격을 늘리지 않고 막대의 너비를 줄이려면 어떻게해야합니까?

가죽의 막대를 만들 수있는 간단한 방법은 변경할 수 있습니다 padding또는 paddingInner더 큰 비율에를 :

var x1 = d3.scaleBand()
  .padding(0.2);

인용 한 차트는 그룹 간의 공간을 구성합니다. 따라서 대신 x0패딩을 변경하십시오 .

var x0 = d3.scaleBand()
  .rangeRound([0, width])
  .paddingInner(0.3);

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

D3.js- 그룹화 된 막대 차트를 확대하는 동안 사각형 외부 영역을 자르는 방법

분류에서Dev

d3js v4의 그룹화 된 막대 차트에 텍스트 추가

분류에서Dev

D3.js : 그룹화 된 막대 차트에서 JSON 데이터를 읽는 방법

분류에서Dev

D3.js를 사용하는 "한 줄로"그룹화 된 막대 차트

분류에서Dev

D3 : 그룹화 된 막대 차트의 각 막대 상단에 레이블을 추가하는 방법

분류에서Dev

Pandas를 사용하여 데이터 프레임에서 (그룹화 된) 막대 차트를 그리는 방법

분류에서Dev

ggplot2를 사용하여 그룹화 된 막대 차트에 대한 오차 막대를 그리는 방법은 무엇입니까?

분류에서Dev

높은 차트 : 그룹화 된 세로 막 대형 차트에서 두 막대 사이의 거리를 줄일 수 있습니까?

분류에서Dev

그룹화 된 막대 차트에서 각 막대에 레이블을 지정하는 방법은 무엇입니까?

분류에서Dev

막대 차트에 막대를 그룹화하는 방법이 있습니까?

분류에서Dev

그룹화 된 막대 그림에 오차 막대를 추가하는 방법은 무엇입니까?

분류에서Dev

d3.js : 부모 노드의 데이터를 사용하는 방법? (개별 막대 툴팁에 그룹화 된 막대 이름을 표시하기 위해)

분류에서Dev

JavaFX에 그룹화 된 누적 막대 차트를 만드는 방법이 있습니까?

분류에서Dev

JSON 데이터를 그룹화하고 D3js에서 각 그룹의 그래프를 생성하는 방법

분류에서Dev

파이썬에서 그룹화 된 막대 차트의 서브 플롯 그림을 만드는 방법

분류에서Dev

Plotly Express를 사용하여 그룹화 된 막대 차트에 레이블을 지정하는 방법은 무엇입니까?

분류에서Dev

d3에서 그룹화 된 막대 차트 데이터 오른쪽에 두 번째 y 축을 표시하는 방법

분류에서Dev

D3.js 그룹화 된 막대 차트 범례 누락 된 데이터

분류에서Dev

seaborn-색조로 그룹화 된 막대 그래프에 평균 막대를 추가하는 방법

분류에서Dev

그룹화 된 막대 차트에서 D3 브러싱

분류에서Dev

ggplot2를 사용하는 R의 그룹화 된 막대 차트

분류에서Dev

의 Andorid에 스크롤 그룹화 된 막대 그래프를 수평 만드는 방법

분류에서Dev

Chart.js를 사용하여 막대 차트에 레이블 사각형을 추가하는 방법

분류에서Dev

D3 v4 업데이트 막대 그래프가 마지막 막대를 표시하지 않음

분류에서Dev

이 데이터의 그룹화 된 막대 차트 만들기

분류에서Dev

그룹화 된 누적 막대 그림 사이의 공백을 줄이는 방법

분류에서Dev

Excel의 표에서 "그룹화 된"막대 차트 만들기

분류에서Dev

Excel의 표에서 "그룹화 된"막대 차트 만들기

분류에서Dev

D3js 세로 막 대형 차트에서 열 사이의 큰 간격

Related 관련 기사

  1. 1

    D3.js- 그룹화 된 막대 차트를 확대하는 동안 사각형 외부 영역을 자르는 방법

  2. 2

    d3js v4의 그룹화 된 막대 차트에 텍스트 추가

  3. 3

    D3.js : 그룹화 된 막대 차트에서 JSON 데이터를 읽는 방법

  4. 4

    D3.js를 사용하는 "한 줄로"그룹화 된 막대 차트

  5. 5

    D3 : 그룹화 된 막대 차트의 각 막대 상단에 레이블을 추가하는 방법

  6. 6

    Pandas를 사용하여 데이터 프레임에서 (그룹화 된) 막대 차트를 그리는 방법

  7. 7

    ggplot2를 사용하여 그룹화 된 막대 차트에 대한 오차 막대를 그리는 방법은 무엇입니까?

  8. 8

    높은 차트 : 그룹화 된 세로 막 대형 차트에서 두 막대 사이의 거리를 줄일 수 있습니까?

  9. 9

    그룹화 된 막대 차트에서 각 막대에 레이블을 지정하는 방법은 무엇입니까?

  10. 10

    막대 차트에 막대를 그룹화하는 방법이 있습니까?

  11. 11

    그룹화 된 막대 그림에 오차 막대를 추가하는 방법은 무엇입니까?

  12. 12

    d3.js : 부모 노드의 데이터를 사용하는 방법? (개별 막대 툴팁에 그룹화 된 막대 이름을 표시하기 위해)

  13. 13

    JavaFX에 그룹화 된 누적 막대 차트를 만드는 방법이 있습니까?

  14. 14

    JSON 데이터를 그룹화하고 D3js에서 각 그룹의 그래프를 생성하는 방법

  15. 15

    파이썬에서 그룹화 된 막대 차트의 서브 플롯 그림을 만드는 방법

  16. 16

    Plotly Express를 사용하여 그룹화 된 막대 차트에 레이블을 지정하는 방법은 무엇입니까?

  17. 17

    d3에서 그룹화 된 막대 차트 데이터 오른쪽에 두 번째 y 축을 표시하는 방법

  18. 18

    D3.js 그룹화 된 막대 차트 범례 누락 된 데이터

  19. 19

    seaborn-색조로 그룹화 된 막대 그래프에 평균 막대를 추가하는 방법

  20. 20

    그룹화 된 막대 차트에서 D3 브러싱

  21. 21

    ggplot2를 사용하는 R의 그룹화 된 막대 차트

  22. 22

    의 Andorid에 스크롤 그룹화 된 막대 그래프를 수평 만드는 방법

  23. 23

    Chart.js를 사용하여 막대 차트에 레이블 사각형을 추가하는 방법

  24. 24

    D3 v4 업데이트 막대 그래프가 마지막 막대를 표시하지 않음

  25. 25

    이 데이터의 그룹화 된 막대 차트 만들기

  26. 26

    그룹화 된 누적 막대 그림 사이의 공백을 줄이는 방법

  27. 27

    Excel의 표에서 "그룹화 된"막대 차트 만들기

  28. 28

    Excel의 표에서 "그룹화 된"막대 차트 만들기

  29. 29

    D3js 세로 막 대형 차트에서 열 사이의 큰 간격

뜨겁다태그

보관