축이 중앙에 정렬 될 때 그리드 선을 만드는 방법은 무엇입니까?

그린 다리우스

그리드 라인이있는 4 사분면 차트를 만드는 중입니다. 그러나 그리드가 제대로 작동하지 않는 것 같습니다. 축을 변환 할 때 양쪽으로 가지 않습니다. 여기도 바이올린을 제공했습니다 .

const f = (x) => {
  return Math.sin(x)
}

const data = d3.ticks(-5, 5, 100).map((x) => {
  const container = {
    x: x,
    y: f(x)
  }
  return container
})

const margins = { top: 20, right: 20, bottom: 30, left: 30 }
const width = 750 - margins.left - margins.right
const height = 750 - margins.top - margins.bottom

const svg = d3.select('#graph')
  .append('svg')
  .attr('width', width + margins.left + margins.right)
  .attr('height', height + margins.top + margins.bottom)
  .append('g')
  .attr('transform', `translate(${margins.left}, ${margins.top})`)

const x = d3.scaleLinear([-5, 5], [0, width])
const y = d3.scaleLinear([-5, 5], [height, 0])

const xAxis = svg.append('g')
  .attr('transform', `translate(0, ${y(0)})`)
  .attr('class', 'x-axis')

const yAxis = svg.append('g')
  .attr('transform', `translate(${x(0)}, 0)`)
  .attr('class', 'y-axis')

xAxis.call(d3.axisBottom(x))
yAxis.call(d3.axisLeft(y))

d3.selectAll('g.x-axis g.tick')
  .append('line')
  .attr('class', 'gridline')
  .attr('x1', 0)
  .attr('y1', -height)
  .attr('x2', 0)
  .attr('y2', 0)

d3.selectAll('g.y-axis g.tick')
  .append('line')
  .attr('class', 'gridline')
  .attr('x1', 0)
  .attr('y1', 0)
  .attr('x2', width)
  .attr('y2', 0)

svg.append('path')
  .datum(data)
  .attr('fill', 'none')
  .attr('stroke', 'steelblue')
  .attr('stroke-width', 1.5)
  .attr('d', d3.line(d => x(d.x), d => y(d.y)))
#graph {
  text-align: center;
}

.gridline{
  stroke: black;
  shape-rendering: crispEdges;
  stroke-opacity: 0.5;
}
<div id="graph"></div>
<script src="https://d3js.org/d3.v6.min.js"></script>

이 방법사용 하여 격자 선을 만듭니다.

그리드가 내가 번역하는쪽으로 확장되기를 원합니다. 감사합니다.

Gerardo Furtado

나는 당신이 연결 한 답변의 저자입니다. 그 접근 방식의 문제는 제가 대답에서 명확히 밝히지 않았지만 모든 선이 축의 동일한 위치에 생성된다는 것입니다. 따라서 번역해야합니다.

의 경우 x축 :

.attr("transform", `translate(0, ${y.range()[0] - y(0)})`)

그리고 y축의 경우 :

.attr("transform", `translate(${x.range()[0] - x(0)})`, 0)

변경된 코드는 다음과 같습니다.

const f = (x) => {
  return Math.sin(x)
}

const data = d3.ticks(-5, 5, 100).map((x) => {
  const container = {
    x: x,
    y: f(x)
  }
  return container
})

const margins = {
  top: 20,
  right: 20,
  bottom: 30,
  left: 30
}
const width = 750 - margins.left - margins.right
const height = 750 - margins.top - margins.bottom

const svg = d3.select('#graph')
  .append('svg')
  .attr('width', width + margins.left + margins.right)
  .attr('height', height + margins.top + margins.bottom)
  .append('g')
  .attr('transform', `translate(${margins.left}, ${margins.top})`)

const x = d3.scaleLinear([-5, 5], [0, width])
const y = d3.scaleLinear([-5, 5], [height, 0])

const xAxis = svg.append('g')
  .attr('transform', `translate(0, ${y(0)})`)
  .attr('class', 'x-axis')

const yAxis = svg.append('g')
  .attr('transform', `translate(${x(0)}, 0)`)
  .attr('class', 'y-axis')

xAxis.call(d3.axisBottom(x))
yAxis.call(d3.axisLeft(y))

d3.selectAll('g.x-axis g.tick')
  .append('line')
  .attr('class', 'gridline')
  .attr('x1', 0)
  .attr('y1', -height)
  .attr('x2', 0)
  .attr('y2', 0)
  .attr("transform", `translate(0, ${y.range()[0] - y(0)})`)

d3.selectAll('g.y-axis g.tick')
  .append('line')
  .attr('class', 'gridline')
  .attr('x1', 0)
  .attr('y1', 0)
  .attr('x2', width)
  .attr('y2', 0)
  .attr("transform", `translate(${x.range()[0] - x(0)})`, 0)

svg.append('path')
  .datum(data)
  .attr('fill', 'none')
  .attr('stroke', 'steelblue')
  .attr('stroke-width', 1.5)
  .attr('d', d3.line(d => x(d.x), d => y(d.y)))
#graph {
  text-align: center;
}

.gridline {
  stroke: black;
  shape-rendering: crispEdges;
  stroke-opacity: 0.5;
}
<div id="graph"></div>
<script src="https://d3js.org/d3.v6.min.js"></script>

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

프로그램이 tkinter에서 실행될 때 새 레이블을 만드는 방법은 무엇입니까?

분류에서Dev

플렉스 컨테이너에서 div 그리드를 중앙 정렬하는 방법은 무엇입니까?

분류에서Dev

Android에서 페이지가로드 될 때 값을 설정하는 방법은 무엇입니까?

분류에서Dev

활동이 Android에서 다시로드 될 때 ArrayIndexOutOfBoundsException을 수정하는 방법은 무엇입니까?

분류에서Dev

다른 차원이 필터로 선택 될 때 변경되는 동적 tableau x 축을 만드는 방법은 무엇입니까?

분류에서Dev

JSON이로드 될 때까지 각도 실행을 중단하는 방법은 무엇입니까?

분류에서Dev

Bootstrap 3 그리드를 사용할 때 아이콘을 세로로 중앙에 배치하는 방법은 무엇입니까?

분류에서Dev

검도 그리드 열이 자동 생성 될 때 열 템플릿을 사용자 지정하는 방법은 무엇입니까?

분류에서Dev

0이 될 때까지 아래 코드에서 시간을 줄이는 방법은 무엇입니까?

분류에서Dev

asp.net webform이로드 될 때 JavaScript 함수 실행을 중지하는 방법은 무엇입니까?

분류에서Dev

MVC 웹 응용 프로그램에서 버튼이 호출 될 때 .cshtml을 만드는 방법은 무엇입니까?

분류에서Dev

WPF에서 검색 창 (TextBox)을 사용할 때 StackPanel 재정렬을 만드는 방법은 무엇입니까?

분류에서Dev

LXDE / Openbox에서 바탕 화면 아이콘을 그리드에 정렬하는 방법은 무엇입니까?

분류에서Dev

CSS 그리드 레이아웃에서 세 열을 정렬하는 방법은 무엇입니까?

분류에서Dev

변수가 변경 될 때 동적 테이블을 만드는 방법은 무엇입니까?

분류에서Dev

SwiftUI : 바인딩 값이 변경 될 때 네트워크 요청을 만드는 방법은 무엇입니까?

분류에서Dev

플렉스 랩이 트리거 될 때 오른쪽으로 정렬하는 방법은 무엇입니까?

분류에서Dev

Bootstrap 그리드 열에서 정렬 버튼 (또는 div)을 중앙에 배치하는 방법은 무엇입니까?

분류에서Dev

전체 그리드에 영향을주지 않고 다른 행에 중첩 될 때 col-md- * 패딩을 제거하는 방법은 무엇입니까?

분류에서Dev

.mk 파일이 수정 될 때 NDK 컴파일을보다 "지능형"으로 만드는 방법은 무엇입니까?

분류에서Dev

QListWidget이 비어있을 때 중앙에 자리 표시 자 텍스트를 설정하는 방법은 무엇입니까?

분류에서Dev

특정 조건이 충족 될 때 값 그룹을 삭제하는 방법은 무엇입니까?

분류에서Dev

gnuplot : 색상이있는 그리드 선뿐만 아니라 색상이 지정된 그리드 영역을 만드는 방법은 무엇입니까?

분류에서Dev

Flutter의 작은 행 안쪽 중앙에 큰 아이콘을 정렬하는 방법은 무엇입니까?

분류에서Dev

값이 슬래시로 구분 될 때 Excel에서 값을 분할하고 Excel에서 두 줄로 만드는 방법은 무엇입니까?

분류에서Dev

드래그 가능한 선이 X 범위 끝점에 가까워 질 때 pyqtgraph의 X 축을 앞뒤로 이동하는 방법은 무엇입니까?

분류에서Dev

Svelte의 구성 요소에서 소품이 변경 될 때마다 가져 오기 요청을 만드는 방법은 무엇입니까?

분류에서Dev

Linux에서 특정 파일이 삭제 될 때 알림을받는 방법은 무엇입니까?

분류에서Dev

Alamofire를 사용하여 json 데이터가 다운로드 될 때까지 애플리케이션을 일시 중지하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    프로그램이 tkinter에서 실행될 때 새 레이블을 만드는 방법은 무엇입니까?

  2. 2

    플렉스 컨테이너에서 div 그리드를 중앙 정렬하는 방법은 무엇입니까?

  3. 3

    Android에서 페이지가로드 될 때 값을 설정하는 방법은 무엇입니까?

  4. 4

    활동이 Android에서 다시로드 될 때 ArrayIndexOutOfBoundsException을 수정하는 방법은 무엇입니까?

  5. 5

    다른 차원이 필터로 선택 될 때 변경되는 동적 tableau x 축을 만드는 방법은 무엇입니까?

  6. 6

    JSON이로드 될 때까지 각도 실행을 중단하는 방법은 무엇입니까?

  7. 7

    Bootstrap 3 그리드를 사용할 때 아이콘을 세로로 중앙에 배치하는 방법은 무엇입니까?

  8. 8

    검도 그리드 열이 자동 생성 될 때 열 템플릿을 사용자 지정하는 방법은 무엇입니까?

  9. 9

    0이 될 때까지 아래 코드에서 시간을 줄이는 방법은 무엇입니까?

  10. 10

    asp.net webform이로드 될 때 JavaScript 함수 실행을 중지하는 방법은 무엇입니까?

  11. 11

    MVC 웹 응용 프로그램에서 버튼이 호출 될 때 .cshtml을 만드는 방법은 무엇입니까?

  12. 12

    WPF에서 검색 창 (TextBox)을 사용할 때 StackPanel 재정렬을 만드는 방법은 무엇입니까?

  13. 13

    LXDE / Openbox에서 바탕 화면 아이콘을 그리드에 정렬하는 방법은 무엇입니까?

  14. 14

    CSS 그리드 레이아웃에서 세 열을 정렬하는 방법은 무엇입니까?

  15. 15

    변수가 변경 될 때 동적 테이블을 만드는 방법은 무엇입니까?

  16. 16

    SwiftUI : 바인딩 값이 변경 될 때 네트워크 요청을 만드는 방법은 무엇입니까?

  17. 17

    플렉스 랩이 트리거 될 때 오른쪽으로 정렬하는 방법은 무엇입니까?

  18. 18

    Bootstrap 그리드 열에서 정렬 버튼 (또는 div)을 중앙에 배치하는 방법은 무엇입니까?

  19. 19

    전체 그리드에 영향을주지 않고 다른 행에 중첩 될 때 col-md- * 패딩을 제거하는 방법은 무엇입니까?

  20. 20

    .mk 파일이 수정 될 때 NDK 컴파일을보다 "지능형"으로 만드는 방법은 무엇입니까?

  21. 21

    QListWidget이 비어있을 때 중앙에 자리 표시 자 텍스트를 설정하는 방법은 무엇입니까?

  22. 22

    특정 조건이 충족 될 때 값 그룹을 삭제하는 방법은 무엇입니까?

  23. 23

    gnuplot : 색상이있는 그리드 선뿐만 아니라 색상이 지정된 그리드 영역을 만드는 방법은 무엇입니까?

  24. 24

    Flutter의 작은 행 안쪽 중앙에 큰 아이콘을 정렬하는 방법은 무엇입니까?

  25. 25

    값이 슬래시로 구분 될 때 Excel에서 값을 분할하고 Excel에서 두 줄로 만드는 방법은 무엇입니까?

  26. 26

    드래그 가능한 선이 X 범위 끝점에 가까워 질 때 pyqtgraph의 X 축을 앞뒤로 이동하는 방법은 무엇입니까?

  27. 27

    Svelte의 구성 요소에서 소품이 변경 될 때마다 가져 오기 요청을 만드는 방법은 무엇입니까?

  28. 28

    Linux에서 특정 파일이 삭제 될 때 알림을받는 방법은 무엇입니까?

  29. 29

    Alamofire를 사용하여 json 데이터가 다운로드 될 때까지 애플리케이션을 일시 중지하는 방법은 무엇입니까?

뜨겁다태그

보관