gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:50:01 25 4
gpt4 key购买 nike

我在用一条简单的线创建图表时遇到了问题。

我将在此处放置我的代码和该线如何偏离轴 Y 轴和 X 轴的图像。我真的不知道为什么会这样。

图表:

enter image description here

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 + ')')

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

关于javascript - 为什么图形线偏离 Y 轴和 X 轴?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59074327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com