gpt4 book ai didi

d3.js - D3 时间轴刻度在年份边界上不规则

转载 作者:行者123 更新时间:2023-12-04 21:16:49 25 4
gpt4 key购买 nike

更新: bl.ocks.org example已更新解决方案。

在计算刻度位置时,是否可以使时间刻度轴的默认刻度生成器忽略月份和年份边界?

this bl.ocks.org example 中所见,当带有日刻度的 D3 时间刻度轴跨越年末时,默认刻度生成器有时会绘制不规则间距的刻度。这段代码(也在上面的要点中)导致轴的刻度线每两天间隔一次,除了 12 月 31 日和 1 月 1 日,这两个日期都是绘制的,导致外观不规则。我用红色突出显示了不需要的刻度标签。

<!DOCTYPE html>
<meta charset="utf-8">
<style>
p { width: 600px; margin-bottom: 30px; }
.chart { shape-rendering: crispEdges; }
.axis text { font: 10px sans-serif; }
.axis line, .axis path { fill: none; stroke: black; }
</style>
<body>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script>

var start_date = "2013-12-21T00:00:00Z",
end_date = "2014-01-07T00:00:00Z",
iso = d3.time.format.iso,
t1 = iso.parse(start_date),
t2 = iso.parse(end_date),

var margin = {top: 0, right: 10, bottom: 20, left: 10},
width = 600 - margin.left - margin.right,
height = 100 - margin.top - margin.bottom;

var x = d3.time.scale()
.domain([t1, t2])
.range([0, width])

var xAxis = d3.svg.axis()
.scale(x)

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

svg.append('g')
.attr('class', 'x axis')
.call(xAxis)
.selectAll('text')
.attr('fill', function(d) { if(is_problematic(d)) { return "red"; } })

function is_problematic(d) {
return ((d.getDate() == 31) || (d.getDate() == 1));
}

最佳答案

如果您明确设置刻度值,您将避免奇怪的年终四舍五入问题:

var xAxis = d3.svg.axis()
.scale(x)
.tickValues(d3.time.days(t1, t2).filter(function(d, i){ return !(i % 2); }))

fixed

关于d3.js - D3 时间轴刻度在年份边界上不规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21296968/

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