Как мы можем выбрать минимум 2 открытых и закрытых столбца данных, используя эти точки для определения моей оси y?

#angular #typescript #d3.js

Вопрос:

я разрабатываю диаграмму, используя d3 для своего приложения, ниже приведены мои данные

 data = [date : { "jan", "feb", "mar", "apr", "may", "jun"},
        open : { 12, 21, 32, 34, 45, 11}]

data1 = [date : { "jan", "feb", "mar", "apr", "may", "jun"},

         close = {2, 3, 1, 0.5 , 5, 6}]
 

// код, который я использовал, чтобы получить минимальное и максимальное значение

 var xmin = d3.min(data, (d:{ date: any; }) => d.date);
var xmax = d3.max(data, (d:{ date: any; }) => d.date);
var yMin = d3.min(data, (d:{ open: any; }) => d.open);
var yMax = d3.max(data, (d:{ open: any; }) => d.open);
var yMin2 = d3.min(data1, (d:{ close: any; }) => d.close );
var yMax2 = d3.max(data1, (d:{ close: any; }) => d.close );

var min = math.min(yMin, yMin2);
var max = math.max(yMax, yMax2);

output min of both(open and close) is  = 0.5
output max of both(open and close) is  = 45
 

теперь я хочу использовать min и max для определения оси

 // range of data configuring
var ScaleX = d3.scaleTime().domain([xMin, xMax]).range([0, width]);
var ScaleY = d3.scaleLinear().domain([min, max]).range([height, 0]);

var histChrtSvg = d3.select('#my_dataviz').append('svg')
                        .attr('width', width   margin.left   margin.right)
                        .attr('height', height   margin.top   margin.bottom)
                        .append('g')
                        .attr('transform', 'translate('   margin.left   ','   margin.top   ')');
 

Здесь я определяю свои оси и преобразую их в процентные значения, разделив точки данных на первое значение открытия и закрытия

 var histChrtScaleYAxis = d3.axisLeft(ScaleY).tickFormat((d: any) => Math.round(d*100/data[1].open)   '%');
var histChrtScaleYAxis2 = d3.axisLeft(ScaleY).tickFormat((d: any) => Math.round(d*100/data1[1].close)   '%');

  histChrtSvg.append('g')
              .attr('transform', 'translate(0,'   height   ')')
              .call(d3.axisBottom(ScaleX));
    histChrtSvg.append('g').call(histChrtScaleYAxis).call(histChrtScaleYAxis2);
    histChrtSvg.append('g').call(histChrtScaleYAxis2);

 

Это место, где я застрял , я не понимаю, какую ось выбрать, поскольку я конвертирую данные, а данные поступают из 2 наборов данных, какую ось я должен использовать?

 // Genereating line - for sdaCloses 
    var line = d3.line()
                .x( (d: any) => ScaleX(d.date))
                .y( (d: any) => ScaleY(d.open))
                .curve(d3.curveCardinal);
    var line2 = d3.line()
                  .x( (d: any) => ScaleX(d.date))
                  .y( (d: any) => ScaleY2(d.close))
                  .curve(d3.curveCardinal);
    histChrtSvg.append('path')
                .attr('class', 'line') //Assign a class for styling
                .datum(Data) // Binds data to the line
                .attr('d', line as any);
    histChrtSvg.append('path')
                .attr('class', 'line2') //Assign a class for styling
                .style('stroke-dasharray', ('3, 3'))
                .datum(Data1) // Binds data to the line2
                .attr('d', line2 as any);
 

below is the graph i’m trying to plot.

enter image description here

Thanks for your help in advance… Let me know if you need additional details