DevExtreme v24.1 is now available.

Explore our newest features/capabilities and share your thoughts with us.

Your search did not match any results.

JavaScript/jQuery Charts - Drill Down

If you bind a TreeMap to a data source with a hierarchical structure, you can enable drill-down and drill-up functionality:

  • "Drill down" means navigate to a more detailed view.
  • "Drill up" means navigate back up a level.
www.wikipedia.org
Backend API
$(() => { $('#treemap').dxTreeMap({ dataSource: citiesPopulation, size: { height: 440, }, title: { text: 'The Most Populated Cities by Continents', placeholderSize: 80, }, colorizer: { palette: 'soft', }, interactWithGroup: true, maxDepth: 2, onClick(e) { e.node.drillDown(); }, onDrill(e) { const markup = $('#drill-down-title').empty(); let node; for (node = e.node.getParent(); node; node = node.getParent()) { markup.prepend(' > ').prepend($('<span />') .addClass('link') .text(node.label() || 'All Continents') .data('node', node) .on('dxclick', onLinkClick)); } if (markup.children().length) { markup.append(e.node.label()); } }, }); function onLinkClick(e) { $(e.target).data('node').drillDown(); } });
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> <head> <title>DevExtreme Demo</title> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script>window.jQuery || document.write(decodeURIComponent('%3Cscript src="js/jquery.min.js"%3E%3C/script%3E'))</script> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/24.1.7/css/dx.light.css" /> <script src="js/dx.all.js"></script> <script src="data.js"></script> <link rel="stylesheet" type="text/css" href="styles.css" /> <script src="index.js"></script> </head> <body class="dx-viewport"> <div class="demo-container"> <div id="treemap"></div> <div id="drill-down-title"></div> </div> </body> </html>
#drill-down-title { position: absolute; top: 50px; height: 36px; width: 100%; text-align: center; } .link { color: #337ab7; text-decoration: underline; cursor: pointer; }
const citiesPopulation = [{ name: 'Africa', items: [{ name: 'Nigeria', items: [{ name: 'Lagos', value: 21324000, }, { name: 'Kano', value: 3626068, }, { name: 'Ibadan', value: 3200000, }, { name: 'Abuja', value: 3000000, }, { name: 'Kaduna', value: 1652844, }, { name: 'Port Harcourt', value: 1320214, }, { name: 'Aba', value: 1300000, }, { name: 'Ogbomosho', value: 1200000, }, { name: 'Maiduguri', value: 1197497, }], }, { name: 'Egypt', items: [{ name: 'Cairo', value: 9278441, }, { name: 'Alexandria', value: 4546231, }, { name: 'Giza', value: 4239988, }, { name: 'Shubra El-Kheima', value: 3072951, }, { name: 'Port Said', value: 1607353, }, { name: 'Suez', value: 1347352, }], }, { name: 'Congo', items: [{ name: 'Kinshasa', value: 9735000, }, { name: 'Lubumbashi', value: 1786397, }, { name: 'Mbuji-Mayi', value: 1680991, }, { name: 'Kananga', value: 1061181, }, { name: 'Bukavu', value: 1012053, }, { name: 'Kisangani', value: 935977, }], }, { name: 'Morocco', items: [{ name: 'Casablanca', value: 3359818, }, { name: 'Fès', value: 1112072, }, { name: 'Tangier', value: 947952, }, { name: 'Marrakech', value: 928850, }, { name: 'Salé', value: 920403, }], }], }, { name: 'Asia', items: [{ name: 'China', items: [{ name: 'Shanghai', value: 24256800, }, { name: 'Beijing', value: 21516000, }, { name: 'Chongqing', value: 18384100, }, { name: 'Chengdu', value: 17677122, }, { name: 'Tianjin', value: 15200000, }, { name: 'Guangzhou', value: 13080500, }, { name: 'Shenzhen', value: 10630000, }], }, { name: 'Pakistan', items: [{ name: 'Karachi', value: 23500000, }, { name: 'Faisalabad', value: 6418745, }, { name: 'Lahore', value: 6318745, }, { name: 'Rawalpindi', value: 3363911, }, { name: 'Hyderabad', value: 3429471, }, { name: 'Multan', value: 2050000, }], }, { name: 'India', items: [{ name: 'Delhi', value: 16787941, }, { name: 'Mumbai', value: 12478447, }, { name: 'Bengaluru', value: 8425970, }, { name: 'Hyderabad', value: 7749334, }, { name: 'Chennai', value: 7088000, }, { name: 'Ahmedabad', value: 5577940, }], }, { name: 'Japan', items: [{ name: 'Tokyo', value: 9262046, }, { name: 'Yokohama', value: 3697894, }, { name: 'Osaka', value: 2668586, }, { name: 'Nagoya', value: 2283289, }, { name: 'Sapporo', value: 1918096, }], }], }, { name: 'Europe', items: [{ name: 'Turkey', items: [{ name: 'Istanbul', value: 14160467, }, { name: 'Ankara', value: 4470800, }, { name: 'İzmir', value: 3276815, }, { name: 'Bursa', value: 1957247, }, { name: 'Adana', value: 1717473, }], }, { name: 'Russia', items: [{ name: 'Moscow', value: 12197596, }, { name: 'Saint Petersburg', value: 5191690, }, { name: 'Novosibirsk', value: 1473754, }, { name: 'Yekaterinburg', value: 1428042, }], }, { name: 'United Kingdom', items: [{ name: 'London', value: 8538689, }, { name: 'Birmingham', value: 1101360, }, { name: 'Glasgow', value: 599650, }, { name: 'Liverpool', value: 473073, }], }, { name: 'Germany', items: [{ name: 'Berlin', value: 3517424, }, { name: 'Hamburg', value: 1686100, }, { name: 'Munich', value: 1185400, }, { name: 'Cologne', value: 1046680, }, { name: 'Frankfurt', value: 717624, }], }, { name: 'France', items: [{ name: 'Paris', value: 2240621, }, { name: 'Marseille', value: 852516, }, { name: 'Lyon', value: 500715, }, { name: 'Toulouse', value: 461190, }], }], }, { name: 'North America', items: [{ name: 'Mexico', items: [{ name: 'Mexico City', value: 8874724, }, { name: 'Ecatepec de Morelos', value: 1742023, }, { name: 'Puebla', value: 1508707, }, { name: 'Guadalajara', value: 1506359, }, { name: 'Juárez', value: 1409987, }, { name: 'Tijuana', value: 1399282, }, { name: 'León', value: 1281434, }], }, { name: 'United States', items: [{ name: 'New York City', value: 8550405, }, { name: 'Los Angeles', value: 3884307, }, { name: 'Chicago', value: 2722389, }, { name: 'Houston', value: 2296224, }, { name: 'Philadelphia', value: 1567442, }, { name: 'Phoenix', value: 1563025, }, { name: 'San Antonio', value: 1469845, }, { name: 'San Diego', value: 1394928, }], }, { name: 'Canada', items: [{ name: 'Toronto', value: 2808503, }, { name: 'Montreal', value: 1731245, }, { name: 'Calgary', value: 1096833, }, { name: 'Ottawa', value: 956710, }, { name: 'Edmonton', value: 895000, }, { name: 'Mississauga', value: 713443, }], }, { name: 'Cuba', items: [{ name: 'Havana', value: 2135498, }, { name: 'Santiago de Cuba', value: 425851, }, { name: 'Camagüey', value: 305845, }], }], }, { name: 'South America', items: [{ name: 'Brazil', items: [{ name: 'São Paulo', value: 11895893, }, { name: 'Rio de Janeiro', value: 6429923, }, { name: 'Salvador', value: 2902927, }, { name: 'Brasília', value: 2914830, }, { name: 'Fortaleza', value: 2591188, }, { name: 'Belo Horizonte', value: 2513451, }, { name: 'Manaus', value: 2094391, }], }, { name: 'Peru', items: [{ name: 'Lima', value: 8693387, }, { name: 'Callao', value: 1010315, }, { name: 'Arequipa', value: 869351, }, { name: 'Trujillo', value: 788236, }, { name: 'Chiclayo', value: 600440, }], }, { name: 'Colombia', items: [{ name: 'Bogotá', value: 7776845, }, { name: 'Medellín', value: 2441123, }, { name: 'Cali', value: 2400653, }, { name: 'Barranquilla', value: 1214253, }, { name: 'Cartagena', value: 959594, }], }, { name: 'Chile', items: [{ name: 'Santiago', value: 5507282, }, { name: 'Puente Alto', value: 610118, }, { name: 'Maipú', value: 468390, }], }, { name: 'Venezuela', items: [{ name: 'Caracas', value: 3289886, }, { name: 'Maracaibo', value: 1653211, }, { name: 'Barquisimeto', value: 1116182, }, { name: 'Valencia', value: 901900, }, { name: 'Ciudad Guayana', value: 877547, }], }], }];

In this demo, you can click/tap a group of TreeMap tiles to drill down. Once you go down a level, navigation links appear at the top of the TreeMap. Use them to drill back up. To implement this technique, follow the steps below:

  1. Set the interactWithGroup property to true to force the control to hot-track entire groups instead of individual items.

  2. Call the node.drillDown method in the TreeMap onClick handler.

  3. To enable drill-up functionality, generate links in the onDrill handler. Call the node.drillDown method on link clicks. Inspect the code below for implementation details.