У вас есть две проблемы здесь. Во-первых, вы используете параметр d
, а не text
. Во-вторых, без else
вы не вернете другие тики должным образом.
Итак, должно быть:
if (d === "Food") {
return "Food, drinks and tobacco"
} else {
return d
};
Или даже проще, с троичным оператором:
return d === "Food" ? "Food, drinks and tobacco" : d;
Вот базовая демонстрация (использование оси Y для лучшей читаемости):
var svg = d3.select("svg");
var scale = d3.scalePoint()
.range([20, 130])
.domain(["Food", "Clothing", "Transportation", "Health"]);
var axis = d3.axisLeft(scale)
.tickFormat(function(d) {
return d === "Food" ? "Food, drinks and tobacco" : d;
})
var gY = svg.append("g")
.attr("transform", "translate(150,0)")
.call(axis);
<script src="https://d3js.org/d3.v5.min.js"></script>
<svg></svg>
Относительно вашего последнего абзаца:
Я не смог установить этот заголовок в CSV, потому что если в имени столбца есть пробелы в середине, если его слова, D3 не может их прочитать.
Это не правильно, и это не имеет ничего общего с D3. Это проблема JavaScript: для имен свойств с пробелами просто используйте скобки:
var someObject = {
"a property name with spaces": 42
};
console.log(someObject["a property name with spaces"])