Начало координат оси D3 изменяется в соответствии с диапазоном ее масштабов

#javascript #d3.js #svg

#javascript #d3.js #svg

Вопрос:

Я немного смущен тем, как объект оси D3s занимает исходное положение и где он привязан (я предполагаю, что его верхний левый)

Также кажется, что исходная точка изменяется в соответствии с диапазоном соответствующего масштаба, например, две оси ниже будут начинаться с другого положения

1-я ось

     //Xscale with scale not augmented       
    var stageXScale=d3.scaleLinear()            
      .domain([0,150])
      .range([0,150]);

    var stageXAxis = d3.axisBottom(stageXScale)   //unaug axis
        .ticks(20);
 

2-я ось

     //scale which is augmented
    var stageXScaleAug=d3.scaleLinear()            
      .domain([0,stageWidth])
      .range([0 stageMarginLeft,150 stageMarginLeft]);

    var stageXAxisAug = d3.axisBottom(stageXScaleAug)       //aug axis
        .ticks(20);
 

Разве начало координат оси не сопоставлено с началом координат родительского контейнера, если да, то почему масштаб оси изменяет это.
Вот пример скрипки Js :

https://jsfiddle.net/Snedden27/3wsx8bdy/12/

Ответ №1:

Положение начала координат оси (до transform ) определяется минимальным значением диапазона шкалы.

Для оси 1 диапазон [0,150] равен, а ось начинается с экранной координаты x 0 родительского элемента. (Ось заканчивается на координате x 150.)

Для оси 2 диапазон равен [0 stageMarginLeft,150 stageMarginLeft] , так что ось начинается с экранной координаты x stageMarginLeft (20) родительского элемента.

Комментарии:

1. есть ли способ, которым я всегда могу запустить ось в начале координат родительского элемента независимо от масштаба

2. Почему бы вам просто не всегда начинать диапазон вашего масштаба с 0 в этом случае? Это цель range . Диапазон — это диапазон координат экрана относительно родительского элемента, над которым будет отображаться ось.