繁体   English   中英

为什么图形线偏离 Y 轴和 X 轴?

[英]Why the graph lines are off axis Y and X?

我无法使用简单的线条创建图表。

我将把我的代码和一条关于这条线如何离开 Y 轴和 X 轴的图像放在这里。我真的不知道为什么会发生这种情况。

图表:

在此处输入图片说明

HTML:

<div id="myChart"></div>

JavaScript:

仅使用我需要的数据调整我的 json 的函数:

var reduceVendedores = vendedores.reduce(function (allSales, sales) {
    if (allSales.some(function (e) {
        return e.vendnm === sales.vendnm;
    })) {
        allSales.filter(function (e) {
            return e.vendnm === sales.vendnm
        })[0].Vendas_Ano += sales.Vendas_Ano;
        allSales.filter(function (e) {
            return e.vendnm === sales.vendnm
        })[0].Vendas_Ant += sales.Vendas_Ant
    } else {
        allSales.push({
            vendnm: sales.vendnm,
            Vendas_Ano: sales.Vendas_Ano,
            Vendas_Ant: sales.Vendas_Ant
        })
    }
    return allSales;
}, []);

定义图表的 X 轴和 Y 轴:

var margin = { top: 30, right: 30, bottom: 70, left: 60 },
    width = 600 - margin.left - margin.right,
    height = 600 - margin.top - margin.bottom;


function getMax() {
    return reduceVendedores.map(d => d.Vendas_Ano)
}

var svg = d3.select("#myChart")
    .append("svg")
    .attr("width", width)
    .attr("height", height);

var xscale = d3.scaleBand()
    .range([0, width - 100])
    .domain(reduceVendedores.map(function (d) { return d.vendnm; }))

var yscale = d3.scaleLinear()
    .domain([0, d3.max(getMax()) + 30000])
    .range([height / 2, 0]);

var x_axis = d3.axisBottom().scale(xscale);
var y_axis = d3.axisLeft().scale(yscale);

svg.append("g")
    .attr("transform", "translate(50, 10)")
    .call(y_axis);

var xAxisTranslate = height / 2 + 10;

svg.append("g")
    .attr("transform", "translate(50, " + xAxisTranslate + ")")
    .call(d3.axisBottom(xscale))
    .selectAll("text")
    .attr("transform", "translate(-10,0)rotate(-45)")
    .style("text-anchor", "end");

定义图表线:

svg.append("path")
    .datum(reduceVendedores)
    .attr("fill", "none")
    .attr("stroke", "steelblue")
    .attr("stroke-width", 1.5)
    .attr("d", d3.line()
        .x(function (d) { return xscale(d.vendnm); })
        .y(function (d) { return yscale(d.Vendas_Ano) })
    )

你没有调整你给你的轴的边距:

.attr("transform", "translate(50, 10)")

尝试:

svg.append('g')       
        .attr('transform','translate(50,0)')
        .append("path")
        .datum(reduceVendedores)
        .attr("fill", "none")
        .attr("stroke", "steelblue")
        .attr("stroke-width", 1.5)
        .attr("d", d3.line()
            .x(function (d) { return xscale(d.vendnm); })
            .y(function (d) { return yscale(d.Vendas_Ano) })
        )

通常你会在 svg 中设置你的边距,比如:

var svg = d3.select("#myChart")
    .append("svg")
    .attr("width", width)
    .attr("height", height)
    .append('g')
    .attr('transform','translate(' + margin.left + ',' + margin.top + ')')

但是这样做会破坏轴的对齐。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM