package uk.ac.leeds.ccg.andyt.projects.genesis.society.demography; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Calendar; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.Axis; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.Plot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.category.StackedBarRenderer; import org.jfree.data.category.DefaultCategoryDataset; import org.jfree.data.category.DefaultIntervalCategoryDataset; import org.jfree.data.xy.DefaultXYDataset; import org.jfree.data.xy.XYBarDataset; import uk.ac.leeds.ccg.andyt.projects.genesis.io.IO; import uk.ac.leeds.ccg.andyt.projects.genesis.society.persons.Female; import uk.ac.leeds.ccg.andyt.projects.genesis.society.persons.Male; import uk.ac.leeds.ccg.andyt.projects.genesis.society.persons.Person; import uk.ac.leeds.ccg.andyt.projects.genesis.society.environment.Time; public class Demographics { public Demographics() { } @Deprecated public JFreeChart _AgeGenderPlot( Object[] _Population, Calendar _Date_Calendar) { Time _Date = new Time(_Date_Calendar.YEAR, _Date_Calendar.DAY_OF_YEAR); return _AgeGenderPlot(_Population, _Date); } public JFreeChart _AgeGenderPlot( HashSet _Population_Alive_Female, HashSet _Population_Alive_Male, Time _Time) { // Initialisation Iterator _Iterator; //Person _Person; Female _Female; Male _Male; Integer _AgeYear; Object key; Object value; int _Count; // Summarise _People HashMap _Male_Age_Count_HashMap = new HashMap(); HashMap _Female_Age_Count_HashMap = new HashMap(); _Iterator = _Population_Alive_Female.iterator(); int _MaxAge = 0; int _MaxCount = 0; while (_Iterator.hasNext()) { _Female = (Female) _Iterator.next(); _AgeYear = new Integer(_Female.get_AgeInYears_int(_Time)); _MaxAge = Math.max(_MaxAge, _AgeYear); if (_Female_Age_Count_HashMap.containsKey(_AgeYear)) { _Count = (Integer) _Female_Age_Count_HashMap.get(_AgeYear) + 1; _MaxCount = Math.max(_MaxCount, _Count); _Female_Age_Count_HashMap.put(_AgeYear, _Count); } else { _Female_Age_Count_HashMap.put(_AgeYear, 1); } } _Iterator = _Population_Alive_Male.iterator(); while (_Iterator.hasNext()) { _Male = (Male) _Iterator.next(); _AgeYear = new Integer(_Male.get_AgeInYears_int(_Time)); _MaxAge = Math.max(_MaxAge, _AgeYear); if (_Male_Age_Count_HashMap.containsKey(_AgeYear)) { _Count = (Integer) _Male_Age_Count_HashMap.get(_AgeYear) + 1; _MaxCount = Math.max(_MaxCount, _Count); _Male_Age_Count_HashMap.put(_AgeYear, _Count); } else { _Male_Age_Count_HashMap.put(_AgeYear, 1); } } System.out.println("_MaxAge " + _MaxAge); System.out.println("_MaxCountOfAnyAge " + _MaxCount); // Generate DefaultCategoryDataset DefaultCategoryDataset _DefaultCategoryDataset = new DefaultCategoryDataset(); //for (int _Age = 0; _Age <= _MaxAge; _Age++) { //for (int _Age = _MaxAge; _Age > -1; _Age--) { for (int _Age = 60; _Age > -1; _Age--) { key = new Integer(_Age); if (_Female_Age_Count_HashMap.containsKey(key)) { _Count = (Integer) _Female_Age_Count_HashMap.get(key); } else { _Count = 0; } _DefaultCategoryDataset.addValue( -_Count, "Female", Integer.toString(_Age)); if (_Male_Age_Count_HashMap.containsKey(key)) { _Count = (Integer) _Male_Age_Count_HashMap.get(key); } else { _Count = 0; } _DefaultCategoryDataset.addValue( _Count, "Male", Integer.toString(_Age)); } // Create a stacked bar chart which uses: // CategoryPlot instance as the plot; // CategoryAxis for the domain axis; // NumberAxis as the range axis; // StackedBarRenderer as the renderer. JFreeChart _JFreeChart = ChartFactory.createStackedBarChart( "Age Gender Plot Year " + _Time._Year, "Age Group", // domain axis label "Population", // range axis label _DefaultCategoryDataset, // data PlotOrientation.HORIZONTAL, true, // include legend true, // tooltips false // urls ); // Get Chart components CategoryPlot _CategoryPlot = (CategoryPlot) _JFreeChart.getPlot(); CategoryAxis _CategoryAxis = _CategoryPlot.getDomainAxis(); NumberAxis _NumberAxis = (NumberAxis) _CategoryPlot.getRangeAxis(); StackedBarRenderer _StackedBarRenderer = (StackedBarRenderer) _CategoryPlot.getRenderer(); //Modify Chart components //_NumberAxis.setRange(-5000d, 5000d); _NumberAxis.setRange(-100d, 100d); // Write out image int width = 500; int height = 1000; String directory = "C:/temp/"; String outputImageFileNamePrefix = new String("test" + _Time._Year); String type = "PNG"; try { IO._OutputJFreeChart( _JFreeChart, width, height, directory, outputImageFileNamePrefix, type); } catch (IOException _IOException) { _IOException.printStackTrace(); } return _JFreeChart; } @Deprecated public JFreeChart _AgeGenderPlot( Object[] _Population, Time _Time) { HashSet _Females_HashSet = (HashSet) _Population[0]; HashSet _Males_HashSet = (HashSet) _Population[1]; // Initialisation Iterator _Iterator; //Person _Person; Female _Female; Male _Male; Integer _AgeYear; Object key; Object value; int _Count; // Summarise _People HashMap _Male_Age_Count_HashMap = new HashMap(); HashMap _Female_Age_Count_HashMap = new HashMap(); _Iterator = _Females_HashSet.iterator(); int _MaxAge = 0; int _MaxCount = 0; while (_Iterator.hasNext()) { _Female = (Female) _Iterator.next(); if (_Female._Time_Death == null) { _AgeYear = new Integer(_Female.get_AgeInYears_int(_Time)); _MaxAge = Math.max(_MaxAge, _AgeYear); if (_Female_Age_Count_HashMap.containsKey(_AgeYear)) { _Count = (Integer) _Female_Age_Count_HashMap.get(_AgeYear) + 1; _MaxCount = Math.max(_MaxCount, _Count); _Female_Age_Count_HashMap.put(_AgeYear, _Count); } else { _Female_Age_Count_HashMap.put(_AgeYear, 1); } } else { boolean debug = true; } } _Iterator = _Males_HashSet.iterator(); while (_Iterator.hasNext()) { _Male = (Male) _Iterator.next(); if (_Male._Time_Death == null) { _AgeYear = new Integer(_Male.get_AgeInYears_int(_Time)); _MaxAge = Math.max(_MaxAge, _AgeYear); if (_Male_Age_Count_HashMap.containsKey(_AgeYear)) { _Count = (Integer) _Male_Age_Count_HashMap.get(_AgeYear) + 1; _MaxCount = Math.max(_MaxCount, _Count); _Male_Age_Count_HashMap.put(_AgeYear, _Count); } else { _Male_Age_Count_HashMap.put(_AgeYear, 1); } } else { boolean debug = true; } } System.out.println("_MaxAge " + _MaxAge); System.out.println("_MaxCountOfAnyAge " + _MaxCount); // Generate DefaultCategoryDataset DefaultCategoryDataset _DefaultCategoryDataset = new DefaultCategoryDataset(); //for (int _Age = 0; _Age <= _MaxAge; _Age++) { //for (int _Age = _MaxAge; _Age > -1; _Age--) { for (int _Age = 60; _Age > -1; _Age--) { key = new Integer(_Age); if (_Female_Age_Count_HashMap.containsKey(key)) { _Count = (Integer) _Female_Age_Count_HashMap.get(key); } else { _Count = 0; } _DefaultCategoryDataset.addValue( -_Count, "Female", Integer.toString(_Age)); if (_Male_Age_Count_HashMap.containsKey(key)) { _Count = (Integer) _Male_Age_Count_HashMap.get(key); } else { _Count = 0; } _DefaultCategoryDataset.addValue( _Count, "Male", Integer.toString(_Age)); } // Create a stacked bar chart which uses: // CategoryPlot instance as the plot; // CategoryAxis for the domain axis; // NumberAxis as the range axis; // StackedBarRenderer as the renderer. JFreeChart _JFreeChart = ChartFactory.createStackedBarChart( "Age Gender Plot Year " + _Time._Year, "Age Group", // domain axis label "Population", // range axis label _DefaultCategoryDataset, // data PlotOrientation.HORIZONTAL, true, // include legend true, // tooltips false // urls ); // Get Chart components CategoryPlot _CategoryPlot = (CategoryPlot) _JFreeChart.getPlot(); CategoryAxis _CategoryAxis = _CategoryPlot.getDomainAxis(); NumberAxis _NumberAxis = (NumberAxis) _CategoryPlot.getRangeAxis(); StackedBarRenderer _StackedBarRenderer = (StackedBarRenderer) _CategoryPlot.getRenderer(); //Modify Chart components //_NumberAxis.setRange(-5000d, 5000d); _NumberAxis.setRange(-100d, 100d); // Write out image int width = 500; int height = 1000; String directory = "C:/temp/"; String outputImageFileNamePrefix = new String("test" + _Time._Year); String type = "PNG"; try { IO._OutputJFreeChart( _JFreeChart, width, height, directory, outputImageFileNamePrefix, type); } catch (IOException _IOException) { _IOException.printStackTrace(); } return _JFreeChart; } public class _String_int { String _String; int _int; public _String_int( String _String, int _int) { this._String = _String; this._int = _int; } } }