Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在d3 sunburst v4中旋转标签_Javascript_D3.js_Sunburst Diagram - Fatal编程技术网

Javascript 在d3 sunburst v4中旋转标签

Javascript 在d3 sunburst v4中旋转标签,javascript,d3.js,sunburst-diagram,Javascript,D3.js,Sunburst Diagram,我尝试使用D3V4 sunburst来可视化.json中的一些数据 我可以用我想要的标签显示sunburst图表,但左侧的标签是颠倒的。 我尝试了各种各样的方法,我在某某或其他来源上找到了这些方法,但都不适合我 这是我的密码 <!DOCTYPE html> <meta charset="utf-8"> <style> path { stroke: #fff; } text { font-family: Arial, sans-serif; font-siz

我尝试使用D3V4 sunburst来可视化.json中的一些数据 我可以用我想要的标签显示sunburst图表,但左侧的标签是颠倒的。 我尝试了各种各样的方法,我在某某或其他来源上找到了这些方法,但都不适合我

这是我的密码

<!DOCTYPE html>
<meta charset="utf-8">
<style>

path {
stroke: #fff;
}

text {
font-family: Arial, sans-serif;
font-size: 18px;
}

</style>
<body>
<script src="d3.min.js"></script>
<script src="data.js" charset="utf-8"></script>

<script language="javascript">

var width = 1200,
height = 1000,
radius = Math.min(width, height) / 2;

var x = d3.scaleLinear()
.range([0, 2 * Math.PI]);

var y = d3.scaleLinear()
.range([0, radius]);

var formatNumber = d3.format(",d");

var color = d3.scaleOrdinal(d3.schemeCategory20c);



var partition = d3.partition();

var arc = d3.arc()
.startAngle(function(d) { return Math.max(0, Math.min(2 * Math.PI, 
 x(d.x0))); })
.endAngle(function(d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x1))); 
 })
.innerRadius(function(d) { return Math.max(0, y(d.y0)); })
.outerRadius(function(d) { return Math.max(0, y(d.y1)); });

 var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(" + width / 2 + "," + (height / 2) + ")");

 root = d3.hierarchy(root);
root.sum(function(d) { return d.size; });
svg.selectAll("path")
    .data(partition(root).descendants())
    .enter().append("g").attr("class", "node");

 path = svg.selectAll(".node")
  .append("path")
  .attr("d", arc)
  .style("fill", function(d) { return color((d.children ? d : 
 d.parent).data.name); })
  .on("click", click);

text = svg.selectAll(".node")
   .append("text")
      .attr("transform", function(d) { 
         return  "rotate(" + computeTextRotation(d) + ")"; 
      })

      .attr("x", function(d) { 
         return y(d.y0); 
      })
      .attr("dx", "6") // margin
      .attr("dy", ".35em") // vertical-align
      .text(function(d) { 
          return d.data.name === "root" ? "" : d.data.name
      });


  function click(d) {
  //Hide text while Sunburst transitions
  text.transition().attr("opacity", 0);

  svg.transition()
  .duration(750)
  .tween("scale", function() {
    var xd = d3.interpolate(x.domain(), [d.x0, d.x1]),
        yd = d3.interpolate(y.domain(), [d.y0, 1]),
        yr = d3.interpolate(y.range(), [d.y0 ? 20 : 0, radius]);
    return function(t) { x.domain(xd(t)); y.domain(yd(t)).range(yr(t)); };
   })
  .selectAll("path")
  .attrTween("d", function(d) { return function() { return arc(d); }; })
  .on("end", function(e, i) {
      // Check if the animated element's data e lies within the visible 
      // angle span given in d:
      if (e.x0 >= d.x0 && e.x0 < d.x1) {
          // get a selection of the associated text element
          var arcText = d3.select(this.parentNode).select("text");
          // fade in the text element and recalculate positions
          arcText.transition().duration(750)
              .attr("opacity", 1)

              .attr("transform", function() { return "rotate(" + 
  computeTextRotation(e) + ")" })
              .attr("x", function(d) { return y(d.y0); })
              .text(function(d) { 
                  return d.data.name === "root" ? "" : d.data.name
              });
      }
  });
  }

  d3.select(self.frameElement).style("height", height + "px");

 // Interpolate the scales!
 function arcTween(d) {
  var xd = d3.interpolate(x.domain(), [d.x, d.x + d.dx]),
  yd = d3.interpolate(y.domain(), [d.y, 1]),
  yr = d3.interpolate(y.range(), [d.y ? 20 : 0, radius]);
  return function(d, i) {
 return i
    ? function(t) { return arc(d); }
    : function(t) { x.domain(xd(t)); y.domain(yd(t)).range(yr(t)); return 
 arc(d); };
  };
 }

 function computeTextRotation(d) {
  var angle = (x((d.x0 + d.x1)/2) - Math.PI / 2) / Math.PI * 180;
  return (angle >  90 || angle < 270) ?  angle : 180 + angle ;

  }



  </script>
这就是目前的情况


如您所见,左侧是倒置的

这个想法是通过额外的180°文本标签旋转,该标签的角度在90°和270°之间(图的左侧)

以下是更新的演示:


路径{
冲程:#fff;
}
正文{
字体系列:Arial,无衬线;
字号:18px;
}
变种根={
“id”:“00000001”,“名称”:”,
“儿童”:[
{
“id”:“00000003”,“name”:“#”,
“儿童”:[
{
“id”:“00000003”,“名称”:“2017”,
“儿童”:[
{
“id”:“00000002”,“name”:“Nov”,“size”:12608.00},
] },
] },
{
“id”:“00000010”,“名称”:“A”,
“儿童”:[
{
“id”:“00000010”,“名称”:“2017”,
“儿童”:[
{
“id”:“00000003”,“name”:“Dez”,“size”:119215.80},
{
“id”:“00000004”,“name”:“Jul”,“size”:5000.00},
{
“id”:“00000005”,“名称”:“Jun”,“大小”:45536.00},
{
“id”:“00000006”,“name”:“Mai”,“size”:18500.00},
{
“id”:“00000007”,“name”:“Nov”,“size”:20107.31},
{
“id”:“00000008”,“名称”:“Okt”,“大小”:70303.00},
{
“id”:“00000009”,“name”:“Sep”,“size”:11240.00},
] },
] },
{
“id”:“00000018”,“name”:“DIR”,
“儿童”:[
{
“id”:“00000018”,“名称”:“2017”,
“儿童”:[
{
“id”:“00000010”,“name”:“Aug”,“size”:705110.07},
{
“id”:“00000011”,“name”:“Dez”,“size”:667101.28},
{
“id”:“00000012”,“name”:“Jul”,“size”:684326.04},
{
“id”:“00000013”,“name”:“Jun”,“size”:975615.11},
{
“id”:“00000014”,“name”:“Mai”,“size”:625832.83},
{
“id”:“00000015”,“name”:“Nov”,“size”:488444.60},
{
“id”:“00000016”,“名称”:“Okt”,“大小”:578924.89},
{
“id”:“00000017”,“name”:“Sep”,“size”:755968.14},
] },
] },
{
“id”:“00000020”,“名称”:“EU”,
“儿童”:[
{
“id”:“00000020”,“名称”:“2017”,
“儿童”:[
{
“id”:“00000018”,“name”:“Nov”,“size”:505400.00},
{
“id”:“00000019”,“名称”:“Sep”,“大小”:505400.00},
] },
] },
{
“id”:“00000028”,“name”:“NAT”,
“儿童”:[
{
“id”:“00000028”,“名称”:“2017”,
“儿童”:[
{
“id”:“00000020”,“name”:“Aug”,“size”:1882688.00},
{
“id”:“00000021”,“name”:“Dez”,“size”:268861.33},
{
“id”:“00000022”,“name”:“Jul”,“size”:1174708.67},
{
“id”:“00000023”,“name”:“Jun”,“size”:3860969.90},
{
“id”:“00000024”,“name”:“Mai”,“size”:917468.75},
{
“id”:“00000025”,“name”:“Nov”,“size”:2233213.25},
{
“id”:“00000026”,“名称”:“Okt”,“大小”:2340277.41},
{
“id”:“00000027”,“name”:“Sep”,“size”:1667464.09},
] },
] },
{
“id”:“00000036”,“名称”:“X”,
“儿童”:[
{
“id”:“00000036”,“名称”:“2017”,
“儿童”:[
{
“id”:“00000028”,“name”:“Aug”,“size”:249939.37},
{
“id”:“00000029”,“name”:“Dez”,“size”:289363.70},
{
“id”:“00000030”,“name”:“Jul”,“size”:98847.32},
{
“id”:“00000031”,“name”:“Jun9”,“size”:7799.00},
{
“id”:“00000032”,“name”:“Mai”,“size”:19520.00},
{
“id”:“00000033”,“name”:“Nov”,“size”:1177309.62},
{
“id”:“00000034”,“名称”:“Okt”,“大小”:224970.85},
{
“id”:“00000035”,“name”:“Sep”,“size”:167309.57},
] },
] },
] }
可变宽度=1200,
高度=1000,
半径=数学最小值(宽度、高度)/2;
var x=d3.scaleLinear()
.range([0,2*Math.PI]);
变量y=d3.scaleLinear()
.范围([0,半径]);
var formatNumber=d3.format(“,d”);
var color=d3.scaleOrdinal(d3.schemeCategory20c);
var partition=d3.partition();
var arc=d3.arc()
.startAngle(函数(d){返回Math.max(0,Math.min(2*Math.PI,
x(d.x0));})
.endAngle(函数(d){return Math.max(0,Math.min(2*Math.PI,x(d.x1)));
})
.innerRadius(函数(d){return Math.max(0,y(d.y0));})
.outerRadius(函数(d){return Math.max(0,y(d.y1));});
var svg=d3.选择(“正文”).追加(“svg”)
.attr(“宽度”,宽度)
.attr(“高度”,高度)
.附加(“g”)
.attr(“变换”、“平移”(+width/2+)、“+(height/2)+”);
根=d3.层次结构(根);
sum(函数(d){返回d.size;});
svg.selectAll(“路径”)
.data(分区(根).subjects())
.enter().append(“g”).attr(“类”、“节点”);
path=svg.selectAll(“.node”)
.append(“路径”)
.attr(“d”,弧)
.style(“填充”,函数(d){返回颜色(d.children?d:
d、 parent.data.name);})
。开启(“点击”,点击);
text=svg.selectAll(“.node”)
.append(“文本”)
.attr(“转换”,函数(d){
变量旋转=计算拉伸(d);
var换算=y(d.y0);
如果(旋转>90和旋转<270){
旋转=旋转+180;
翻译=-翻译-13;
}
返回(
“旋转(“+旋转+”)+
翻译(“+翻译+”,0)
);
})
.attr(“文本锚定”,函数(d){
变量旋转=计算拉伸(d);
返回(旋转>90和旋转<270)-“结束”:“开始”;
})
.attr(“dx”,函数(d){
变量旋转=计算拉伸(d);
返回(旋转>90和旋转<270)?-6:6;
})
.attr(“dy”,“.35em”)//垂直对齐
.text(功能(d){
返回d.data.name==“根”?“”:d.data.name
});
功能点击(d){
//在日光变换时隐藏文本
text.transition().attr(“不透明度”,0);
svg.transition()
.持续时间(750)
.tween(“比例”,函数(){
var xd=d3.插值(x.domain(),[d.x0,d.x1]),
yd=d3.插值(y.域(),[d.y0,1]),
yr=d3.插值(y.范围(),[d.y0?20:0,半径]);
返回函数(t){x.domain(xd(t));y.domain(yd(t)).range(yr(t));};
})
.selectAll(“路径”)
.attrTween(“d”,函数(d){return function(){return arc(d);};})
.关于(“结束”,函数(e,
var root={
"id":"00000001", "name": "",
"children": [
{
"id":"00000003", "name":"#",
"children": [
{
"id":"00000003", "name":"2017",
"children": [
{
"id":"00000002", "name":"Nov","size":           12608.00},
] },
] },
{
"id":"00000010", "name":"A",
"children": [
{
"id":"00000010", "name":"2017",
"children": [
{
"id":"00000003", "name":"Dez","size":          119215.80},
{
"id":"00000004", "name":"Jul","size":            5000.00},
{
"id":"00000005", "name":"Jun","size":           45536.00},
{
"id":"00000006", "name":"Mai","size":           18500.00},
{
"id":"00000007", "name":"Nov","size":           20107.31},
{
"id":"00000008", "name":"Okt","size":           70303.00},
{
"id":"00000009", "name":"Sep","size":           11240.00},
] },
] },
{
"id":"00000018", "name":"DIR",
"children": [
{
"id":"00000018", "name":"2017",
"children": [
{
"id":"00000010", "name":"Aug","size":          705110.07},
{
"id":"00000011", "name":"Dez","size":          667101.28},
{
"id":"00000012", "name":"Jul","size":          684326.04},
{
"id":"00000013", "name":"Jun","size":          975615.11},
{
"id":"00000014", "name":"Mai","size":          625832.83},
{
"id":"00000015", "name":"Nov","size":          488444.60},
{
"id":"00000016", "name":"Okt","size":          578924.89},
{
"id":"00000017", "name":"Sep","size":          755968.14},
] },
] },
{
"id":"00000020", "name":"EU",
"children": [
{
"id":"00000020", "name":"2017",
"children": [
{
"id":"00000018", "name":"Nov","size":          505400.00},
{
"id":"00000019", "name":"Sep","size":          505400.00},
] },
] },
{
"id":"00000028", "name":"NAT",
"children": [
{
"id":"00000028", "name":"2017",
"children": [
{
"id":"00000020", "name":"Aug","size":         1882688.00},
{
"id":"00000021", "name":"Dez","size":          268861.33},
{
"id":"00000022", "name":"Jul","size":         1174708.67},
{
"id":"00000023", "name":"Jun","size":         3860969.90},
{
"id":"00000024", "name":"Mai","size":          917468.75},
{
"id":"00000025", "name":"Nov","size":         2233213.25},
{
"id":"00000026", "name":"Okt","size":         2340277.41},
{
"id":"00000027", "name":"Sep","size":         1667464.09},
] },
] },
{
"id":"00000036", "name":"X",
"children": [
{
"id":"00000036", "name":"2017",
"children": [
{
"id":"00000028", "name":"Aug","size":          249939.37},
{
"id":"00000029", "name":"Dez","size":          289363.70},
{
"id":"00000030", "name":"Jul","size":           98847.32},
{
"id":"00000031", "name":"Jun9","size":            7799.00},
{
"id":"00000032", "name":"Mai","size":           19520.00},
{
"id":"00000033", "name":"Nov","size":         1177309.62},
{
"id":"00000034", "name":"Okt","size":          224970.85},
{
"id":"00000035", "name":"Sep","size":          167309.57},
] },
] },
] }