d3 js v4 막대 차트를 아래쪽 (x 축)에서 위쪽으로 애니메이션하는 방법은 무엇입니까?

bencampbell_14

현재,이 d3 js 막대 차트는 위에서 아래로 애니메이션됩니다. d3js가 맨 위에서 시작하는 차트를 렌더링하는 방식 때문일 가능성이 큽니다. 이것은 일반적인 문제 일 수 있으며 d3js의 성가신 문제에 익숙한 사람들에게는 쉬울 수 있습니다. 어떻게이 애니메이션을 아래에서 위로 만들 수 있습니까?

<!DOCTYPE html>
<meta charset="utf-8">
<style>

.bar {
  fill: steelblue;
}

.bar:hover {
  fill: brown;
}

.axis--x path {
  display: none;
}

</style>
<svg width="1260" height="500"></svg>
<script src="https://d3js.org/d3.v4.min.js"></script>
<script>

var svg = d3.select("svg"),
    margin = {top: 20, right: 20, bottom: 30, left: 40},
    width = +svg.attr("width") - margin.left - margin.right,
    height = +svg.attr("height") - margin.top - margin.bottom;

var x = d3.scaleBand().rangeRound([0, width]).padding(0.4),
    y = d3.scaleLinear().rangeRound([height, 0]); 

var g = svg.append("g")
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

d3.csv("MRT_MonthlyAve_2014.csv", function(d) {

  d.MonthlyAverage = +d.MonthlyAverage;
  return d;
}, function(error, data) {
  if (error) throw error;

  x.domain(data.map(function(d) { return d.Station; }));
  y.domain([0, d3.max(data, function(d) { return d.MonthlyAverage; })]);

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

  g.append("g")
    .attr("class", "axis axis--y")    
    .call(d3.axisLeft(y).ticks(12, "s"))
    .append("text")
    .attr("transform", "rotate(-90)")
    .attr("y", 6)
    .attr("dy", "0.71em")
    .attr("text-anchor", "end")
    .text("Frequency");

  g.selectAll(".bar")
    .data(data)
    .enter().append("rect")
    .attr("class", "bar") 
    .attr("x", function(d) { return x(d.Station); })
    .attr("y", function(d) { return y(d.MonthlyAverage); }) 
    .transition().duration(1000)
    .ease(d3.easeExp)
    .attr("width", x.bandwidth())   
    .attr("height", function(d) { return height - y(d.MonthlyAverage); });
});


</script>

MRT_MonthlyAve_2014.csv

Station,MonthlyAverage
North Avenue,2227081
Quezon Avenue,1018121
GMA,606110
Cubao,1410788
Santolan,260737
Ortigas,561910
Shaw Boulevard,1339020
Boni,631115
Guadalupe,1002740
Buendia,421302
Ayala,1145004
Magallanes,933713
Taft Avenue,2427220
Gerardo Furtado

초기 y위치를 height다음과 같이 설정하십시오 .

.attr("y", height)

변경된 코드 만 다음과 같습니다 (SVG의 높이를 줄이므로 작은 스 니펫보기에서 작동하는 것을 볼 수 있습니다).

var csv = `Station,MonthlyAverage
North Avenue,2227081
Quezon Avenue,1018121
GMA,606110
Cubao,1410788
Santolan,260737
Ortigas,561910
Shaw Boulevard,1339020
Boni,631115
Guadalupe,1002740
Buendia,421302
Ayala,1145004
Magallanes,933713
Taft Avenue,2427220`;

var svg = d3.select("svg"),
  margin = {
    top: 20,
    right: 20,
    bottom: 30,
    left: 40
  },
  width = +svg.attr("width") - margin.left - margin.right,
  height = +svg.attr("height") - margin.top - margin.bottom;

var x = d3.scaleBand().rangeRound([0, width]).padding(0.4),
  y = d3.scaleLinear().rangeRound([height, 0]);

var g = svg.append("g")
  .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

var data = d3.csvParse(csv, function(d) {
  d.MonthlyAverage = +d.MonthlyAverage;
  return d;
})

x.domain(data.map(function(d) {
  return d.Station;
}));
y.domain([0, d3.max(data, function(d) {
  return d.MonthlyAverage;
})]);

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

g.append("g")
  .attr("class", "axis axis--y")
  .call(d3.axisLeft(y).ticks(12, "s"))
  .append("text")
  .attr("transform", "rotate(-90)")
  .attr("y", 6)
  .attr("dy", "0.71em")
  .attr("text-anchor", "end")
  .text("Frequency");

g.selectAll(".bar")
  .data(data)
  .enter().append("rect")
  .attr("class", "bar")
  .attr("x", function(d) {
    return x(d.Station);
  })
  .attr("y", height)
  .transition().duration(1000)
  .ease(d3.easeExp)
  .attr("y", function(d) {
    return y(d.MonthlyAverage);
  })
  .attr("width", x.bandwidth())
  .attr("height", function(d) {
    return height - y(d.MonthlyAverage);
  });
.bar {
  fill: steelblue;
}

.bar:hover {
  fill: brown;
}

.axis--x path {
  display: none;
}
<script src="https://d3js.org/d3.v4.min.js"></script>
<svg width="1260" height="200"></svg>

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

D3 V4에서 확대 / 축소 속도를 제어하는 방법은 무엇입니까?

d3 js 막대 차트에서 축 레이블과 값을 보는 방법은 무엇입니까?

D3.js 막대 차트에서 오른쪽에 y 축을 정렬하는 방법은 무엇입니까?

D3 막대 차트. JSON 데이터를 기반으로 사용자 지정 x 및 y 축을 설정하는 방법은 무엇입니까?

d3 v4 x 축과 막대를 정렬 할 수없는 이유는 무엇입니까?

d3 v4에서 클릭 가능한 전환 막대 그래프를 만드는 방법은 무엇입니까?

숫자가 아닌 X 축으로 막대 차트를 만드는 방법은 무엇입니까?

아랍어 차트를 만드는 방법은 무엇입니까? (오른쪽에서 왼쪽으로 x 축) Plotly 사용

d3에서 미러링 된 x 축 (반전) 막대 차트를 그리는 방법은 무엇입니까?

Numpy Python에서 4 차원 배열의 아래쪽 삼각형을 위쪽 삼각형으로 복사하는 방법은 무엇입니까?

d3.js v4 미니 맵 또는 두 요소에서 확대 / 축소를 공유하는 방법은 무엇입니까?

Alpha로 TextView를 왼쪽에서 오른쪽으로 애니메이션하는 방법은 무엇입니까?

c3js : x 축 범주 중 하나가 아닌 수직 막대 차트에 수직선을 추가하는 방법은 무엇입니까?

jQuery에서 절대 위치를 오른쪽에서 왼쪽으로, 그런 다음 왼쪽에서 오른쪽으로 애니메이션하는 방법은 무엇입니까?

Phaser js 게임에서 플레이어가 경계를 위아래가 아닌 왼쪽으로 제한하는 방법은 무엇입니까?

d3 v4에서 힘 차트를 그리는 방법은 무엇입니까?

Xamarin iOS에서 UITableViewCell 전환을 아래쪽에서 위쪽으로 애니메이션하는 방법은 무엇입니까?

3 js에서 2 개의 다른 애니메이션으로 2 개의 객체를 차례로 애니메이션하는 방법은 무엇입니까?

웹 페이지에있는 스크롤 막대를 아래로 이동하고 왼쪽으로 이동하는 방법은 무엇입니까?

Fabric JS : 삼각형의 상단과 왼쪽 위치를 동시에 애니메이션하는 방법은 무엇입니까? + 애니메이션 버그

D3js 가로 막대 차트 : 모든 막대 끝에 데이터의 숫자를 추가하는 방법은 무엇입니까?

dc.js / d3.js-막대 값이 0 인 경우 막대 차트 x 축 범주 값을 숨기는 방법은 무엇입니까?

UITableView를 아래쪽에서 위로 채우는 방법은 무엇입니까?

D3 가로 막대 차트가 div에 맞는지 확인하는 방법은 무엇입니까?

클릭 가능한 전환 막대 그래프를 만들어 d3 v4에서 3 개의 그래프를 표시하는 방법은 무엇입니까?

json 데이터를 사용하여 d3.js에서 세로로 그룹화 된 막대 차트를 만드는 방법은 무엇입니까?

아래쪽에서 위쪽으로, 아래쪽에서 위쪽으로 마우스를 가져갈 때 배경색에 애니메이션을 적용하는 방법

3 개 div를 서로 나란히 정렬하여 아래쪽 및 위쪽 div 사이에 있도록하는 방법은 무엇입니까?

d3 v5에서 작은 배수 막대 차트 세트를 수행하는 올바른 방법은 무엇입니까?

TOP 리스트

뜨겁다태그

보관