import org.knowm.xchart.SwingWrapper;
import org.knowm.xchart.XYChart;
import org.knowm.xchart.XYChartBuilder;
import org.knowm.xchart.XYSeries;
import org.knowm.xchart.XYSeries.XYSeriesRenderStyle;
import org.knowm.xchart.style.AxesChartStyler;
import org.knowm.xchart.style.Styler.LegendPosition;
import org.knowm.xchart.style.markers.SeriesMarkers;
import org.knowm.xchart.style.Styler.LegendPosition;
import org.knowm.xchart.VectorGraphicsEncoder;
import org.knowm.xchart.VectorGraphicsEncoder.VectorGraphicsFormat;
/**
* Area Chart with 3 series
*
* Demonstrates the following:
*
*
* - Area Chart
*
- Place legend at Inside-NE position
*
- ChartBuilder
*/
public class xchart_area2 {
public static void main(String[] args) throws Exception {
XYChart chart = getChart("Area");
new SwingWrapper(chart).displayChart();
// Save it
VectorGraphicsEncoder.saveVectorGraphic(chart, "Area", VectorGraphicsFormat.PDF);
}
static public XYChart getChart(String name) {
// Create Chart
XYChart chart =
new XYChartBuilder()
.width(600)
.height(400)
.title(name)
.xAxisTitle("Age")
.yAxisTitle("Amount")
.build();
// Customize Chart
chart.getStyler().setLegendPosition(LegendPosition.InsideNW);
chart.getStyler().setDefaultSeriesRenderStyle(XYSeriesRenderStyle.Line);
chart.getStyler().setYAxisLabelAlignment(AxesChartStyler.TextAlignment.Right);
chart.getStyler().setYAxisDecimalPattern("$ #,###.##");
chart.getStyler().setPlotMargin(0);
chart.getStyler().setPlotContentSize(.95);
// Series
// @formatter:off
double[] xAges =
new double[] {
60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100
};
double[] yLiability =
new double[] {
672234, 691729, 711789, 732431, 753671, 775528, 798018, 821160, 844974, 869478, 907735,
887139, 865486, 843023, 819621, 795398, 770426, 744749, 719011, 693176, 667342, 641609,
616078, 590846, 565385, 540002, 514620, 489380, 465149, 441817, 419513, 398465, 377991,
358784, 340920, 323724, 308114, 293097, 279356, 267008, 254873
};
double[] yPercentile75th =
new double[] {
800000, 878736, 945583, 1004209, 1083964, 1156332, 1248041, 1340801, 1440138, 1550005,
1647728, 1705046, 1705032, 1710672, 1700847, 1683418, 1686522, 1674901, 1680456, 1679164,
1668514, 1672860, 1673988, 1646597, 1641842, 1653758, 1636317, 1620725, 1589985, 1586451,
1559507, 1544234, 1529700, 1507496, 1474907, 1422169, 1415079, 1346929, 1311689, 1256114,
1221034
};
double[] yPercentile50th =
new double[] {
800000, 835286, 873456, 927048, 969305, 1030749, 1101102, 1171396, 1246486, 1329076,
1424666, 1424173, 1421853, 1397093, 1381882, 1364562, 1360050, 1336885, 1340431, 1312217,
1288274, 1271615, 1262682, 1237287, 1211335, 1191953, 1159689, 1117412, 1078875, 1021020,
974933, 910189, 869154, 798476, 744934, 674501, 609237, 524516, 442234, 343960, 257025
};
double[] yPercentile25th =
new double[] {
800000, 791439, 809744, 837020, 871166, 914836, 958257, 1002955, 1054094, 1118934,
1194071, 1185041, 1175401, 1156578, 1132121, 1094879, 1066202, 1054411, 1028619, 987730,
944977, 914929, 880687, 809330, 783318, 739751, 696201, 638242, 565197, 496959, 421280,
358113, 276518, 195571, 109514, 13876, 29, 0, 0, 0, 0
};
// @formatter:on
XYSeries series = chart.addSeries("Liability", xAges, yLiability);
series.setXYSeriesRenderStyle(XYSeries.XYSeriesRenderStyle.Area);
series.setMarker(SeriesMarkers.NONE);
chart.addSeries("75th Percentile", xAges, yPercentile75th);
chart.addSeries("50th Percentile", xAges, yPercentile50th);
chart.addSeries("25th Percentile", xAges, yPercentile25th);
return chart;
}
}