Help converting a flat JSON file into hierarchical JSON schema to use with d3.treemap?
New here? Learn about Bountify and follow @bountify to get notified of new bounties! x

Summary of bounty - DEADLINE ISSUE

My flat JSON dataset isn't structured with children fields in the proper format it needs to be for d3.hierarchy to read it and set the drilldown layers for d3.treemap.

Could someone please advise me of a swift way to convert the current JSON structure here into one that follows the exact same structure as this JSON hierarchical file? While I realize the example has more layers of data, the two datasets both include dollar amounts for the budget for two consecutive years broken down my line item (column 4) and by the top-level, by Department (column 1).

Ideally, the best solution will not only provide me the properly formatted JSON file I need, but also explain how that task was completed so as to limit redundancy in the future.

UPDATE 7/17

While I laud all three of your for the each strong solution, perhaps I should have explained myself better, and provided you with the precisely pertinent JSON fields. Here is the CodePen for the treemap we'd like to build that I've put together. If you look at the JS, you'll see the treemap is pulling in data from this JSON file, which is the same I shared with you all at the beginning.

NOTE: THE PREVIOUS VERSION OF MY JSON HAD SOME DECIMAL POINTS WHERE IT SHOULD HAVE HAD COMMAS. THIS IS FIXED, AND THE PCT CHANGE REMOVED IN THIS UPDATED SOURCE JSON.

If you look closely at the JSON being used by the working CodePen example, you'll notice that, peculiarly, the children come before the parent, which is why the JSON starts off with so many openinvg children[] brackets. This is programmatically used to calculate the percent change in the JS. I've tried everything in terms of shoehorning the JSON schema you all have provided in as the data source, but the results keep not binding data to SVG.

Is this a common structure -- for the children to come before the parent? Also, keep in mind that my dataset only has two levels of depth; the example dataset had three.

Whoever can look at the CodePen and figure it out first to get that treemap to work with my data wins the bounty!

hi, i have a good experience working with d3 charts also making them interactive, can you send me the right chart you want to implement? https://github.com/d3/d3/wiki/Gallery every chart has it's own kind of hierarchy data, so choosing the right one, will make it easier to build the right data format, waiting for you to start on it
Houcem B. A. Chlegou 5 days ago
hello paragon, what do you mean by "children come before the parent "?
Codeword 3 days ago
i updated my bounty, please check :)
Houcem B. A. Chlegou 3 days ago
awarded to Codeword

Crowdsource coding tasks.

3 Solutions

Winning solution

100% working code
1.output converter json file here https://pastebin.com/8STbmqYu
2. you can download the script as well as json output from https://github.com/Tech-engine/json

/*************************************** python code start ***************************************/*

import json

# opening the given unformated json file and creating a list out of it and storing it in data

with open('test.json') as data_file:
    data = json.load(data_file)

# creating a set to all unique departments in json file

set_file = set()

# str is a string format of final formatted json

str = '{ "name":"Sacramento Budget 2015/16","children":['

# creating a dictionary whose keys will be department names and corresponding value will be an array of all children of respective department

sectionJSON ={}

# function to save the final json file

def save_json(path, data):
    with open(path, 'w') as f:
        f.write(data)

# loop through each department store in data

for ele in data:
    set_file.add(ele['department'])
    if sectionJSON.has_key(ele['department']):
sectionJSON[ele['department']].append('{"name":"'+ele['spend_type']+'","children":[{"amount2016":"'+ele['amount2016']+'","amount2017":"'+ele['amount2017']+'","pct_change":"'+repr(ele['pct_change'])+'"}]}')
    else:
        sectionJSON[ele['department']] = ['{"name":"'+ele['spend_type']+'","children":[{"amount2016": "'+ele['amount2016']+'","amount2017":"'+ele['amount2017']+'","pct_change":"'+repr(ele['pct_change'])+'"}]}']

# creating the final string version of json output

for department in set_file:
    str = str+'{"name":"'+department+'","children":['+ ','.join(sectionJSON[department])+']},'

# remove the last extra comma and preparing the fnal json string

str = str[:-1]
str = str+']}'

# converting the string to json and save the final formated output to a file "t.json"

dat = json.loads(str)
save_json('t.json',json.dumps(dat))

/********************************************* code ends here ***************************************/

This is my working solution.It automatically saves the formatted JSON in a new file.Thank you

See updated bounty description! Thanks. :)
paragon21 3 days ago
Hey here is the properply formated json, I have also modified the javascript file in codepen to accommodate ptc_change, without which percentage change will not show when mouse is hover over the divs.Thank you Here is the codepen link https://codepen.io/codeword/pen/vZwBMy?editors=1010 and here is the json file https://raw.githubusercontent.com/Tech-engine/json/master/finaljson.json
Codeword 3 days ago
Super! Very, very close here. The only problem at this point is that the Percent Change tooltip displays a null value only on the top level. On the second-level, however, the tooltip looks perfect! In addition, although not in the specs, any solution you may have for fixing the text wrapping problem that occurs in the smaller buckets when the label won't fit (i.e. hiding the label except on mouseover for those buckets) would be much appreciated.
paragon21 3 days ago
Hey the percentage NaN problem is solved, check again in the codpen link https://codepen.io/codeword/pen/vZwBMy?editors=1010
Codeword 3 days ago
Hey I have also solved the problem of text wrapping see codepen, link above.Thank you
Codeword 3 days ago
I have set like this if the div size decreases below 130 then text in div hides otherwise show up, You can modify this 130 value as per you need.
Codeword 3 days ago
@codeword Nice work. Very close to winning the Bounty before the other poster finishes. Just one more tiny thing: Do you know of a quick way to limit the number of decimal points in the value generated programmatically for pct_change? So that it is 12.34% not 12.341368979%...?
paragon21 3 days ago
offcourse I can do this, THANK YOU
Codeword 3 days ago
I have fixed that, recheck again codepan.Thank you
Codeword 3 days ago
Sawweeeett! Congrats.Extra $25 tip to make it as responsive as possible (within reason).
paragon21 3 days ago
Okay let me try , and Thank you for selecting my answer.
Codeword 3 days ago

Hi, being the weekend means that I only quickly looked at the desired output needed. But if I understand correct, then this is what you need.

Updated

var request = new XMLHttpRequest();
request.open('GET', 'http://cvlassets.s3.amazonaws.com/savannah-expenses-2016-v-2017.json', true);

request.onload = function() {
  if (request.status >= 200 && request.status < 400) {
    // Success!
    var data = JSON.parse(request.responseText).undefined.undefined;

    // Build departments list first
    var departments = {};
    data.forEach(function(item) {
      if (!(item.parent in departments)) {
       departments[item.parent] = [];
      }
      departments[item.parent].push({
        "name": item.children,
        "amount2016": parseInt(item.amount2016.replace(/[,\.]/g, "")),
        "amount2017": parseInt(item.amount2017.replace(/[,\.]/g, ""))
      });
    });

    // Build hierarchy
    var hierarchy = {"name": "Savannah Expenses 2016 vs 2017", "children": []};
    for (var department in departments) {
      hierarchy.children.push({
        "name": department,
        "children": departments[department]
      })
    }

    // small code to display hierarchy
    var pre = document.createElement("pre");
    pre.innerText = JSON.stringify(hierarchy, null, 2);
    document.body.innerText = "";
    document.body.appendChild(pre);
  } else {
    console.log("An error occurred fetching the json");
  }
};

request.onerror = function() {
  console.log("Failed to connect to URI");
};

request.send();

The output of this hierachy is:

{
  "name": "city-of-savannah-expenses-16-17-1",
  "children": [
    {
      "name": "General Administration",
      "children": [
        {
          "name": "Mayor and Aldermen",
          "amount2016": 786422,
          "amount2017": 793356
        },
        {
          "name": "Clerk of Council",
          "amount2016": 361324,
          "amount2017": 276889
        },
        {
          "name": "Office of City Manager",
          "amount2016": 1209969,
          "amount2017": 1606710
        },
        {
          "name": "Public Information Office",
          "amount2016": 513786,
          "amount2017": 503195
        },
        {
          "name": "Auditing",
          "amount2016": 631992,
          "amount2017": 531651
        },
        {
          "name": "Finance",
          "amount2016": 1164940,
          "amount2017": 1145036
        },
        {
          "name": "Legal",
          "amount2016": 795954,
          "amount2017": 1006830
        }
      ]
    },
    {
      "name": "Leisure Services",
      "children": [
        {
          "name": "Leisure Services Bureau Chief",
          "amount2016": 590207,
          "amount2017": 783982
        },
        {
          "name": "Cultural Affairs",
          "amount2016": 750757,
          "amount2017": 771283
        },
        {
          "name": "Youth Services",
          "amount2016": 4041536,
          "amount2017": 4249808
        },
        {
          "name": "Athletic Services",
          "amount2016": 1124347,
          "amount2017": 1214985
        },
        {
          "name": "Senior Services",
          "amount2016": 2116292,
          "amount2017": 2186295
        },
        {
          "name": "Therapeutic Recreation",
          "amount2016": 248546,
          "amount2017": 256972
        },
        {
          "name": "Film Services",
          "amount2016": 206213,
          "amount2017": 0
        },
        {
          "name": "Building and Grounds Maintenance",
          "amount2016": 4107713,
          "amount2017": 4429044
        },
        {
          "name": "Building and Electrical Maintenance",
          "amount2016": 1597595,
          "amount2017": 1542338
        },
        {
          "name": "Park and Tree",
          "amount2016": 5574571,
          "amount2017": 6472332
        },
        {
          "name": "City Cemeteries",
          "amount2016": 1817879,
          "amount2017": 1802576
        },
        {
          "name": "Civic Center Operations",
          "amount2016": 3264480,
          "amount2017": 3229143
        },
        {
          "name": "Civic Center Concessions",
          "amount2016": 379655,
          "amount2017": 370547
        }
      ]
    },
    {
      "name": "Police Bureau",
      "children": [
        {
          "name": "Police Chief",
          "amount2016": 1981333,
          "amount2017": 2144735
        },
        {
          "name": "Patrol and Special Operations Division",
          "amount2016": 39535291,
          "amount2017": 39585734
        },
        {
          "name": "Investigations Division",
          "amount2016": 7576113,
          "amount2017": 7735201
        },
        {
          "name": "SARIC (Savannah Area Regional Intelligence Center)",
          "amount2016": 1345692,
          "amount2017": 1432447
        },
        {
          "name": "Traffic Unit",
          "amount2016": 1969301,
          "amount2017": 1901266
        },
        {
          "name": "Marine Patrol",
          "amount2016": 716640,
          "amount2017": 0
        },
        {
          "name": "Mounted Patrol",
          "amount2016": 646587,
          "amount2017": 599898
        },
        {
          "name": "Canine Unit",
          "amount2016": 575966,
          "amount2017": 572895
        },
        {
          "name": "Animal Control",
          "amount2016": 928035,
          "amount2017": 0
        },
        {
          "name": "Administrative Services Division",
          "amount2016": 2593783,
          "amount2017": 2786753
        },
        {
          "name": "Information Management",
          "amount2016": 1515169,
          "amount2017": 1471425
        },
        {
          "name": "Training and Recruitment",
          "amount2016": 1368943,
          "amount2017": 1683355
        },
        {
          "name": "Counter Narcotics Team (CNT)",
          "amount2016": 2227376,
          "amount2017": 2374683
        },
        {
          "name": "Office of Professional Standards (OPS)",
          "amount2016": 883139,
          "amount2017": 809420
        },
        {
          "name": "Savannah Impact Program (SIP)",
          "amount2016": 1272659,
          "amount2017": 1293674
        },
        {
          "name": "CrimeStoppers",
          "amount2016": 233281,
          "amount2017": 203962
        },
        {
          "name": "Savannah Impact Work Ventures",
          "amount2016": 308890,
          "amount2017": 367250
        },
        {
          "name": "Undercover Narcotic Investigation Team (U.N.I.T)",
          "amount2016": 844562,
          "amount2017": 1132413
        },
        {
          "name": "Communications Center",
          "amount2016": 6903098,
          "amount2017": 6742419
        }
      ]
    },
    {
      "name": "Fire and Emergency Services Bureau",
      "children": [
        {
          "name": "Fire Logistics",
          "amount2016": 7429902,
          "amount2017": 7388365
        },
        {
          "name": "City-Wide Emergency Planning",
          "amount2016": 188012,
          "amount2017": 178326
        },
        {
          "name": "Fire Operations",
          "amount2016": 21489179,
          "amount2017": 21934937
        },
        {
          "name": "Hazardous Material Team",
          "amount2016": 545142,
          "amount2017": 573985
        }
      ]
    },
    {
      "name": "ACM, Administrative and Community Services",
      "children": [
        {
          "name": "ACM, Administrative and Community Services",
          "amount2016": 349292,
          "amount2017": 191361
        }
      ]
    },
    {
      "name": "Management Services Bureau",
      "children": [
        {
          "name": "Chief",
          "amount2016": 376187,
          "amount2017": 321801
        },
        {
          "name": "Research and Budget",
          "amount2016": 679161,
          "amount2017": 681572
        },
        {
          "name": "Human Resources",
          "amount2016": 1814202,
          "amount2017": 1790682
        },
        {
          "name": "Risk Management",
          "amount2016": 838273,
          "amount2017": 834494
        },
        {
          "name": "Purchasing",
          "amount2016": 477413,
          "amount2017": 466464
        },
        {
          "name": "Revenue",
          "amount2016": 1596845,
          "amount2017": 1498402
        },
        {
          "name": "Recorder's Court of Chatham County",
          "amount2016": 2393428,
          "amount2017": 2311847
        },
        {
          "name": "Research Library and Municipal Archives",
          "amount2016": 234103,
          "amount2017": 239508
        },
        {
          "name": "Inventory Management",
          "amount2016": 352505,
          "amount2017": 344709
        },
        {
          "name": "Mail and Municipal Building Services",
          "amount2016": 782042,
          "amount2017": 808764
        },
        {
          "name": "Utility Services",
          "amount2016": 1849064,
          "amount2017": 2206005
        },
        {
          "name": "Mobility and Parking Administration & Enforcement",
          "amount2016": 3709500,
          "amount2017": 3584045
        },
        {
          "name": "Parking Garages and Lots",
          "amount2016": 5070087,
          "amount2017": 6154380
        },
        {
          "name": "Parking Interdepartmental",
          "amount2016": 3243843,
          "amount2017": 2388867
        },
        {
          "name": "Tourism Management and Ambassadorship Program",
          "amount2016": 1299792,
          "amount2017": 1516273
        },
        {
          "name": "Vehicle Maintenance",
          "amount2016": 5616046,
          "amount2017": 5614534
        },
        {
          "name": "Information Technology",
          "amount2016": 6563426,
          "amount2017": 6699876
        }
      ]
    },
    {
      "name": "Community and Economic Development Bureau",
      "children": [
        {
          "name": "Community and Economic Development Bureau Chief",
          "amount2016": 385801,
          "amount2017": 383757
        },
        {
          "name": "Community Services",
          "amount2016": 345826,
          "amount2017": 580244
        },
        {
          "name": "Citizen Office",
          "amount2016": 1382545,
          "amount2017": 0
        },
        {
          "name": "River Street Hospitality Center",
          "amount2016": 142499,
          "amount2017": 131558
        },
        {
          "name": "311 Call Service Center",
          "amount2016": 207686,
          "amount2017": 207112
        },
        {
          "name": "Real Property Services",
          "amount2016": 497407,
          "amount2017": 488422
        },
        {
          "name": "Step Up Program",
          "amount2016": 290123,
          "amount2017": 293775
        },
        {
          "name": "Economic Development",
          "amount2016": 538936,
          "amount2017": 589299
        },
        {
          "name": "Savannah Development and Renewal Authority (SDRA)",
          "amount2016": 275000,
          "amount2017": 275000
        },
        {
          "name": "Entrepreneurial Center",
          "amount2016": 432980,
          "amount2017": 440712
        },
        {
          "name": "Community Planning and Development",
          "amount2016": 826823,
          "amount2017": 809571
        },
        {
          "name": "Housing and Housing Project Delivery",
          "amount2016": 1453585,
          "amount2017": 1444218
        },
        {
          "name": "Advancement Center at Moses Jackson",
          "amount2016": 323553,
          "amount2017": 342527
        },
        {
          "name": "Coastal Workforce Services",
          "amount2016": 5077608,
          "amount2017": 5228866
        },
        {
          "name": "YouthBuild",
          "amount2016": 488700,
          "amount2017": 550399
        }
      ]
    },
    {
      "name": "ACM, Development and Environmental Services  $",
      "children": [
        {
          "name": "ACM, Development and Environmental Services  $",
          "amount2016": 338739,
          "amount2017": 353307
        }
      ]
    },
    {
      "name": "Public Works and Water Resources Bureau",
      "children": [
        {
          "name": "Public Works and Water Resources Bureau Chief  $",
          "amount2016": 718467,
          "amount2017": 696140
        },
        {
          "name": "Traffic Engineering",
          "amount2016": 7008750,
          "amount2017": 7309917
        },
        {
          "name": "Stormwater Management",
          "amount2016": 5991535,
          "amount2017": 6471179
        },
        {
          "name": "Streets Maintenance",
          "amount2016": 5404305,
          "amount2017": 5313053
        },
        {
          "name": "Development Services",
          "amount2016": 4411669,
          "amount2017": 4459936
        },
        {
          "name": "Environmental Services and Sustainability Division",
          "amount2016": 397296,
          "amount2017": 414455
        },
        {
          "name": "Water and Sewer Director",
          "amount2016": 524834,
          "amount2017": 527054
        },
        {
          "name": "Water and Sewer Planning & Engineering",
          "amount2016": 1400466,
          "amount2017": 1449772
        },
        {
          "name": "Water Supply and Treatment",
          "amount2016": 6332429,
          "amount2017": 6375404
        },
        {
          "name": "Water Distribution",
          "amount2016": 4623068,
          "amount2017": 5001566
        },
        {
          "name": "Water Interdepartmental",
          "amount2016": 11796265,
          "amount2017": 10579722
        },
        {
          "name": "Sewer Maintenance",
          "amount2016": 3676325,
          "amount2017": 3848165
        },
        {
          "name": "Lift Stations Maintenance",
          "amount2016": 4799528,
          "amount2017": 5010897
        },
        {
          "name": "President Street Plant",
          "amount2016": 7277336,
          "amount2017": 6990675
        },
        {
          "name": "Regional Plants",
          "amount2016": 2384929,
          "amount2017": 2289773
        },
        {
          "name": "Sewer Interdepartmental",
          "amount2016": 21621247,
          "amount2017": 23444219
        },
        {
          "name": "I&D Water Plant",
          "amount2016": 8507686,
          "amount2017": 7619510
        }
      ]
    },
    {
      "name": "Sanitation Bureau",
      "children": [
        {
          "name": "Sanitation Bureau Chief  $",
          "amount2016": 651754,
          "amount2017": 666762
        },
        {
          "name": "Residential Refuse",
          "amount2016": 8066375,
          "amount2017": 8009129
        },
        {
          "name": "Refuse Disposal",
          "amount2016": 6207779,
          "amount2017": 6650250
        },
        {
          "name": "Street Cleaning",
          "amount2016": 2905195,
          "amount2017": 2849227
        },
        {
          "name": "Commercial Refuse",
          "amount2016": 1725189,
          "amount2017": 1739255
        },
        {
          "name": "Recycling and Litter Services",
          "amount2016": 2690141,
          "amount2017": 2505828
        },
        {
          "name": "Property Maintenance Enforcement",
          "amount2016": 2280278,
          "amount2017": 2357542
        },
        {
          "name": "Sanitation Interdepartmental",
          "amount2016": 4105876,
          "amount2017": 5220689
        }
      ]
    },
    {
      "name": "General Fund Interdepartmental",
      "children": [
        {
          "name": "Tourism and Promotion",
          "amount2016": 2156843,
          "amount2017": 2152409
        },
        {
          "name": "Planning and Development",
          "amount2016": 1632533,
          "amount2017": 1573972
        },
        {
          "name": "Human Services",
          "amount2016": 856034,
          "amount2017": 623150
        },
        {
          "name": "Cultural Services",
          "amount2016": 764320,
          "amount2017": 764320
        },
        {
          "name": "City Dues/Memberships",
          "amount2016": 236406,
          "amount2017": 226846
        },
        {
          "name": "Transfer to Other Funds",
          "amount2016": 10522220,
          "amount2017": 11271906
        },
        {
          "name": "Services from Other Funds",
          "amount2016": 7649840,
          "amount2017": 7621964
        },
        {
          "name": "Other Expenses/Contributions",
          "amount2016": 1333261,
          "amount2017": 1696079
        },
        {
          "name": "Contingency",
          "amount2016": 838617,
          "amount2017": 250000
        }
      ]
    },
    {
      "name": "Other Expenditures",
      "children": [
        {
          "name": "Grant Fund",
          "amount2016": 2820464,
          "amount2017": 11540862
        },
        {
          "name": "Community Development Program Costs/Carryforward",
          "amount2016": 7481442,
          "amount2017": 4710772
        },
        {
          "name": "Hotel/Motel Tax Fund",
          "amount2016": 8862343,
          "amount2017": 9287439
        },
        {
          "name": "Computer Purchase Fund",
          "amount2016": 721295,
          "amount2017": 721295
        },
        {
          "name": "Vehicle Purchase Fund",
          "amount2016": 6492400,
          "amount2017": 10587030
        },
        {
          "name": "Radio Replacement Fund",
          "amount2016": 1338000,
          "amount2017": 1338000
        },
        {
          "name": "Recorder's Court Technology Fund",
          "amount2016": 100000,
          "amount2017": 60000
        }
      ]
    }
  ]
}
See updated bounty description! Thanks. :)
paragon21 3 days ago
@paragon21, I updated my answer and tested it with the codePen (as a raw object and not a json uri). The only problem was the values of "amount2016" and "amount2017" having been strings and not integers which is why the update has the parseInt and the removal of all commas(,) and dots(.) in amounts - also updated the code overall to be cleaner. Regarding your update question, it does not matter if children are before/after name as it is just a data structure - see previous sentence for the issue. Also the codePen uses 2015 and 2016 which will have to be updated to 2016 and 2017.
chesedo 3 days ago
Working codePen example https://codepen.io/chesedo/pen/mwgvyJ
chesedo 3 days ago
@chesedo Thanks a billion for this! This is almost perfect. You have a quick way to add the Percent Change into the tooltip? Not necessary per se, but would be nice to have. In addition, although not in the specs, any solution you may have for fixing the text wrapping problem that occurs in the smaller buckets when the label won't fit (i.e. hiding the label except on mouseover for those buckets) would be much appreciated. Very close here!
paragon21 3 days ago
@paragon21 update (will make it smarter in a bit)
chesedo 3 days ago

Hi there,

here is my bounty, following the data hierarchy you providing in Github,

link: https://github.com/d3/d3-hierarchy/blob/master/test/data/flare.json

i made a function, that will build them, in hierarchy schema.

Difference Between my solution and chesedo solution: values are well described, and respecting the right flare data tree format

Download all files from here:
https://drive.google.com/open?id=0B2wCjF-lIcvpdzh5WGE5WUJDMEU

-------UPDATE in 07/17------

Hi again, as i promised, here is my bounty again live! :)

i created another function, that will convert this new data json following this link ( http://cvlassets.s3.amazonaws.com/savannah-expenses-2016-v-2017.json )

i used highcharts instead of D3js for his powerful functions. hope you like it ;)

link: http://orbitcoins.website/demos/demo%20-%20hierarchical_data/convert_to_hierarchical_highchart.html

another link from JsFiddle: http://jsfiddle.net/c6a5d911/2/

Hope you like it, and use my approach.

i will stay close, waiting for your comments, and if OK, i will send you full project files in Drive ( waiting if there are any further modifications).

-----Update for files drive link--
link: https://drive.google.com/open?id=0B2wCjF-lIcvpQ3pnNjAyOVMyMXM

See updated bounty description! Thanks. :)
paragon21 3 days ago
Hi there, i have another approach, i will submit it after 10 hours, please wait till i have time and work on it. don't reward it till i submit :)
Houcem B. A. Chlegou 3 days ago
We can wait :) That said, we're super close between @codeword and @chesedo's latest contributions.
paragon21 3 days ago
hi there, i'm just starting, hope delivering in the next 2 hours :)
Houcem B. A. Chlegou 3 days ago
:) No problem, will wait. Something as responsive (as possible) and a text wrapping fix for the smaller buckets would be a huge advantage.
paragon21 3 days ago
trust me, you will be amazed! :p
Houcem B. A. Chlegou 3 days ago
i updated my bounty, please check :)
Houcem B. A. Chlegou 3 days ago
Just checking in here as it's been about two hours. :)
paragon21 3 days ago
very punctual no? :p
Houcem B. A. Chlegou 3 days ago
Hi! I just saw your update-- thanks so much for the effort here, and I appreciate you thinking outside of the box. That said, Highcharts.js isn't the library I specified, and adds another layer of abstraction. I will still tip you very generously for this, though. Thank you!!!
paragon21 3 days ago
i can delete it if you want, and use only two levels, it's possible,
Houcem B. A. Chlegou 3 days ago
thanks for the tip :) the layer you spoke about, can deleted, and values, can be added in tooltip . i will add the files in drive and give you link here. this is my email: nicolastsue@gmail.com if you need more further help.
Houcem B. A. Chlegou 3 days ago
View Timeline