Шкала лога на D3.js - PullRequest
       34

Шкала лога на D3.js

0 голосов
/ 22 марта 2019

Я пытаюсь использовать шкалу, чтобы нарисовать звуковую форму волны.Линейная шкала слишком «динамична», и я бы хотел применить сжатие к пикам.Я думал о шкале логарифма, хотя я действительно не знаю, как использовать его в D3.

Линейный масштаб:

      // Scale for time
      xScale = d3.scaleLinear()
                .domain([0,samples_length]).range([0,width]);

      // Scale for samples
      yScale = d3.scaleLinear()
                .domain([-1,0,1]).range([0,height]);

      let area = d3.area()
                  .x(function(d, i){return xScale(i)})
                  .y0(function(d){return yScale(d); })
                  .y1(function(d){return height-yScale(d); });

      let waveform = d3.select("#waveform")
                        .append("svg")
                        .attr("width", width)
                        .attr("height", height);

      waveform.append("path")
              .attr("d", area(samples))
              .attr("fill", "steelblue");

Линейная шкала дает мне:

enter image description here

И я хотел бы что-то более похожееэто: enter image description here

Я также попробовал шкалу Symlog:

      // Scale for time
      xScale = d3.scaleSymlog()
                .domain([0,samples_length]).range([0,width]);

      // Scale for samples
      yScale = d3.scaleSymlog()
                .domain([-1,0,1]).range([0,height]);

      let area = d3.area()
                  .x(function(d, i){return xScale(i)})
                  .y0(function(d){return yScale(d); })
                  .y1(function(d){return height-yScale(d); });

      let waveform = d3.select("#waveform")
                        .append("svg")
                        .attr("width", width)
                        .attr("height", height);

      waveform.append("path")
              .attr("d", area(samples))
              .attr("fill", "steelblue");
    }

И Symlog дает мне:

enter image description here

Любое предложение?

1 Ответ

0 голосов
/ 22 марта 2019

Мне удалось исправить динамический график, просто уменьшив масштаб шкалы:

      // Scale for samples
      yScale = d3.scaleSymlog()
                .domain([-1,0,1])
                .range([0,height/4])
                .constant(-1);

Конечный результат выглядит более приятным:

enter image description here

...