gpt4 book ai didi

d3.js:如何在 y 轴上获得 'full width' 刻度

转载 作者:行者123 更新时间:2023-12-04 14:29:15 25 4
gpt4 key购买 nike

我正在使用这个可重复使用的柱形图,并做了一些修改:
https://gist.github.com/llad/3766585

/* Reusable column chart for d3.js          */
/* https://gist.github.com/llad/3766585 */

function columnChart() {
var margin = {top: 30, right: 10, bottom: 50, left: 50},
width = 420,
height = 420,
xRoundBands = 0.2,
xValue = function(d) { return d[0]; },
yValue = function(d) { return d[1]; },
xScale = d3.scale.ordinal(),
yScale = d3.scale.linear(),
xFormat = '',
yFormat = '',
yAxis = d3.svg.axis().scale(yScale).orient("left"),
xAxis = d3.svg.axis().scale(xScale);


function chart(selection) {
selection.each(function(data) {

// Convert data to standard representation greedily;
// this is needed for nondeterministic accessors.
data = data.map(function(d, i) {
return [xValue.call(data, d, i), yValue.call(data, d, i)];
});

// Update the x-scale.
xScale
.domain(data.map(function(d) { return d[0];} ))
.rangeRoundBands([0, width - margin.left - margin.right], xRoundBands);


// Update the y-scale.
yScale
.domain(d3.extent(data.map(function(d) { return d[1];} )))
.range([height - margin.top - margin.bottom, 0])
.nice();


// Select the svg element, if it exists.
var svg = d3.select(this).selectAll("svg").data([data]);

// Otherwise, create the skeletal chart.
var gEnter = svg.enter().append("svg").append("g");
gEnter.append("g").attr("class", "bars");
gEnter.append("g").attr("class", "y axis");
gEnter.append("g").attr("class", "x axis");
gEnter.append("g").attr("class", "x axis zero");

// Update the outer dimensions.
svg .attr("width", width)
.attr("height", height);

// Update the inner dimensions.
var g = svg.select("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");

// Update the bars.
var bar = svg.select(".bars").selectAll(".bar").data(data);
bar.enter().append("rect");
bar.exit().remove();
bar.attr("class", function(d, i) { return d[1] < 0 ? "bar negative" : "bar positive"; })
.attr("x", function(d) { return X(d); })
.attr("y", function(d, i) { return d[1] < 0 ? Y0() : Y(d); })
.attr("width", xScale.rangeBand())
.attr("height", function(d, i) { return Math.abs( Y(d) - Y0() ); })
.on("click", function(d, i)
{
d3.selectAll('.bar').classed('fade', true);
d3.select(this).classed("sel", true).classed("fade", false);
})
.on("mouseover", function(d, i)
{
d3.select(this).classed("hover", true);
})
.on("mouseout", function(d, i)
{
d3.select(this).classed("hover", false);
});

// x axis at the bottom of the chart
g.select(".x.axis")
.attr("transform", "translate(0," + (height - margin.top - margin.bottom) + ")")
.call(xAxis.orient("bottom").tickFormat(xFormat));

// zero line
g.select(".x.axis.zero")
.attr("transform", "translate(0," + Y0() + ")")
.call(xAxis.tickFormat("").tickSize(0));


// Update the y-axis.
g.select(".y.axis")
.call(yAxis);

});
}


// The x-accessor for the path generator; xScale ∘ xValue.
function X(d) {
return xScale(d[0]);
}

function Y0() {
return yScale(0);
}

// The x-accessor for the path generator; yScale ∘ yValue.
function Y(d) {
return yScale(d[1]);
}

chart.margin = function(_) {
if (!arguments.length) return margin;
margin = _;
return chart;
};

chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};

chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};

chart.x = function(_) {
if (!arguments.length) return xValue;
xValue = _;
return chart;
};

chart.y = function(_) {
if (!arguments.length) return yValue;
yValue = _;
return chart;
};

chart.yTickFormat = function(_) {
if (!arguments.length) return yFormat;
yFormat = _;
return chart;
};

chart.xTickFormat = function(_) {
if (!arguments.length) return xFormat;
xFormat = _;
return chart;
};

return chart;
}

这是一个不错的小脚本!我添加了 xTickFormat 和单击和鼠标悬停功能。

然而,在柱状图上,我喜欢在图表的整个宽度上有微弱的水平线,基本上将 y 轴刻度扩展到整个宽度。
  • 如何修改 yAxis 以获得这些全宽线,或者选择拥有这些线?

  • 谢谢!

    最佳答案

    看看:http://jsfiddle.net/samselikoff/Jqmzd/2/

    关键是.tickSize()属性(property)。

    关于d3.js:如何在 y 轴上获得 'full width' 刻度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18282092/

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