protected Component getChart() { final Chart chart = new Chart(ChartType.COLUMN); chart.setId("chart"); final Configuration conf = chart.getConfiguration(); conf.setTitle("Global happiness index"); conf.setSubTitle("Source: www.happyplanetindex.org"); conf.getLegend().setEnabled(false); XAxis x = new XAxis(); x.setType(AxisType.CATEGORY); conf.addxAxis(x); YAxis y = new YAxis(); y.setTitle("Total percent market share"); conf.addyAxis(y); PlotOptionsColumn column = new PlotOptionsColumn(); column.setCursor(Cursor.POINTER); column.setDataLabels(new Labels(true)); conf.setPlotOptions(column); DataSeries regionsSeries = new DataSeries(); regionsSeries.setName("Regions"); PlotOptionsColumn plotOptionsColumn = new PlotOptionsColumn(); plotOptionsColumn.setColorByPoint(true); regionsSeries.setPlotOptions(plotOptionsColumn); DataSeriesItem regionItem = new DataSeriesItem("Latin America and Carribean", 60); regionItem.setId("Latin America and Carribean"); DataSeries countriesSeries = new DataSeries("Countries"); countriesSeries.setId("Latin America and Carribean Countries"); DataSeriesItem countryItem = new DataSeriesItem("Costa Rica", 64); countryItem.setId("Costa Rica"); DataSeries detailsSeries = new DataSeries("Details"); detailsSeries.setId("Details Costa Rica"); String[] categories = new String[] { "Life Expectancy", "Well-being (0-10)", "Footprint (gha/capita)" }; Number[] ys = new Number[] { 79.3, 7.3, 2.5 }; detailsSeries.setData(categories, ys); countriesSeries.addItemWithDrilldown(countryItem); seriesMap.put(countryItem.getId(), detailsSeries); countryItem = new DataSeriesItem("Colombia", 59.8); countryItem.setId("Colombia"); detailsSeries = new DataSeries("Details"); detailsSeries.setId("Details Colombia"); ys = new Number[] { 73.7, 6.4, 1.8 }; detailsSeries.setData(categories, ys); countriesSeries.addItemWithDrilldown(countryItem); seriesMap.put(countryItem.getId(), detailsSeries); countryItem = new DataSeriesItem("Belize", 59.3); countryItem.setId("Belize"); detailsSeries = new DataSeries("Details"); detailsSeries.setId("Details Belize"); ys = new Number[] { 76.1, 6.5, 2.1 }; detailsSeries.setData(categories, ys); countriesSeries.addItemWithDrilldown(countryItem); seriesMap.put(countryItem.getId(), detailsSeries); countryItem = new DataSeriesItem("El Salvador", 58.9); countryItem.setId("El Salvador"); detailsSeries = new DataSeries("Details"); detailsSeries.setId("Details El Salvador"); ys = new Number[] { 72.2, 6.7, 2.0 }; detailsSeries.setData(categories, ys); countriesSeries.addItemWithDrilldown(countryItem); seriesMap.put(countryItem.getId(), detailsSeries); regionsSeries.addItemWithDrilldown(regionItem); seriesMap.put(regionItem.getId(), countriesSeries); // ///////////////////////////////////////// regionItem = new DataSeriesItem("Western Nations", 50); regionItem.setId("Western Nations"); countriesSeries = new DataSeries("Countries"); countriesSeries.setId("Western Nations Countries"); countryItem = new DataSeriesItem("New Zealand", 51.6); countryItem.setId("New Zealand"); detailsSeries = new DataSeries("Details"); detailsSeries.setId("Details New Zealand"); ys = new Number[] { 80.7, 7.2, 4.3 }; detailsSeries.setData(categories, ys); countriesSeries.addItemWithDrilldown(countryItem); seriesMap.put(countryItem.getId(), detailsSeries); countryItem = new DataSeriesItem("Norway", 51.4); countryItem.setId("Norway"); detailsSeries = new DataSeries("Details"); detailsSeries.setId("Details Norway"); ys = new Number[] { 81.1, 7.6, 4.8 }; detailsSeries.setData(categories, ys); countriesSeries.addItemWithDrilldown(countryItem); seriesMap.put(countryItem.getId(), detailsSeries); countryItem = new DataSeriesItem("Switzerland", 50.3); countryItem.setId("Switzerland"); detailsSeries = new DataSeries("Details"); detailsSeries.setId("Details Switzerland"); ys = new Number[] { 82.3, 7.5, 5.0 }; detailsSeries.setData(categories, ys); countriesSeries.addItemWithDrilldown(countryItem); seriesMap.put(countryItem.getId(), detailsSeries); countryItem = new DataSeriesItem("United Kingdom", 47.9); countryItem.setId("United Kingdom"); detailsSeries = new DataSeries("Details"); detailsSeries.setId("Details United Kingdom"); ys = new Number[] { 80.2, 7.0, 4.7 }; detailsSeries.setData(categories, ys); countriesSeries.addItemWithDrilldown(countryItem); seriesMap.put(countryItem.getId(), detailsSeries); regionsSeries.addItemWithDrilldown(regionItem); seriesMap.put(regionItem.getId(), countriesSeries); // ///////////////////////////////////////// regionItem = new DataSeriesItem("Middle East and North Africa", 53); regionItem.setId("Middle East and North Africa"); countriesSeries = new DataSeries("Countries"); countriesSeries.setId("Middle East and North Africa Countries"); countryItem = new DataSeriesItem("Israel", 55.2); countryItem.setId("Israel"); detailsSeries = new DataSeries("Details"); detailsSeries.setId("Details Israel"); ys = new Number[] { 81.6, 7.4, 4.0 }; detailsSeries.setData(categories, ys); countriesSeries.addItemWithDrilldown(countryItem); seriesMap.put(countryItem.getId(), detailsSeries); countryItem = new DataSeriesItem("Algeria", 52.2); countryItem.setId("Algeria"); detailsSeries = new DataSeries("Details"); detailsSeries.setId("Details Algeria"); ys = new Number[] { 73.1, 5.2, 1.6 }; detailsSeries.setData(categories, ys); countriesSeries.addItemWithDrilldown(countryItem); seriesMap.put(countryItem.getId(), detailsSeries); countryItem = new DataSeriesItem("Jordan", 51.7); countryItem.setId("Jordan"); detailsSeries = new DataSeries("Details"); detailsSeries.setId("Details Jordan"); ys = new Number[] { 73.4, 5.7, 2.1 }; detailsSeries.setData(categories, ys); countriesSeries.addItemWithDrilldown(countryItem); seriesMap.put(countryItem.getId(), detailsSeries); countryItem = new DataSeriesItem("Palestine", 51.2); countryItem.setId("Palestine"); detailsSeries = new DataSeries("Details"); detailsSeries.setId("Details Palestine"); ys = new Number[] { 72.8, 4.8, 1.4 }; detailsSeries.setData(categories, ys); countriesSeries.addItemWithDrilldown(countryItem); seriesMap.put(countryItem.getId(), detailsSeries); regionsSeries.addItemWithDrilldown(regionItem); seriesMap.put(regionItem.getId(), countriesSeries); // ///////////////////////////////////////// regionItem = new DataSeriesItem("Sub-Saharan Africa", 42); regionItem.setId("Sub-Saharan Africa"); countriesSeries = new DataSeries("Countries"); countriesSeries.setId("Sub-Saharan Africa Countries"); countryItem = new DataSeriesItem("Madagascar", 51.6); countryItem.setId("Madagascar"); detailsSeries = new DataSeries("Details"); detailsSeries.setId("Details Madagascar"); ys = new Number[] { 66.7, 4.6, 1.2 }; detailsSeries.setData(categories, ys); countriesSeries.addItemWithDrilldown(countryItem); seriesMap.put(countryItem.getId(), detailsSeries); countryItem = new DataSeriesItem("Malawi", 42.5); countryItem.setId("Malawi"); detailsSeries = new DataSeries("Details"); detailsSeries.setId("Details Malawi"); ys = new Number[] { 54.2, 5.1, 0.8 }; detailsSeries.setData(categories, ys); countriesSeries.addItemWithDrilldown(countryItem); seriesMap.put(countryItem.getId(), detailsSeries); countryItem = new DataSeriesItem("Ghana", 40.3); countryItem.setId("Ghana"); detailsSeries = new DataSeries("Details"); detailsSeries.setId("Details Ghana"); ys = new Number[] { 64.2, 4.6, 1.7 }; detailsSeries.setData(categories, ys); countriesSeries.addItemWithDrilldown(countryItem); seriesMap.put(countryItem.getId(), detailsSeries); countryItem = new DataSeriesItem("Ethiopia", 39.2); countryItem.setId("Ethiopia"); detailsSeries = new DataSeries("Details"); detailsSeries.setId("Details Ethiopia"); ys = new Number[] { 59.3, 4.4, 1.1 }; detailsSeries.setData(categories, ys); countriesSeries.addItemWithDrilldown(countryItem); seriesMap.put(countryItem.getId(), detailsSeries); regionsSeries.addItemWithDrilldown(regionItem); seriesMap.put(regionItem.getId(), countriesSeries); // ///////////////////////////////////////// regionItem = new DataSeriesItem("South Asia", 53); regionItem.setId("South Asia"); countriesSeries = new DataSeries("Countries"); countriesSeries.setId("South Asia Countries"); countryItem = new DataSeriesItem("Bangladesh", 56.3); countryItem.setId("Bangladesh"); detailsSeries = new DataSeries("Details"); detailsSeries.setId("Details Bangladesh"); ys = new Number[] { 68.9, 5.0, 0.7 }; detailsSeries.setData(categories, ys); countriesSeries.addItemWithDrilldown(countryItem); seriesMap.put(countryItem.getId(), detailsSeries); countryItem = new DataSeriesItem("Pakistan", 54.1); countryItem.setId("Pakistan"); detailsSeries = new DataSeries("Details"); detailsSeries.setId("Details Pakistan"); ys = new Number[] { 65.4, 5.3, 0.8 }; detailsSeries.setData(categories, ys); countriesSeries.addItemWithDrilldown(countryItem); seriesMap.put(countryItem.getId(), detailsSeries); countryItem = new DataSeriesItem("India", 50.9); countryItem.setId("India"); detailsSeries = new DataSeries("Details"); detailsSeries.setId("Details India"); ys = new Number[] { 65.4, 5.0, 0.9 }; detailsSeries.setData(categories, ys); countriesSeries.addItemWithDrilldown(countryItem); seriesMap.put(countryItem.getId(), detailsSeries); countryItem = new DataSeriesItem("Sri Lanka", 51.2); countryItem.setId("Sri Lanka"); detailsSeries = new DataSeries("Details"); detailsSeries.setId("Details Sri Lanka"); ys = new Number[] { 74.9, 4.2, 1.2 }; detailsSeries.setData(categories, ys); countriesSeries.addItemWithDrilldown(countryItem); seriesMap.put(countryItem.getId(), detailsSeries); regionsSeries.addItemWithDrilldown(regionItem); seriesMap.put(regionItem.getId(), countriesSeries); // ///////////////////////////////////////// regionItem = new DataSeriesItem("East Asia", 55); regionItem.setId("East Asia"); countriesSeries = new DataSeries("Countries"); countriesSeries.setId("East Asia Countries"); countryItem = new DataSeriesItem("Vietnam", 60.4); countryItem.setId("Vietnam"); detailsSeries = new DataSeries("Details"); detailsSeries.setId("Details Vietnam"); ys = new Number[] { 75.2, 5.8, 1.4 }; detailsSeries.setData(categories, ys); countriesSeries.addItemWithDrilldown(countryItem); seriesMap.put(countryItem.getId(), detailsSeries); countryItem = new DataSeriesItem("Indonesia", 55.5); countryItem.setId("Indonesia"); detailsSeries = new DataSeries("Details"); detailsSeries.setId("Details Indonesia"); ys = new Number[] { 69.4, 5.5, 1.1 }; detailsSeries.setData(categories, ys); countriesSeries.addItemWithDrilldown(countryItem); seriesMap.put(countryItem.getId(), detailsSeries); countryItem = new DataSeriesItem("Thailand", 53.5); countryItem.setId("Thailand"); detailsSeries = new DataSeries("Details"); detailsSeries.setId("Details Thailand"); ys = new Number[] { 74.1, 6.2, 2.4 }; detailsSeries.setData(categories, ys); countriesSeries.addItemWithDrilldown(countryItem); seriesMap.put(countryItem.getId(), detailsSeries); countryItem = new DataSeriesItem("Philippines", 52.4); countryItem.setId("Philippines"); detailsSeries = new DataSeries("Details"); detailsSeries.setId("Details Philippines"); ys = new Number[] { 68.7, 4.9, 1.0 }; detailsSeries.setData(categories, ys); countriesSeries.addItemWithDrilldown(countryItem); seriesMap.put(countryItem.getId(), detailsSeries); regionsSeries.addItemWithDrilldown(regionItem); seriesMap.put(regionItem.getId(), countriesSeries); // ///////////////////////////////////////// conf.addSeries(regionsSeries); chart.setDrilldownCallback(new DrilldownCallback() { @Override public Series handleDrilldown(DrilldownEvent event) { System.out.println("Caught: " + event.getItem()); System.out.println("Id: " + event.getItem().getId()); DataSeries s = seriesMap.get(event.getItem().getId()); System.out.println("Returning: " + s); return s; } }); for (String s : seriesMap.keySet()) { System.out.println(s + " --> " + seriesMap.get(s)); } return chart; }