#d3.js
#d3.js
Вопрос:
Итак, я создал диаграмму в формате d3 и использовал формат оси x по умолчанию,
d3.axisBottom(x)
который выводит следующий график:
Как я могу вручную создать и настроить этот формат? В частности, я хотел бы использовать короткие названия месяцев, такие как «Октябрь», чтобы «Октябрь» не закрывал метку следующего года.
Ответ №1:
Используйте tickFormat
для форматирования тиков по вашей оси x. В вашем случае .tickFormat(d3.timeFormat("%b"))
вернет короткие названия месяцев (но из-за этого год исчезнет).
Вот демонстрационный:
var svg = d3.select("body")
.append("svg")
.attr("width", 500)
.attr("height", 100)
var xScale = d3.scaleTime()
.domain([new Date("2014-01-01"), new Date("2016-01-01")])
.range([0, 450]);
var xAxis = d3.axisBottom(xScale)
.tickFormat(d3.timeFormat("%b"));
svg.append("g")
.call(xAxis);
<script src="https://d3js.org/d3.v4.min.js"></script>
Чтобы сохранить функциональность месяца / года по умолчанию, вам необходимо создать свой собственный пользовательский формат.
var xAxis = d3.axisBottom(xScale)
.tickFormat(function(date){
if (d3.timeYear(date) < date) {
return d3.timeFormat('%b')(date);
} else {
return d3.timeFormat('%Y')(date);
}
});
Проверьте демо:
var svg = d3.select("body")
.append("svg")
.attr("width", 500)
.attr("height", 100)
var xScale = d3.scaleTime()
.domain([new Date("2014-01-01"), new Date("2016-01-01")])
.range([0, 500]);
var xAxis = d3.axisBottom(xScale)
.tickFormat(function(date){
if (d3.timeYear(date) < date) {
return d3.timeFormat('%b')(date);
} else {
return d3.timeFormat('%Y')(date);
}
});
svg.append("g")
.attr("class", "x axis")
.call(xAxis);
d3.selectAll(".ticks");
<script src="https://d3js.org/d3.v4.min.js"></script>
Комментарии:
1. Есть ли способ сохранить исходную функциональность тиков оси, также показывающих год?
2. @ksav На самом деле я разобрался с этим самостоятельно. Также отредактируйте ответ.
3. @Juan Это очень непредсказуемо. Это зависит, среди прочего, от домена. Очень сложно сказать, и именно поэтому временную ось так сложно настроить.
4. да, я спросил в основном потому, что иногда мне приходится писать пользовательские функции для отображения месяцев или лет в зависимости от условий «d», и иногда по умолчанию это делается самостоятельно … иногда он отображает один и тот же тик несколько раз… Я чувствую, что это все еще одна из тех частей d3, с которыми я пока не чувствую себя комфортно. Спасибо, Херардо, ты уже много раз помогал мне за эти годы
5. Для расширенной версии, также форматирующей недели, дни, часы, этот пример может помочь: bl.ocks.org/wboykinm/34627426d84f3242e0e6ecb2339e9065