我使用D3创建一个面积图,在旋转的x轴上使用画笔功能,旋转Angular 为45度,因为它们是重叠的,但它不起作用。最初显示图形时,x轴标签将旋转。当应用画笔到图表时,画笔是可用的,但x轴标签消失,不再显示,即使我双击重新初始化图表。
<script>
var margin = { top: 10, right: 30, bottom: 30, left: 60 },
width = 999 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;
var svg = d3
.select("#input_viz")
.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 + ")");
var data = <?php echo $jsonInput; ?>;
var parseDate = d3.timeParse("%Y-%m-%d %H:%M:%S");
data.forEach(function (d) {
d.date = parseDate(d[0]);
d.value = +d[1];
});
var customTimeFormat = d3.timeFormat("%Y-%m-%d %H:%M:%S");
var x = d3.scaleTime()
.domain(d3.extent(data, function (d) { return d.date; }))
.range([0, width]);
var xAxis = svg.append("g")
.attr("transform", "translate(0," + height + ")")
.call(d3.axisBottom(x).tickFormat(customTimeFormat))
.selectAll("text") // Select all the text elements for the x-axis ticks
.style("text-anchor", "end") // Set the text anchor to end
.attr("dx", "-1em") // Adjust the x position to move the labels left
.attr("dy", "-0.5em") // Adjust the y position to move the labels up
.attr("transform", "rotate(-45)"); // Rotate the labels by -45 degrees
var y = d3.scaleLinear()
.domain([0, d3.max(data, function (d) { return d.value; })])
.range([height, 0]);
var yAxis = svg.append("g")
.call(d3.axisLeft(y));
var clip = svg.append("defs").append("svg:clipPath")
.attr("id", "clip")
.append("svg:rect")
.attr("width", width)
.attr("height", height)
.attr("x", 0)
.attr("y", 0);
var brush = d3.brushX()
.extent([[0, 0], [width, height]])
.on("end", updateChart);
var area = svg.append('g')
.attr("clip-path", "url(#clip)");
var areaGenerator = d3.area()
.x(function (d) { return x(d.date); })
.y0(y(0))
.y1(function (d) { return y(d.value); });
area.append("path")
.datum(data)
.attr("class", "myArea") // I add the class myArea to be able to modify it later on.
.attr("fill", "#009901")
.attr("fill-opacity", .3)
.attr("stroke", "#006601")
.attr("stroke-width", 1)
.attr("d", areaGenerator);
area.append("g")
.attr("class", "brush")
.call(brush);
var idleTimeout;
function idled() {
idleTimeout = null;
}
function updateChart() {
// What are the selected boundaries?
extent = d3.event.selection;
if (!extent) {
if (!idleTimeout) return idleTimeout = setTimeout(idled, 350);
x.domain(d3.extent(data, function (d) { return d.date; }));
} else {
x.domain([x.invert(extent[0]), x.invert(extent[1])]);
area.select(".brush").call(brush.move, null);
}
xAxis.transition().duration(1000).call(d3.axisBottom(x).tickFormat(customTimeFormat))
.selectAll("text") // Select all the text elements for the x-axis ticks
.style("text-anchor", "end") // Set the text anchor to end
.attr("dx", "-1em") // Adjust the x position to move the labels left
.attr("dy", "-0.5em") // Adjust the y position to move the labels up
.attr("transform", "rotate(-45)"); // Rotate the labels by -45 degrees
area
.select('.myArea')
.transition()
.duration(1000)
.attr("d", areaGenerator);
}
svg.on("dblclick", function () {
x.domain(d3.extent(data, function (d) { return d.date; }));
xAxis.transition().call(d3.axisBottom(x).tickFormat(customTimeFormat))
.selectAll("text") // Select all the text elements for the x-axis ticks
.style("text-anchor", "end") // Set the text anchor to end
.attr("dx", "-1em") // Adjust the x position to move the labels left
.attr("dy", "-0.5em") // Adjust the y position to move the labels up
.attr("transform", "rotate(-45)"); // Rotate the labels by -45 degrees
area
.select('.myArea')
.transition()
.attr("d", areaGenerator);
});
</script>
字符串
1条答案
按热度按时间7lrncoxx1#
给你https://codepen.io/lary-Test/pen/RwqvqpV
唯一的问题是xAxis变量值不是
<g>
标记。您试图从文本选择更新。字符串
注意我使用的是
d3 7.8.5
,所以我必须更改型
因为我不知道你用的是哪个d3版本。
希望这对你有帮助。