#javascript #svg #d3js
Добрый день! Создаю стандартные оси OX, OY. Все замечательно, но нулевая точка обозначается
по каждой из осей, причем текст пересекается самой осью. Есть ли хорошие способы либо
в принципе убрать одну из засечек, либо передвинуть текст? (использую 4-ую версию библиотеки)
Изменения в 4-ой версии
Документация
var xScale = d3.scaleLinear()
.domain([-2, 2])
.range([-200, 200]);
var yScale = d3.scaleLinear()
.domain([-2, 2])
.range([200, -200]);
var xAxis = d3.axisBottom()
.scale(xScale)
.ticks(8);
var yAxis = d3.axisLeft()
.scale(yScale)
.ticks(8);
d3.select("svg").append("g")
.attr("transform", "translate(" + 250 + "," + 250 + ")")
.call(xAxis);
d3.select("svg").append("g")
.attr("transform", "translate(" + 250 + "," + 250 + ")")
.call(yAxis);
Ответы
Ответ 1
Нашел такое решение. Добавляем метод tickFormat для осей. И далее в функции, если значение равно нулю, меняем на null. Остальные без изменений. При этом нули исчезают. В принцип можно пойти дальше и как-то нарисовать ноль рядом с пересечением, но меня и так устраивает уже. var xScale = d3.scaleLinear() .domain([-2, 2]) .range([-200, 200]); var yScale = d3.scaleLinear() .domain([-2, 2]) .range([200, -200]); var xAxis = d3.axisBottom() .scale(xScale) .tickFormat(function(d) { if (d == 0) { return null } else { return d } }); var yAxis = d3.axisLeft() .scale(yScale) .tickFormat(function(d) { if (d == 0) { return null } else { return d } }); d3.select("svg").append("g") .attr("transform", "translate(" + 250 + "," + 250 + ")") .call(xAxis); d3.select("svg").append("g") .attr("transform", "translate(" + 250 + "," + 250 + ")") .call(yAxis);Ответ 2
Может SVG попробовать?
Комментариев нет:
Отправить комментарий