{"id":20941,"date":"2021-07-20T08:46:45","date_gmt":"2021-07-20T07:46:45","guid":{"rendered":"https:\/\/www.highcharts.com\/blog\/?p=20941"},"modified":"2026-01-13T11:20:40","modified_gmt":"2026-01-13T11:20:40","slug":"interactive-small-multiples-with-dumbbell-charts","status":"publish","type":"post","link":"https:\/\/www.highcharts.com\/blog\/tutorials\/interactive-small-multiples-with-dumbbell-charts\/","title":{"rendered":"Interactive small multiples with dumbbell charts"},"content":{"rendered":"<p>In the previous articles, I covered <a href=\"https:\/\/www.highcharts.com\/blog\/tutorials\/why-you-need-to-start-using-dumbbell-charts\/\" target=\"_blank\" rel=\"noopener\">why you need to start using Dumbbell charts<\/a> and <a href=\"https:\/\/www.highcharts.com\/blog\/tutorials\/small-multiple-with-boxplot-jitter-scatter\/\" target=\"_blank\" rel=\"noopener\">small-multiples (with boxplot jitter scatter)<\/a>.<br \/>\nIn this article, I will show you why and how to use small multiples with dumbbell charts to create effective charts.<\/p>\n<p>Let\u2019s get started.<\/p>\n<p>The challenge is to visualize and compare the <a href=\"https:\/\/www.comfsm.fm\/~dleeling\/statistics\/s83\/resting_heart_rate\" target=\"_blank\" rel=\"noopener\">men\u2019s and women\u2019s resting heart rates<\/a> from ages 18 to 55 (see table below). As you can see, any reader will experience challenges to easily interpret insights from the tables below.<\/p>\n<p class=\"text-center\"><b>Men resting heart rate &#x1F499;<\/b><\/p>\n<table class=\"table table-bordered table-hover\">\n<tr>\n<th>Age<\/th>\n<th>18 -25<\/th>\n<th>26 -35<\/th>\n<th>36 -45<\/th>\n<th>46 &#8211; 55<\/th>\n<th>56 -65<\/th>\n<th>65+<\/th>\n<\/tr>\n<tr>\n<td>Athlete<\/td>\n<td>49-55<\/td>\n<td>49-54<\/td>\n<td>50-56<\/td>\n<td>50-57<\/td>\n<td>51-56<\/td>\n<td>50-55<\/td>\n<\/tr>\n<tr>\n<td>Excel&#8217;t<\/td>\n<td>56-61<\/td>\n<td>55-61<\/td>\n<td>57-62<\/td>\n<td>58-63<\/td>\n<td>57-61<\/td>\n<td>56-61<\/td>\n<\/tr>\n<tr>\n<td>Good<\/td>\n<td>62-65<\/td>\n<td>62-65<\/td>\n<td>63-66<\/td>\n<td>64-67<\/td>\n<td>62-67<\/td>\n<td>62-65<\/td>\n<\/tr>\n<tr>\n<td>Above av<\/td>\n<td>66-69<\/td>\n<td>66-70<\/td>\n<td>67-70<\/td>\n<td>68-71<\/td>\n<td>68-71<\/td>\n<td>66-69<\/td>\n<\/tr>\n<tr>\n<td>Average<\/td>\n<td>70-73<\/td>\n<td>71-74<\/td>\n<td>71-75<\/td>\n<td>72-76<\/td>\n<td>72-75<\/td>\n<td>70-73<\/td>\n<\/tr>\n<tr>\n<td>Below av<\/td>\n<td>74-81<\/td>\n<td>75-81<\/td>\n<td>76-82<\/td>\n<td>77-83<\/td>\n<td>76-81<\/td>\n<td>74-79<\/td>\n<\/tr>\n<tr>\n<td>Poor<\/td>\n<td>82+<\/td>\n<td>82+<\/td>\n<td>83+<\/td>\n<td>84+<\/td>\n<td>82+<\/td>\n<td>80+<\/td>\n<\/tr>\n<\/table>\n<p>&nbsp;<\/p>\n<p class=\"text-center\"><b>Women resting heart rate &#10084;&#65039;<\/b><\/p>\n<table class=\"table table-bordered table-hover\">\n<tr>\n<th>Age<\/th>\n<th>18 -25<\/th>\n<th>26 -35<\/th>\n<th>36 -45<\/th>\n<th>46 &#8211; 55<\/th>\n<th>56 -65<\/th>\n<th>65+<\/th>\n<\/tr>\n<tr>\n<td>Athlete<\/td>\n<td>54-60<\/td>\n<td>54-59<\/td>\n<td>54-59<\/td>\n<td>54-60<\/td>\n<td>54-59<\/td>\n<td>54-59<\/td>\n<\/tr>\n<tr>\n<td>Excel&#8217;t<\/td>\n<td>61-65<\/td>\n<td>60-64<\/td>\n<td>60-64<\/td>\n<td>61-65<\/td>\n<td>60-64<\/td>\n<td>60-64<\/td>\n<\/tr>\n<tr>\n<td>Good<\/td>\n<td>66-69<\/td>\n<td>65-68<\/td>\n<td>65-69<\/td>\n<td>66-69<\/td>\n<td>65-68<\/td>\n<td>65-68<\/td>\n<\/tr>\n<tr>\n<td>Above av<\/td>\n<td>70-73<\/td>\n<td>69-72<\/td>\n<td>70-73<\/td>\n<td>70-73<\/td>\n<td>69-73<\/td>\n<td>69-72<\/td>\n<\/tr>\n<tr>\n<td>Average<\/td>\n<td>74-78<\/td>\n<td>73-76<\/td>\n<td>74-78<\/td>\n<td>74-77<\/td>\n<td>74-77<\/td>\n<td>73-76<\/td>\n<\/tr>\n<tr>\n<td>Below av<\/td>\n<td>79-84<\/td>\n<td>77-82<\/td>\n<td>79-84<\/td>\n<td>78-83<\/td>\n<td>78-83<\/td>\n<td>77-84<\/td>\n<\/tr>\n<tr>\n<td>Poor<\/td>\n<td>85+<\/td>\n<td>83+<\/td>\n<td>85+<\/td>\n<td>84+<\/td>\n<td>84+<\/td>\n<td>84+<\/td>\n<\/tr>\n<\/table>\n<p>The first step is to identify the nature of the data and the objective. The data on both axes are categorical data (ordinal data): <\/p>\n<ul>\n<li>On the x-axis, there are seven categories ranging from athlete to poor physical condition. <\/li>\n<li>On the y-axis, there are four categories of age groups:\n<ul>\n<li>18 &#8211; 25<\/li>\n<li>26 &#8211; 35<\/li>\n<li>36 &#8211; 45<\/li>\n<li>46 &#8211; 55<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>The main objective is to compare the difference between men and women, using age and the lowest\/highest heart rate measurements. I can create a chart with the entire men and women datasets; however, the result would be a crowded chart and difficult to gain insights. To solve this issue, a small multiple is a good option.<\/p>\n<p>The question now is which chart to use? There are many chart types to compare categorical data visually, such as bars, columns, radial, and dumbbell. I choose to use the dumbbell chart type as it offers the capability to visualize many points on the same line that make the chart compact; keep in mind that space is a challenge to reckon with when using small multiples.<\/p>\n<p>All I have to do now is to structure the data and feed it to the chart (see example below)<\/p>\n<pre>let data = [\r\n  { name: \"Athlete\", low: 54, high: 60 },\r\n  { name: \"Excel &#145t\", low: 61, high: 65 },\r\n  { name: \"Good\", low: 66, high: 69 },\r\n  { name: \"AboveAv\", low: 70, high: 73 },\r\n  { name: \"Average\", low: 74, high: 78 },\r\n  { name: \"BelowAv\", low: 79, high: 84 },\r\n  { name: \"Poor\", low: 85, high: 85 }\r\n];\r\nHighcharts.chart(\"containerW1825\", {\r\n  chart: {\r\n    type: \"dumbbell\"\r\n  },\r\n  legend: {\r\n    enabled: false\r\n  },\r\n  credits: {\r\n    enabled: false\r\n  },\r\n  title: {\r\n    text: \"Age 18-25\"\r\n  },\r\n  xAxis: {\r\n    type: \"category\"\r\n  },\r\n  yAxis: {\r\n    title: {\r\n      text: \"Resting Heart Rate\"\r\n    },\r\n    min: 40\r\n  },\r\n  series: [\r\n    {\r\n      name: \"Resting Heart Rate\",\r\n      data: data,\r\n      lowColor: \"#008000\",\r\n      marker: {\r\n        fillColor: \"#800000\" \/\/highColor\r\n      }\r\n    }\r\n  ]\r\n});\r\n<\/pre>\n<p>Once all the charts are created, I gather them by gender (see charts below):<br \/>\n&nbsp;<\/p>\n<p style=\"text-align: center;\"><b>Men resting heart rate from 18 to 55<\/b><\/p>\n<div class=\"row\" style=\"border: solid 1px; border-color: #d8d1d1; padding: 0; margin: 0;\">\n<div id=\"containerM1825\" class=\"col-12 col-sm-12 col-lg-6\" style=\"border: solid 1px; border-color: #d8d1d1; padding: 0; padding-left: 1;\"><script src=\"https:\/\/marketing-demo.s3.eu-west-1.amazonaws.com\/smallMultipleRestingHeartRate\/indexM1825.js\" defer=\"defer\" ><\/script><\/div>\n<div id=\"containerM2635\" class=\"col-12 col-sm-12 col-lg-6\" style=\"border: solid 1px; border-color: #d8d1d1; padding: 0; padding-left: 1;\"><script src=\"https:\/\/marketing-demo.s3.eu-west-1.amazonaws.com\/smallMultipleRestingHeartRate\/indexM2635.js\" defer=\"defer\" ><\/script><\/div>\n<div id=\"containerM3645\" class=\"col-12 col-sm-12 col-lg-6\" style=\"border: solid 1px; border-color: #d8d1d1; padding: 0; padding-left: 1;\"><script src=\"https:\/\/marketing-demo.s3.eu-west-1.amazonaws.com\/smallMultipleRestingHeartRate\/indexM3645.js\" defer=\"defer\" ><\/script><\/div>\n<div id=\"containerM4655\" class=\"col-12 col-sm-12 col-lg-6\" style=\"border: solid 1px; border-color: #d8d1d1; padding: 0; padding-left: 1;\"><script src=\"https:\/\/marketing-demo.s3.eu-west-1.amazonaws.com\/smallMultipleRestingHeartRate\/indexM4655.js\" defer=\"defer\" ><\/script><\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p style=\"text-align: center;\"><b>Women resting heart rate from 18 to 55<\/b><\/p>\n<div class=\"row\" style=\"border: solid 1px; border-color: #d8d1d1; padding: 0; margin: 0;\">\n<div id=\"containerW1825\" class=\"col-12 col-sm-12 col-lg-6\" style=\"border: solid 1px; border-color: #d8d1d1; padding: 0; padding-left: 1;\"><script src=\"https:\/\/marketing-demo.s3.eu-west-1.amazonaws.com\/smallMultipleRestingHeartRate\/indexW1825.js\" defer=\"defer\" ><\/script><\/div>\n<div id=\"containerW2635\" class=\"col-12 col-sm-12 col-lg-6\" style=\"border: solid 1px; border-color: #d8d1d1; padding: 0; padding-left: 1;\"><script src=\"https:\/\/marketing-demo.s3.eu-west-1.amazonaws.com\/smallMultipleRestingHeartRate\/indexW2635.js\" defer=\"defer\" ><\/script><\/div>\n<div id=\"containerW3645\" class=\"col-12 col-sm-12 col-lg-6\" style=\"border: solid 1px; border-color: #d8d1d1; padding: 0; padding-left: 1;\"><script src=\"https:\/\/marketing-demo.s3.eu-west-1.amazonaws.com\/smallMultipleRestingHeartRate\/indexW3645.js\" defer=\"defer\" ><\/script><\/div>\n<div id=\"containerW4655\" class=\"col-12 col-sm-12 col-lg-6\" style=\"border: solid 1px; border-color: #d8d1d1; padding: 0; padding-left: 1;\"><script src=\"https:\/\/marketing-demo.s3.eu-west-1.amazonaws.com\/smallMultipleRestingHeartRate\/indexW4655.js\" defer=\"defer\" ><\/script><\/div>\n<\/div>\n<p>&nbsp;<br \/>\nThe reader can easily read and understand the dumbbell chart, and thanks to the structure of the small multiple, the reader will focus on one chart at a time with little effort to see patterns and compare data.<\/p>\n<p>Let me know your thoughts about your favorite chart type you use with the small multiples, and feel free to share your experience in the comment section below.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Find out why and how to use small multiples with dumbbell charts to create compelling interactive data visualization.<\/p>\n","protected":false},"author":32,"featured_media":20979,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"meta_title":"","meta_description":"","hc_selected_options":[],"footnotes":""},"categories":[210],"tags":[1063,1094],"coauthors":[699],"class_list":["post-20941","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-data-visualization","tag-highcharts-core"],"_links":{"self":[{"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/posts\/20941","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/users\/32"}],"replies":[{"embeddable":true,"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/comments?post=20941"}],"version-history":[{"count":2,"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/posts\/20941\/revisions"}],"predecessor-version":[{"id":24085,"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/posts\/20941\/revisions\/24085"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/media\/20979"}],"wp:attachment":[{"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/media?parent=20941"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/categories?post=20941"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/tags?post=20941"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/coauthors?post=20941"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}