gpt4 book ai didi

javascript - 如何在不改变坐标的情况下变换(旋转)svg文本元素?

转载 作者:行者123 更新时间:2023-11-28 04:03:52 24 4
gpt4 key购买 nike

我是这个 d3.js 的新手。在这里,我尝试使用 d3.v3.js 库绘制条形图。在这里我面临一些问题。我尝试在 y 轴上包含测量标签。但是一旦我将标签变换-90度,它的位置就会自动改变。

这是我用来绘制的代码:

    svg.append("g")
.attr("id","x_axis")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis)
.selectAll("text")
.style("text-anchor", "end")
.attr("dx", "-.8em")
.attr("dy", ".15em")
.attr("transform", "rotate(-65)");
// .attr("transform", "translate(" + bandSize + ", 0)")

svg.append("g")
.attr("class", "x axis")
.attr("id","dimLabel")
.append("text")
.style("text-anchor", "end")
.attr("x", width/2)
.attr("y", height+55)
.text(dimensionLabels[0]);




svg.append("g")
.attr("id","y_axis1")
.attr("class", "y axis")
.call(yAxis)
.append("text")
.attr("class", "label")
//.attr("transform", "rotate(-90)")
.attr("y", function(d){return y(d3.max(data, function(d) { return d.Metric1; }));});


//Measure Labels
svg.append("g")
.attr("class", "y axis")
.attr("id","measureLabels")
.append("text")
.style("text-anchor", "end")
.attr("x", 0)
.attr("y", height/2)
.text(measureLabels[0]+", "+measureLabels[1])
.attr("transform", "rotate(-90)");

输出图像:

enter image description here

非常感谢任何帮助。

最佳答案

您现在看到的是预期的结果,因为 transform 属性的 rotate 函数使元素围绕原点 (0,0) 旋转,而不是围绕其本身中心。

最简单的解决方案是删除 attr("x")attr("y") 并使用相同的转换定位文本>:

var width = 300,
height = 300;
var svg = d3.select("body")
.append("svg")
.attr("width", width)
.attr("height", height);
var text = svg.append("text")
.text("Sum (sales), Sum (quantity)")
.attr("text-anchor", "middle")
.attr("transform", "translate(20," + (height / 2) + ") rotate(-90)")
svg {
border: 1px solid gray;
}
<script src="https://d3js.org/d3.v3.min.js"></script>

另一个解决方案是将旋转的中心设置为相同的xy值:

var width = 300,
height = 300;
var svg = d3.select("body")
.append("svg")
.attr("width", width)
.attr("height", height);
var text = svg.append("text")
.text("Sum (sales), Sum (quantity)")
.attr("text-anchor", "middle")
.attr("x", 20)
.attr("y", 150)
.attr("transform", "rotate(-90, 20, 150)")
svg {
border: 1px solid gray;
}
<script src="https://d3js.org/d3.v3.min.js"></script>

关于javascript - 如何在不改变坐标的情况下变换(旋转)svg文本元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46868830/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com