gpt4 book ai didi

javascript - 反转Y轴D3

转载 作者:行者123 更新时间:2023-12-03 02:04:59 25 4
gpt4 key购买 nike

我创建了一个条形图,但我的 Y 轴以某种方式反转(也看起来比例不正确)。我自己实在是想不通。这是the link对于 Jsfiddle。

这是我正在编写的代码,以防您想在其他地方尝试。

var w = 700;
var h = 400;
var margin = 40;

var dataset = [
{key:1,value:4000},
{key:2,value:3500},
{key:3,value:4400},
{key:4,value:3250},
{key:5,value:4785},
{key:6,value:3600},
{key:7,value:3200}
];


var key = function(d) {
return d.key;
};

var value = function(d) {
return d.value;
};
console.log(dataset);

//Create SVG element
var svg = d3.select("body")
.append("svg")
.attr("width", w)
.attr("height", h);

var xScale = d3.scale.ordinal()
.domain(d3.range(dataset.length+1))
.rangeRoundBands([40, w], 0.05);

var yScale = d3.scale.linear()
.domain([0, 5000])
.range([0, h-40]);

var x_axis = d3.svg.axis().scale(xScale);
var y_axis = d3.svg.axis().scale(yScale).orient("left");


d3.select("svg")
.append("g")
.attr("class","x axis")
.attr("transform","translate(0,"+(h-margin)+")")
.call(x_axis);

d3.select("svg")
.append("g")
.attr("class","y axis")
.attr("transform","translate("+margin+",0)")
.call(y_axis);

//Create bars
svg.selectAll("rect")
.data(dataset, key)
.enter()
.append("rect")
.attr("x", function(d, i) {
return xScale(i);
})
.attr("y", function(d) {
return h - yScale(d.value);
})
.attr("width", xScale.rangeBand())
.attr("height", function(d) {
return yScale(d.value)-margin;
})
.attr("fill", function(d) {
return "rgb(96, 0, " + (d.value * 10) + ")";
})

//Tooltip
.on("mouseover", function(d) {
//Get this bar's x/y values, then augment for the tooltip
var xPosition = parseFloat(d3.select(this).attr("x")) + xScale.rangeBand() / 2;
var yPosition = parseFloat(d3.select(this).attr("y")) + 14;

//Update Tooltip Position & value
d3.select("#tooltip")
.style("left", xPosition + "px")
.style("top", yPosition + "px")
.select("#value")
.text(d.value);
d3.select("#tooltip").classed("hidden", false)
})
.on("mouseout", function() {
//Remove the tooltip
d3.select("#tooltip").classed("hidden", true);
}) ;

//Create labels
svg.selectAll("text")
.data(dataset, key)
.enter()
.append("text")
.text(function(d) {
return d.value;
})
.attr("text-anchor", "middle")
.attr("x", function(d, i) {
return xScale(i) + xScale.rangeBand() / 2;
})
.attr("y", function(d) {
return h - yScale(d.value) + 14;
})
.attr("font-family", "sans-serif")
.attr("font-size", "11px")
.attr("fill", "white");

最佳答案

也许这会有所帮助。

http://jsfiddle.net/S575k/4/

一些注意事项:

  1. 我反转了你的 y 域范围 .range([0, h-margin]);.range([h-margin, 0]);这将解决 y 轴标记方向错误的问题,因为浏览器认为是原点 (0,0)指向左上角,而不是像数学中那样指向左下角。

  2. 由于这种逆转,我不得不调整你的 .attr('height').attr('y') .

  3. 在条形图中查找条形高度的一个好方法是认识到 yscale(0)将为您提供条形图底部的像素位置。然后你可以做yscale(value) - yscale(0)获取条形的像素高度。

关于javascript - 反转Y轴D3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20197961/

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