Невозможно получить стеки на гистограмме d3 - PullRequest
0 голосов
/ 28 мая 2020

Я хотел бы знать, что я делаю не так, я думаю, что это на оси, поскольку отображаются сложенные данные, а также прямоугольные элементы. Застрял сейчас на 2 часа.

var margin = {top: 10, right: 30, bottom: 20, left: 50},
    width = 760 - margin.left - margin.right,
    height = 600 - margin.top - margin.bottom;

    var svg = d3.select("svg")
    .attr("width", width + margin.left + margin.right)
    .attr("height", height + margin.top + margin.bottom)
  .append("g")
    .attr("transform",
          "translate(" + margin.left + "," + margin.top + ")");

    innerheight=height + margin.top + margin.bottom


d3.csv("data.csv", function (error, data) {
    if (error) {
        throw error;
    }

    // var subgroups = data.columns.slice(1);
    // console.log(subgroups);

    
    var subgroups = d3.map(data, function(d){ return(d.Segment)}).keys();

    
    var groups = d3.map(data, function(d){ return(d.Category)}).keys();
    console.log(groups);

// Add X axis
var x = d3.scaleBand()
.domain(groups)
.range([0, width])
.padding([0.2])
svg.append("g")
.attr("transform", "translate(0," + height + ")")
.call(d3.axisBottom(x).tickSizeOuter(0));

// Add Y axis
var y = d3.scaleLinear()
.domain([0, d3.max(data, function(d) { return d.Sales; })])
.range([ height , 0 ]);
console.log(y.domain())
console.log(y.range())
svg.append("g")
.call(d3.axisLeft(y));

var color = d3.scaleOrdinal()
.domain(subgroups)
.range(['#e41a1c','#377eb8','#4daf4a']);


ymax= d3.max(data, function(d) { return d.Sales; });

console.log(subgroups);

var stackedData = d3.stack().keys(subgroups);
stackedData = stackedData(data)
console.log(stackedData);
svg.append("g")
        .selectAll("g")
        // Enter in the stack data = loop key per key = group per group
        .data(stackedData)
        .enter().append("g")
        .attr("fill", function (d) { return (color(d.key)); })
        .selectAll("rect")
        // enter a second time = loop subgroup per subgroup to add all rectangles
        .data(function (d) { return d; })
        .enter().append("rect")
        .attr("x", function (d) { return x(d.data.Category); })
        .attr("y", function (d) { return  y(d.data.Sales); })
        .attr("height", function (d) { return  (height - y(d.data.Sales)) ; })
        .attr("width", x.bandwidth())


});

csv в этом формате

Идентификатор строки, Сегмент, Категория, Продажи, Итого 1, Потребитель, Аксессуары, 84754.742,1007859.426 2, Потребительский, Бытовая техника, 42852.68,1007859.426 31, Корпоративный, Телефоны, 89019.204,588163.8014 34, Корпоративный, Столы, 57226.0385,588163.8014 37, Домашний офис, Art, 4799.502,373365.8573

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...