#d3.js
#d3.js
Вопрос:
У меня есть гистограмма, на которой метки отметок по оси x обрезаны в svg, и я, похоже, не могу найти подходящее действие, чтобы их отобразить. Я безуспешно пытался поиграть со .range()
свойствами, связанными с переменной x, и мне интересно, следует ли мне добавить атрибут «transform» или, возможно, атрибут «margin-bottom» для решения проблемы. Есть какие-либо указания относительно того, что может быть причиной этой проблемы, и наилучшего решения?
<html>
<!-- Load d3.js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.10.0/d3.min.js"></script>
<meta charset="utf-8">
<body>
<!-- Create a div where the graph will take place -->
<div id="my_dataviz"></div>
</body>
<script>
var data = [
{ "x": "Friday", "y": 7.620000000000001 },
{ "x": "Monday", "y": 6.463333333333335 },
{ "x": "Saturday", "y": 7.236666666666666 },
{ "x": "Sunday", "y": 7.388571428571429 },
{ "x": "Thursday", "y": 8.051111111111112 },
{ "x": "Tuesday", "y": 7.717999999999999 },
{ "x": "Wednesday", "y": 7.742 }
]
var margin = { top: 10, right: 30, bottom: 30, left: 60 }
var width = 800 - margin.left - margin.right;
var height = 800 - margin.top - margin.bottom;
var svg = d3.select("#my_dataviz")
.append("svg")
.attr("width", width margin.left margin.right)
.attr("height", height margin.top margin.bottom)
.append("g")
.attr("transform", "translate(" margin.left "," margin.top ")"); // translate(margin left, margin top)
var x = d3.scaleBand()
.domain(d3.max(data, function(d) { return d.x }))
.range([0, width])
.padding(0.2);
svg.append("g")
.attr("transform", "translate(" 0 "," height ")")
.call(d3.axisBottom(x))
.selectAll("text")
.attr("transform", "translate(-10,0)rotate(-45)")
.style("text-anchor", "end");
// Append x-scale title
svg.append("text")
.attr("transform",
"translate(" (width/2) " ," (height margin.top 20) ")")
.style("text-anchor", "middle")
.text("Weekday");
</script>
</html>
Ответ №1:
Данные оси x следует использовать .map
для получения …
var x = d3.scaleBand()
.domain(data.map(function(d) { return d.x; }))
.range([0, width])
.padding(0.2);
Комментарии:
1. Извините, я вижу, что вы были правы с ответом. Спасибо!