は、私が遭遇してきた最も近い答えが@Lars Kotthoffが示唆されたマルチスケールの時間フォーマットでした。
http://jsfiddle.net/BdGv5/1/
var customTimeFormat = timeFormat([
[d3.time.format("%Y"), function() { return true; }],
[d3.time.format("%b"), function(d) { return d.getMonth(); }],
[function(){return "";}, function(d) { return d.getDate() != 1; }]
]);
はそうでズーム時に自分自身がまだ生成されるダニが、ラベルが空の文字列のようになります。私はするカスタム時刻フォーマッタを編集しました。
UPDATE:
I)は、(私は.ticksで使用される自分の関数を作成することになりました。 Ticksは、スケールエクステントをt0とt1として関数に渡します。グラフの幅をラベルサイズ(およびパディング)で割って、重複しないラベルの最大量を見つけ出し、オーバーラップが発生すると、他のすべての目盛りを削除するためにアンダースコアを使用しました。
http://jsfiddle.net/BdGv5/3/
function customTickFunction(t0, t1, dt)
{
var labelSize = 30; // largest label is 23 pixels ("May")
var maxTotalLabels = Math.floor(width/labelSize);
function step(date, offset)
{
date.setMonth(date.getMonth() + offset);
}
var time = d3.time.month.ceil(t0), times = [];
while (time < t1) times.push(new Date(+time)), step(time, 1);
if(times.length > maxTotalLabels)
times = _.filter(times, function(d){
return (d.getMonth() + 1) % 2;
});
return times;
}
var domain = xScale.domain();
var xAxisMonthsFunction = d3.svg.axis().scale(xScale)
.ticks(customTickFunction)
.tickFormat(d3.time.format("%b"))
.orient("bottom");
アップデート2:ティックは今では4つのレベル(2,3,4,6)を有し、さらにわずか1レベルより調整製
http://jsfiddle.net/BdGv5/5/
。
function customTickFunction(t0, t1, dt)
{
var labelSize = 30; // largest label is 23 pixels ("May")
var maxTotalLabels = Math.floor(width/labelSize);
function step(date, offset)
{
date.setMonth(date.getMonth() + offset);
}
var time = d3.time.month.ceil(t0), times = [], monthFactors = [2,3,4,6];
while (time < t1) times.push(new Date(+time)), step(time, 1);
var i;
for(i=1 ; times.length > maxTotalLabels ; i++)
times = _.filter(times, function(d){
return (d.getMonth()) % monthFactors[i] == 0;
});
return times;
}
D3が自動的にそれを行うには、 '与える必要はありません.tickFormat' at all - http://jsfiddle.net/GGYKL/1/ –
あなたは単にあなた自身のマルチスケールの時間フォーマットを定義することができます - http://bl.ocks.org/mbostock/4149176 –
@Lars Kotthoff .tickFormatを追加した理由は、月のティック形式を短縮したいからです(Jan、Feb、Mar、2013ではなくJanuary)。 d3に特定のズーム度で目盛りを追加するオプションがありますか?月のダニを表示した後のように、さらにズームするとその範囲を日に分割しませんか?私はあなたの例を使用します: "2004"をズームインすると "April"、 "July"、October "、" 2004 "などが表示されますが、ズームを続けると" November "、" December " 「2004年」など、さらに拡大すると、「Dec 28」、12月29日に分割されます。これは私が把握しようとしているものです。 – dcryan22