Line3D chart uses ChartDataModel as its data model. Line3D chart extracts (x, y, z) value sets from the data model, maps and plots them. KEYS specify position on X-axis, VALUES - on Y-axis and EXTENT - on Z-axis. Points are then connected with line segments. Optionally, the line can be projected to one of the coordinate planes and the projection area can be filled. Also, line width must be set. This can be achieved using setLineWidth() method for a particular strategy.
This series plots points and joins them with perpendicular lines.
Setting SteppedLine3D series:
series.setStrategy(Line3DStrategies.STEPPED_LINE_STRATEGY); |
Figure 4.2.2.1 3D Stepped Line Demonstration
1 | import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import javax.swing.JFrame; import lt.monarch.chart.chart3D.Chart3D; import lt.monarch.chart.chart3D.axis.Axis3DX; import lt.monarch.chart.chart3D.axis.Axis3DY; import lt.monarch.chart.chart3D.axis.Axis3DZ; import lt.monarch.chart.chart3D.engine.Grid3D; import lt.monarch.chart.chart3D.engine.PlaneMapper3D; import lt.monarch.chart.chart3D.engine.SimpleProjector3D; import lt.monarch.chart.chart3D.series.Line3DSeries; import lt.monarch.chart.chart3D.series.Line3DStrategies; import lt.monarch.chart.engine.ChartObject; import lt.monarch.chart.mapper.LabelAxisMapper; import lt.monarch.chart.mapper.MathAxisMapper; import lt.monarch.chart.models.ChartDataModel; import lt.monarch.chart.plugins.ChartRotator; import lt.monarch.chart.plugins.ChartZoomer; import lt.monarch.chart.swing.JChartPanel; import lt.monarch.chart.view.LabeledChart; public class SteppedLine3DDemo extends JFrame { private transient JChartPanel m_chartPanel; public SteppedLine3DDemo() { setLayout(new BorderLayout()); initChart(); add(m_chartPanel, BorderLayout.CENTER); } protected void initChart() { String x[] = { "2004", "2005", "2006", "2007", "2008" }; String zx[] = { "Export", "Import" }; Double y[] = { 34.384d, 43.152d, 53.275d, 61.504d, 61.504d }; String z[] = { "Import", "Import", "Import", "Import", "Import" }; Double y2[] = { 25.819d, 32.767d, 38.888d, 43.192d, 43.192d }; String z2[] = { "Export", "Export", "Export", "Export", "Export" }; ChartDataModel model1 = new ChartDataModel(); for (int i = 0; i < x.length; i++) { model1.add(new Object[] { x[i], y[i], z[i] }); } ChartDataModel model2 = new ChartDataModel(); for (int i = 0; i < x.length; i++) { model2.add(new Object[] { x[i], y2[i], z2[i] }); } Chart3D chart = new Chart3D(); chart.addPlugin(new ChartRotator()); chart.addPlugin(new ChartZoomer()); MathAxisMapper yMapper = new MathAxisMapper(0, 70); LabelAxisMapper xMapper = new LabelAxisMapper(x); LabelAxisMapper zMapper = new LabelAxisMapper(zx); Axis3DX axisX = new Axis3DX(xMapper); Axis3DY axisY = new Axis3DY(yMapper); Axis3DZ axisZ = new Axis3DZ(zMapper); Grid3D grid_xy = new Grid3D(xMapper, yMapper, Grid3D.GridOrientation.XY); new PlaneMapper3D(); Grid3D grid_xz = new Grid3D(xMapper, zMapper, Grid3D.GridOrientation.XZ); Grid3D grid_yz = new Grid3D(yMapper, null, Grid3D.GridOrientation.YZ); axisX.setTitle("Year"); axisY.setTitle("LTL mlrd"); Line3DSeries series1 = new Line3DSeries(model1, xMapper, yMapper, zMapper); series1.setStrategy(Line3DStrategies.STEPPED_LINE_STRATEGY); series1.setName("Import"); series1.getPaintStyle().setBackground(new Color(49, 119, 31)); series1.getPaintStyle().setForeground(null); series1.getPaintStyle().setTransparencyValue(200); Line3DSeries series2 = new Line3DSeries(model2, xMapper, yMapper, zMapper); series2.setStrategy(Line3DStrategies.STEPPED_LINE_STRATEGY); series2.setName("Export"); series2.getPaintStyle().setBackground(new Color(251, 178, 47, 60)); series2.getPaintStyle().setForeground(null); series2.getPaintStyle().setTransparencyValue(200); // setting scaling ((SimpleProjector3D) chart.projector()).setViewScaling(1.5525, 0.621, 1.621); // setting rotation angle ((SimpleProjector3D) chart.projector()).setRotationAngle(-0.45399); // setting elevation angle ((SimpleProjector3D) chart.projector()).setElevationAngle(0.346); chart.setAxis(axisX, axisY, axisZ); chart.setObjects(new ChartObject[] { axisX, axisY, axisZ, series1, series2, grid_xy, grid_xz, grid_yz }); LabeledChart m_chart = new LabeledChart(chart); m_chart.setTitle("Goods Import and Export in Lithuania"); m_chartPanel = new JChartPanel(m_chart); } public static void main(String[] args) { SteppedLine3DDemo frame = new SteppedLine3DDemo(); frame.setSize(new Dimension(490, 450)); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); frame.setTitle("Goods Import and Export in Lithuania"); frame.setVisible(true); } } |
This Series plots points and joins them with straight lines.
Setting DirectLine3D series:
series.setStrategy(Line3DStrategies.DIRECT_LINE_STRATEGY); |
Figure 4.2.2.2 3D Direct Line Demonstration
1 | import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import javax.swing.JFrame; import lt.monarch.chart.chart3D.Chart3D; import lt.monarch.chart.chart3D.axis.Axis3D; import lt.monarch.chart.chart3D.axis.Axis3DX; import lt.monarch.chart.chart3D.axis.Axis3DY; import lt.monarch.chart.chart3D.axis.Axis3DZ; import lt.monarch.chart.chart3D.engine.Grid3D; import lt.monarch.chart.chart3D.engine.SimpleProjector3D; import lt.monarch.chart.chart3D.series.Line3DSeries; import lt.monarch.chart.chart3D.series.Line3DStrategies; import lt.monarch.chart.chart3D.series.Line3DStrategy; import lt.monarch.chart.engine.ChartObject; import lt.monarch.chart.legend.Legend; import lt.monarch.chart.mapper.LabelAxisMapper; import lt.monarch.chart.mapper.MathAxisMapper; import lt.monarch.chart.models.ChartDataModel; import lt.monarch.chart.plugins.ChartRotator; import lt.monarch.chart.plugins.ChartZoomer; import lt.monarch.chart.swing.JChartPanel; import lt.monarch.chart.view.LabeledChart; public class DirectLine3DDemo extends JFrame { private transient JChartPanel m_chartPanel; public DirectLine3DDemo() { setLayout(new BorderLayout()); initChart(); add(m_chartPanel, BorderLayout.CENTER); } protected void initChart() { /* * Creating the data */ ChartDataModel model = new ChartDataModel(3); model.add(new Object[] { "2006", 1892854, "RST" }); model.add(new Object[] { "2007", 2795970, "RST" }); model.add(new Object[] { "2008", 2422639, "RST" }); ChartDataModel model1 = new ChartDataModel(3); model1.add(new Object[] { "2006", 1166123, "RST" }); model1.add(new Object[] { "2007", 1923857, "RST" }); model1.add(new Object[] { "2008", 1462054, "RST" }); ChartDataModel model2 = new ChartDataModel(3); model2.add(new Object[] { "2006", 1406704, "VST" }); model2.add(new Object[] { "2007", 2088375, "VST" }); model2.add(new Object[] { "2008", 1621649, "VST" }); ChartDataModel model3 = new ChartDataModel(3); model3.add(new Object[] { "2006", 830011, "VST" }); model3.add(new Object[] { "2007", 1345069, "VST" }); model3.add(new Object[] { "2008", 1319030, "VST" }); /* * Creating and setting the mapper */ MathAxisMapper yMapper = new MathAxisMapper(700000, 3100000); LabelAxisMapper xMapper = new LabelAxisMapper(new String[] { "2006", "2007", "2008" }); LabelAxisMapper zMapper = new LabelAxisMapper(new String[] { "VST", "RST" }); /* * Creating and setting axis */ Axis3D axisX = new Axis3DX(xMapper); Axis3D axisY = new Axis3DY(yMapper); Axis3D axisZ = new Axis3DZ(zMapper); axisX.setTitle("Year"); axisY.setTitle("Millions of LTL"); axisZ.setTitle("Company"); /* * Creating the grid */ Grid3D grid_xy = new Grid3D(xMapper, yMapper, Grid3D.GridOrientation.XY); Grid3D grid_xz = new Grid3D(xMapper, zMapper, Grid3D.GridOrientation.XZ); Grid3D grid_yz = new Grid3D(yMapper, zMapper, Grid3D.GridOrientation.YZ); /* * Creating and setting series */ Line3DSeries seriesRSTEq = new Line3DSeries(model, xMapper, yMapper, zMapper); seriesRSTEq.setStrategy(Line3DStrategies.DIRECT_LINE_STRATEGY); seriesRSTEq.setName("RST Total equity"); ((Line3DStrategy) seriesRSTEq.getStrategy()).setLineWidth(0.99); seriesRSTEq.getPaintStyle().setForeground( new Color(49, 119, 31).darker()); Line3DSeries seriesRSTRR = new Line3DSeries(model1, xMapper, yMapper, zMapper); seriesRSTRR.setStrategy(Line3DStrategies.DIRECT_LINE_STRATEGY); seriesRSTRR.setName("RST Revaluation reserve"); ((Line3DStrategy) seriesRSTEq.getStrategy()).setLineWidth(0.02); seriesRSTRR.getPaintStyle().setForeground(Color.red.darker()); Line3DSeries seriesVSTEq = new Line3DSeries(model2, xMapper, yMapper, zMapper); seriesVSTEq.setStrategy(Line3DStrategies.SPLINE_STRATEGY); seriesVSTEq.setName("VST Total equity"); ((Line3DStrategy) seriesVSTEq.getStrategy()).setLineWidth(0.01); seriesVSTEq.getPaintStyle().setForeground( new Color(251, 178, 47, 60).darker()); Line3DSeries seriesVSTRR = new Line3DSeries(model3, xMapper, yMapper, zMapper); seriesVSTRR.setStrategy(Line3DStrategies.SPLINE_STRATEGY); seriesVSTRR.setName("VST Revaluation reserve"); ((Line3DStrategy) seriesVSTEq.getStrategy()).setLineWidth(0.01); seriesVSTRR.getPaintStyle().setForeground(new Color(143, 60, 168)); /* * Creating chart */ Chart3D chart = new Chart3D(); chart.addPlugin(new ChartRotator()); chart.addPlugin(new ChartZoomer()); chart.setObjects(new ChartObject[] { seriesRSTEq, seriesVSTEq, seriesRSTRR, seriesVSTRR, grid_xy, grid_xz, grid_yz }); chart.setAxis(axisX, axisY, axisZ); Legend legend = new Legend(chart); legend.setMaxColumns(4); // setting scaling ((SimpleProjector3D) chart.projector()).setViewScaling(1.2525, 0.621, 1.621); // setting rotation angle ((SimpleProjector3D) chart.projector()).setRotationAngle(-0.45399); // setting elevation angle ((SimpleProjector3D) chart.projector()).setElevationAngle(0.346); /* * Creating title */ LabeledChart m_chart = new LabeledChart(chart); m_chart.setBottomView(legend); m_chart.setTitle("VST Plc. and RST Plc. Equities and Reserves"); m_chartPanel = new JChartPanel(m_chart); } public static void main(String[] args) { DirectLine3DDemo frame = new DirectLine3DDemo(); frame.setSize(new Dimension(490, 450)); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); frame.setTitle("VST Plc. and RST Plc. Equities and Reserves"); frame.setVisible(true); } } |
Spline3D Series plots and joins data points with curved lines.
Setting Spline3D series:
series.setStrategy(Line3DStrategies.SPLINE_STRATEGY); |
Figure 4.2.2.3 3D Spline Demonstration
1 | import java.awt.*; import javax.swing.JFrame; import lt.monarch.chart.chart3D.Chart3D; import lt.monarch.chart.chart3D.axis.*; import lt.monarch.chart.chart3D.engine.*; import lt.monarch.chart.chart3D.series.*; import lt.monarch.chart.engine.ChartObject; import lt.monarch.chart.mapper.MathAxisMapper; import lt.monarch.chart.models.ChartDataModel; import lt.monarch.chart.plugins.*; import lt.monarch.chart.swing.JChartPanel; import lt.monarch.chart.sys_tests.utils.JTestsFrame3D; import lt.monarch.chart.view.LabeledChart; public class Spline3DDemo extends JFrame { private transient JChartPanel m_chartPanel; public Spline3DDemo() { setLayout(new BorderLayout()); initChart(); add(m_chartPanel, BorderLayout.CENTER); } protected void initChart() { /* * Creating the data */ ChartDataModel model = new ChartDataModel(3); model.add(new Object[] { 0d, 0d, 0d }); model.add(new Object[] { 0d, 0d, 1d }); model.add(new Object[] { 0d, 1d, 0d }); model.add(new Object[] { 1d, 0d, 0d }); model.add(new Object[] { 1d, 0d, 1d }); model.add(new Object[] { 1d, 1d, 0d }); model.add(new Object[] { 0d, 1d, 1d }); model.add(new Object[] { 1d, 1d, 1d }); model.add(new Object[] { 0.5d, 0.5d, 0.5d }); ChartDataModel model2 = new ChartDataModel(3); model2.add(new Object[] { 0d, 0d, 0d }); model2.add(new Object[] {5d, 0d, 0d }); ChartDataModel model4 = new ChartDataModel(3); for (int i =0 ; i < 50; i++ ) { model4.add(new Object[] { i*0.1, Math.sin(i),0d }); } ChartDataModel model5 = new ChartDataModel(3); for (int i =0 ; i < 50; i++ ) { model5.add(new Object[] { i*0.1, 0d,Math.sin(i) }); } /* * Creating and setting the mapper */ MathAxisMapper yMapper = new MathAxisMapper(); MathAxisMapper xMapper = new MathAxisMapper(); MathAxisMapper zMapper = new MathAxisMapper(); yMapper.setRange(-2, 2); xMapper.setRange(0, 5); zMapper.setRange(-2, 2); /* * Creating and setting axis */ Axis3D axisX = new Axis3DX(xMapper); Axis3D axisY = new Axis3DY(yMapper); Axis3D axisZ = new Axis3DZ(zMapper); axisX.setTitle("Z"); axisY.setTitle("E"); axisZ.setTitle("B"); /* * Creating the grid */ Grid3D grid_xy = new Grid3D(xMapper, yMapper, Grid3D.GridOrientation.XY); Grid3D grid_xz = new Grid3D(xMapper, zMapper, Grid3D.GridOrientation.XZ); Grid3D grid_yz = new Grid3D(yMapper, zMapper, Grid3D.GridOrientation.YZ); /* * Creating and setting series */ Line3DSeries series2 = new Line3DSeries(model2, xMapper, yMapper, zMapper); series2.setStrategy(Line3DStrategies.DIRECT_LINE_STRATEGY); ((Line3DStrategy) series2.getStrategy()).setLineWidth(0.02); series2.getPaintStyle().setForeground(Color.black.darker()); Line3DSeries series4 = new Line3DSeries(model4, xMapper, yMapper, zMapper); series4.setStrategy(Line3DStrategies.SPLINE_STRATEGY); ((Line3DStrategy) series4.getStrategy()).setLineWidth(0.02); series4.getPaintStyle().setForeground(Color.green.darker()); Line3DSeries series5 = new Line3DSeries(model5, xMapper, yMapper, zMapper); series5.setStrategy(Line3DStrategies.SPLINE_STRATEGY); ((Line3DStrategy) series5.getStrategy()).setLineWidth(0.02); series5.getPaintStyle().setForeground(Color.blue.darker()); /* * Creating chart */ Chart3D chart = new Chart3D(); chart.addPlugin(new ChartRotator()); chart.addPlugin(new ChartZoomer()); chart.setObjects(new ChartObject[] { series2, series4,series5, grid_xy, grid_xz, grid_yz }); chart.setAxis(axisX, axisY, axisZ); // setting scaling ((SimpleProjector3D) chart.projector()).setViewScaling(0.5525, 0.621, 0.621); // setting rotation angle ((SimpleProjector3D) chart.projector()).setRotationAngle(-0.45399); // setting elevation angle ((SimpleProjector3D) chart.projector()).setElevationAngle(0.346); /* * Creating title */ LabeledChart m_chart = new LabeledChart(chart); m_chart.setTitle("Electromagnetic Wave Simulation"); m_chartPanel = new JChartPanel(m_chart); } public static void main(String[] args) { Spline3DDemo frame = new Spline3DDemo(); frame.setSize(new Dimension(490, 450)); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); frame.setTitle("Electromagnetic Wave Simulation"); frame.setVisible(true); } } |
This Series represents each data model value as a point in chart.
Setting Scatter3D series:
series.setStrategy(Line3DStrategies.SCATTER_STRATEGY); |
Figure 4.2.2.4 3D Scatter Demonstration
1 | import java.awt.*; import javax.swing.JFrame; import lt.monarch.chart.chart3D.Chart3D; import lt.monarch.chart.chart3D.axis.*; import lt.monarch.chart.chart3D.engine.*; import lt.monarch.chart.chart3D.series.*; import lt.monarch.chart.engine.ChartObject; import lt.monarch.chart.mapper.MathAxisMapper; import lt.monarch.chart.marker.DotMarker3D; import lt.monarch.chart.models.ChartDataModel; import lt.monarch.chart.plugins.*; import lt.monarch.chart.swing.JChartPanel; import lt.monarch.chart.view.LabeledChart; public class ScatterLine3DDemo extends JFrame { private transient JChartPanel m_chartPanel; public ScatterLine3DDemo() { setLayout(new BorderLayout()); initChart(); add(m_chartPanel, BorderLayout.CENTER); } protected void initChart() { /* * Creating the data */ ChartDataModel model = new ChartDataModel(3); model.add(new Object[] { 0d, 0d, 0d }); model.add(new Object[] { 0d, 0d, 1d }); model.add(new Object[] { 0d, 1d, 0d }); model.add(new Object[] { 1d, 0d, 0d }); model.add(new Object[] { 1d, 0d, 1d }); model.add(new Object[] { 1d, 1d, 0d }); model.add(new Object[] { 0d, 1d, 1d }); model.add(new Object[] { 1d, 1d, 1d }); model.add(new Object[] { 0.5d, 0.5d, 0.5d }); ChartDataModel model2 = new ChartDataModel(3); model2.add(new Object[] { 0d, 0d, 0d }); model2.add(new Object[] { 0d, 0d, 1d }); model2.add(new Object[] { 0d, 1d, 1d }); model2.add(new Object[] { 0d, 1d, 0d }); model2.add(new Object[] { 0d, 0d, 0d }); model2.add(new Object[] { 1d, 0d, 0d }); model2.add(new Object[] { 1d, 0d, 1d }); model2.add(new Object[] { 1d, 1d, 1d }); model2.add(new Object[] { 1d, 1d, 0d }); model2.add(new Object[] { 1d, 0d, 0d }); model2.add(new Object[] { 1d, 0d, 1d }); model2.add(new Object[] { 1d, 1d, 1d }); model2.add(new Object[] { 0d, 1d, 1d }); model2.add(new Object[] { 0d, 1d, 0d }); model2.add(new Object[] { 1d, 1d, 0d }); model2.add(new Object[] { 1d, 0d, 0d }); model2.add(new Object[] { 1d, 0d, 1d }); model2.add(new Object[] { 0d, 0d, 1d }); ChartDataModel model3 = new ChartDataModel(3); model3.add(new Object[] { 0.5d, 0.5d, 0.5d }); ChartDataModel model4 = new ChartDataModel(3); model4.add(new Object[] { 0.5d, 0.5d, 0.5d }); model4.add(new Object[] { 0d, 0d, 0d }); model4.add(new Object[] { 0.5d, 0.5d, 0.5d }); model4.add(new Object[] { 0d, 0d, 1d }); model4.add(new Object[] { 0.5d, 0.5d, 0.5d }); model4.add(new Object[] { 0d, 1d, 0d }); model4.add(new Object[] { 0.5d, 0.5d, 0.5d }); model4.add(new Object[] { 1d, 0d, 0d }); model4.add(new Object[] { 0.5d, 0.5d, 0.5d }); model4.add(new Object[] { 1d, 0d, 1d }); model4.add(new Object[] { 0.5d, 0.5d, 0.5d }); model4.add(new Object[] { 1d, 1d, 0d }); model4.add(new Object[] { 0.5d, 0.5d, 0.5d }); model4.add(new Object[] { 0d, 1d, 1d }); model4.add(new Object[] { 0.5d, 0.5d, 0.5d }); model4.add(new Object[] { 1d, 1d, 1d }); model4.add(new Object[] { 0.5d, 0.5d, 0.5d }); /* * Creating and setting the mapper */ MathAxisMapper yMapper = new MathAxisMapper(); MathAxisMapper xMapper = new MathAxisMapper(); MathAxisMapper zMapper = new MathAxisMapper(); yMapper.setRange(0, 1); xMapper.setRange(0, 1); zMapper.setRange(0, 1); /* * Creating and setting axis */ Axis3D axisX = new Axis3DX(xMapper); Axis3D axisY = new Axis3DY(yMapper); Axis3D axisZ = new Axis3DZ(zMapper); axisX.setTitle("x"); axisY.setTitle("y"); axisZ.setTitle("z"); /* * Creating the grid */ Grid3D grid_xy = new Grid3D(xMapper, yMapper, Grid3D.GridOrientation.XY); Grid3D grid_xz = new Grid3D(xMapper, zMapper, Grid3D.GridOrientation.XZ); Grid3D grid_yz = new Grid3D(yMapper, zMapper, Grid3D.GridOrientation.YZ); /* * Creating and setting series */ Line3DSeries series = new Line3DSeries(model, xMapper, yMapper, zMapper); series.setStrategy(Line3DStrategies.SCATTER_STRATEGY); DotMarker3D m = new DotMarker3D(); m.style.setBackground(Color.red.darker()); series.addMarker(m); Line3DSeries series3 = new Line3DSeries(model3, xMapper, yMapper, zMapper); series3.setStrategy(Line3DStrategies.SCATTER_STRATEGY); DotMarker3D m2 = new DotMarker3D(); m2.style.setBackground(Color.green.darker()); series3.addMarker(m2); Line3DSeries series2 = new Line3DSeries(model2, xMapper, yMapper, zMapper); series2.setStrategy(Line3DStrategies.DIRECT_LINE_STRATEGY); ((Line3DStrategy) series2.getStrategy()).setLineWidth(0.02); series2.getPaintStyle().setForeground(Color.gray.darker()); Line3DSeries series4 = new Line3DSeries(model4, xMapper, yMapper, zMapper); series4.setStrategy(Line3DStrategies.DIRECT_LINE_STRATEGY); ((Line3DStrategy) series4.getStrategy()).setLineWidth(0.02); series4.getPaintStyle().setForeground(Color.gray.darker()); /* * Creating chart */ Chart3D chart = new Chart3D(); chart.addPlugin(new ChartRotator()); chart.addPlugin(new ChartZoomer()); chart.setObjects(new ChartObject[] { series, series2, series3, series4, grid_xy, grid_xz, grid_yz }); chart.setAxis(axisX, axisY, axisZ); // setting rotation angle ((SimpleProjector3D) chart.projector()).setRotationAngle(-0.45399); // setting elevation angle ((SimpleProjector3D) chart.projector()).setElevationAngle(0.146); /* * Creating title */ LabeledChart m_chart = new LabeledChart(chart); m_chart.setTitle("Body Centered Cubic"); m_chartPanel = new JChartPanel(m_chart); System.gc(); } public static void main(String[] args) { ScatterLine3DDemo frame = new ScatterLine3DDemo(); frame.setSize(new Dimension(490, 450)); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); frame.setTitle("Body Centered Cubic"); frame.setVisible(true); } } |