score:1

Thanks Lars for your help. Now the code works. By the way, I posted wrong d3 code in the question, so it didn't belong to "zoomable sunburst with labels", it is my bad :(

But still, I integrated your help into the actual code. And it works. I wanted to post the final code of "zoomable sunburst with labels with embedded data" as an answer for who might need it in future.

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

path {
  stroke: #fff;
  fill-rule: evenodd;
}

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

</style>
<body>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script>

// original code of this D3 visualization can be found at http://bl.ocks.org/metmajer/5480307
// by the help of stackoverflow user Lars Kotthoff, I made some changes and now the code has embedded data


var flaredata = {"name": "flare","children": [{"name": "analytics","children": [{"name": "cluster","children": [{"name": "AgglomerativeCluster", "size": 3938},{"name": "CommunityStructure", "size": 3812},{"name": "HierarchicalCluster", "size": 6714},{"name": "MergeEdge", "size": 743}]},{"name": "graph","children": [{"name": "BetweennessCentrality", "size": 3534},{"name": "LinkDistance", "size": 5731},{"name": "MaxFlowMinCut", "size": 7840},{"name": "ShortestPaths", "size": 5914},{"name": "SpanningTree", "size": 3416}]},{"name": "optimization","children": [{"name": "AspectRatioBanker", "size": 7074}]}]},{"name": "animate","children": [{"name": "Easing", "size": 17010},{"name": "FunctionSequence", "size": 5842},{"name": "interpolate","children": [{"name": "ArrayInterpolator", "size": 1983},{"name": "ColorInterpolator", "size": 2047},{"name": "DateInterpolator", "size": 1375},{"name": "Interpolator", "size": 8746},{"name": "MatrixInterpolator", "size": 2202},{"name": "NumberInterpolator", "size": 1382},{"name": "ObjectInterpolator", "size": 1629},{"name": "PointInterpolator", "size": 1675},{"name": "RectangleInterpolator", "size": 2042}]},{"name": "ISchedulable", "size": 1041},{"name": "Parallel", "size": 5176},{"name": "Pause", "size": 449},{"name": "Scheduler", "size": 5593},{"name": "Sequence", "size": 5534},{"name": "Transition", "size": 9201},{"name": "Transitioner", "size": 19975},{"name": "TransitionEvent", "size": 1116},{"name": "Tween", "size": 6006}]},{"name": "data","children": [{"name": "converters","children": [{"name": "Converters", "size": 721},{"name": "DelimitedTextConverter", "size": 4294},{"name": "GraphMLConverter", "size": 9800},{"name": "IDataConverter", "size": 1314},{"name": "JSONConverter", "size": 2220}]},{"name": "DataField", "size": 1759},{"name": "DataSchema", "size": 2165},{"name": "DataSet", "size": 586},{"name": "DataSource", "size": 3331},{"name": "DataTable", "size": 772},{"name": "DataUtil", "size": 3322}]},{"name": "display","children": [{"name": "DirtySprite", "size": 8833},{"name": "LineSprite", "size": 1732},{"name": "RectSprite", "size": 3623},{"name": "TextSprite", "size": 10066}]},{"name": "flex","children": [{"name": "FlareVis", "size": 4116}]},{"name": "physics","children": [{"name": "DragForce", "size": 1082},{"name": "GravityForce", "size": 1336},{"name": "IForce", "size": 319},{"name": "NBodyForce", "size": 10498},{"name": "Particle", "size": 2822},{"name": "Simulation", "size": 9983},{"name": "Spring", "size": 2213},{"name": "SpringForce", "size": 1681}]},{"name": "query","children": [{"name": "AggregateExpression", "size": 1616},{"name": "And", "size": 1027},{"name": "Arithmetic", "size": 3891},{"name": "Average", "size": 891},{"name": "BinaryExpression", "size": 2893},{"name": "Comparison", "size": 5103},{"name": "CompositeExpression", "size": 3677},{"name": "Count", "size": 781},{"name": "DateUtil", "size": 4141},{"name": "Distinct", "size": 933},{"name": "Expression", "size": 5130},{"name": "ExpressionIterator", "size": 3617},{"name": "Fn", "size": 3240},{"name": "If", "size": 2732},{"name": "IsA", "size": 2039},{"name": "Literal", "size": 1214},{"name": "Match", "size": 3748},{"name": "Maximum", "size": 843},{"name": "methods","children": [{"name": "add", "size": 593},{"name": "and", "size": 330},{"name": "average", "size": 287},{"name": "count", "size": 277},{"name": "distinct", "size": 292},{"name": "div", "size": 595},{"name": "eq", "size": 594},{"name": "fn", "size": 460},{"name": "gt", "size": 603},{"name": "gte", "size": 625},{"name": "iff", "size": 748},{"name": "isa", "size": 461},{"name": "lt", "size": 597},{"name": "lte", "size": 619},{"name": "max", "size": 283},{"name": "min", "size": 283},{"name": "mod", "size": 591},{"name": "mul", "size": 603},{"name": "neq", "size": 599},{"name": "not", "size": 386},{"name": "or", "size": 323},{"name": "orderby", "size": 307},{"name": "range", "size": 772},{"name": "select", "size": 296},{"name": "stddev", "size": 363},{"name": "sub", "size": 600},{"name": "sum", "size": 280},{"name": "update", "size": 307},{"name": "variance", "size": 335},{"name": "where", "size": 299},{"name": "xor", "size": 354},{"name": "_", "size": 264}]},{"name": "Minimum", "size": 843},{"name": "Not", "size": 1554},{"name": "Or", "size": 970},{"name": "Query", "size": 13896},{"name": "Range", "size": 1594},{"name": "StringUtil", "size": 4130},{"name": "Sum", "size": 791},{"name": "Variable", "size": 1124},{"name": "Variance", "size": 1876},{"name": "Xor", "size": 1101}]},{"name": "scale","children": [{"name": "IScaleMap", "size": 2105},{"name": "LinearScale", "size": 1316},{"name": "LogScale", "size": 3151},{"name": "OrdinalScale", "size": 3770},{"name": "QuantileScale", "size": 2435},{"name": "QuantitativeScale", "size": 4839},{"name": "RootScale", "size": 1756},{"name": "Scale", "size": 4268},{"name": "ScaleType", "size": 1821},{"name": "TimeScale", "size": 5833}]},{"name": "util","children": [{"name": "Arrays", "size": 8258},{"name": "Colors", "size": 10001},{"name": "Dates", "size": 8217},{"name": "Displays", "size": 12555},{"name": "Filter", "size": 2324},{"name": "Geometry", "size": 10993},{"name": "heap","children": [{"name": "FibonacciHeap", "size": 9354},{"name": "HeapNode", "size": 1233}]},{"name": "IEvaluable", "size": 335},{"name": "IPredicate", "size": 383},{"name": "IValueProxy", "size": 874},{"name": "math","children": [{"name": "DenseMatrix", "size": 3165},{"name": "IMatrix", "size": 2815},{"name": "SparseMatrix", "size": 3366}]},{"name": "Maths", "size": 17705},{"name": "Orientation", "size": 1486},{"name": "palette","children": [{"name": "ColorPalette", "size": 6367},{"name": "Palette", "size": 1229},{"name": "ShapePalette", "size": 2059},{"name": "SizePalette", "size": 2291}]},{"name": "Property", "size": 5559},{"name": "Shapes", "size": 19118},{"name": "Sort", "size": 6887},{"name": "Stats", "size": 6557},{"name": "Strings", "size": 22026}]},{"name": "vis","children": [{"name": "axis","children": [{"name": "Axes", "size": 1302},{"name": "Axis", "size": 24593},{"name": "AxisGridLine", "size": 652},{"name": "AxisLabel", "size": 636},{"name": "CartesianAxes", "size": 6703}]},{"name": "controls","children": [{"name": "AnchorControl", "size": 2138},{"name": "ClickControl", "size": 3824},{"name": "Control", "size": 1353},{"name": "ControlList", "size": 4665},{"name": "DragControl", "size": 2649},{"name": "ExpandControl", "size": 2832},{"name": "HoverControl", "size": 4896},{"name": "IControl", "size": 763},{"name": "PanZoomControl", "size": 5222},{"name": "SelectionControl", "size": 7862},{"name": "TooltipControl", "size": 8435}]},{"name": "data","children": [{"name": "Data", "size": 20544},{"name": "DataList", "size": 19788},{"name": "DataSprite", "size": 10349},{"name": "EdgeSprite", "size": 3301},{"name": "NodeSprite", "size": 19382},{"name": "render","children": [{"name": "ArrowType", "size": 698},{"name": "EdgeRenderer", "size": 5569},{"name": "IRenderer", "size": 353},{"name": "ShapeRenderer", "size": 2247}]},{"name": "ScaleBinding", "size": 11275},{"name": "Tree", "size": 7147},{"name": "TreeBuilder", "size": 9930}]},{"name": "events","children": [{"name": "DataEvent", "size": 2313},{"name": "SelectionEvent", "size": 1880},{"name": "TooltipEvent", "size": 1701},{"name": "VisualizationEvent", "size": 1117}]},{"name": "legend","children": [{"name": "Legend", "size": 20859},{"name": "LegendItem", "size": 4614},{"name": "LegendRange", "size": 10530}]},{"name": "operator","children": [{"name": "distortion","children": [{"name": "BifocalDistortion", "size": 4461},{"name": "Distortion", "size": 6314},{"name": "FisheyeDistortion", "size": 3444}]},{"name": "encoder","children": [{"name": "ColorEncoder", "size": 3179},{"name": "Encoder", "size": 4060},{"name": "PropertyEncoder", "size": 4138},{"name": "ShapeEncoder", "size": 1690},{"name": "SizeEncoder", "size": 1830}]},{"name": "filter","children": [{"name": "FisheyeTreeFilter", "size": 5219},{"name": "GraphDistanceFilter", "size": 3165},{"name": "VisibilityFilter", "size": 3509}]},{"name": "IOperator", "size": 1286},{"name": "label","children": [{"name": "Labeler", "size": 9956},{"name": "RadialLabeler", "size": 3899},{"name": "StackedAreaLabeler", "size": 3202}]},{"name": "layout","children": [{"name": "AxisLayout", "size": 6725},{"name": "BundledEdgeRouter", "size": 3727},{"name": "CircleLayout", "size": 9317},{"name": "CirclePackingLayout", "size": 12003},{"name": "DendrogramLayout", "size": 4853},{"name": "ForceDirectedLayout", "size": 8411},{"name": "IcicleTreeLayout", "size": 4864},{"name": "IndentedTreeLayout", "size": 3174},{"name": "Layout", "size": 7881},{"name": "NodeLinkTreeLayout", "size": 12870},{"name": "PieLayout", "size": 2728},{"name": "RadialTreeLayout", "size": 12348},{"name": "RandomLayout", "size": 870},{"name": "StackedAreaLayout", "size": 9121},{"name": "TreeMapLayout", "size": 9191}]},{"name": "Operator", "size": 2490},{"name": "OperatorList", "size": 5248},{"name": "OperatorSequence", "size": 4190},{"name": "OperatorSwitch", "size": 2581},{"name": "SortOperator", "size": 2023}]},{"name": "Visualization", "size": 16540}]}]};

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

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

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

var color = d3.scale.category20c();

var svg = d3.select("body").append("svg")
    .attr("width", width)
    .attr("height", height)
    .datum(flaredata)        // this line is modified according to provided solution here: https://stackoverflow.com/questions/17019572/d3-sunburst-doesnt-draw-with-inline-json
			                 // data() was replaced with datum() as suggested by Lars Kotthoff
    .append("g")
    .attr("transform", "translate(" + width / 2 + "," + (height / 2 + 10) + ")");

var partition = d3.layout.partition()
    .value(function(d) { return d.size; });

var arc = d3.svg.arc()
    .startAngle(function(d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x))); })
    .endAngle(function(d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x + d.dx))); })
    .innerRadius(function(d) { return Math.max(0, y(d.y)); })
    .outerRadius(function(d) { return Math.max(0, y(d.y + d.dy)); });

// d3.json("flare.json", function(error, root) {

  var g = svg.selectAll("g")
      .data(partition.nodes)        // removed "root" argument here
    .enter().append("g");

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

  var text = g.append("text")
    .attr("transform", function(d) { return "rotate(" + computeTextRotation(d) + ")"; })
    .attr("x", function(d) { return y(d.y); })
    .attr("dx", "6") // margin
    .attr("dy", ".35em") // vertical-align
    .text(function(d) { return d.name; });

  function click(d) {
    // fade out all text elements
    text.transition().attr("opacity", 0);

    path.transition()
      .duration(750)
      .attrTween("d", arcTween(d))
      .each("end", function(e, i) {
          // check if the animated element's data e lies within the visible angle span given in d
          if (e.x >= d.x && e.x < (d.x + d.dx)) {
            // 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.y); });
          }
      });
  }
// });

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) {
  return (x(d.x + d.dx / 2) - Math.PI / 2) / Math.PI * 180;
}

</script>


Related Query