This series uses ChartDataModel as its data model. There are several types of LineSeries. They can be set using enumeration LineStrategies. In order to draw various series, you need to use enumeration LineStrategies to choose appropriate lines’ drawing strategy. However, if there is a requirement for a custom type of strategy, it is possible to set it directly to the stylesheet, using tag “strategy”, e.g. style.setObject(“strategy”, new MyStrategy()).
Setting LineSeries object:
1 | // Sets LineSeries object, named line2, where // chartDataModel is an instance of ChartDataModel and contains values which will be // shown on chart // xMapper and yMapper are instances of AxisMapper and will map values from chartDataModel LineSeries lineSeries = new LineSeries(chartDataModel, xMapper, yMapper); |
Scatter Series represents each data value in the data model as a point in a chart, which is set according to KEY (X-axis) and VALUE (Y-axis). KEYS specify horizontal position and VALUES specify vertical position. Furthermore, it is possible to set markers which represent those points in the chart.
Setting Scatter Series:
// setting strategy for object named lineSeries which is an instance of LineSeries lineSeries.setStrategy(LineStrategies.SCATTER_STRATEGY); |
Setting Marker:
// adding dot marker for object named lineSeries which is instance of LineSeries lineSeries.addMarker(new DotMarker()); |
Figure 4.1.1.1 Scatter Line Series Demonstration
1 | import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import javax.swing.JFrame; import lt.monarch.chart.chart2D.Chart2D; import lt.monarch.chart.chart2D.Grid; import lt.monarch.chart.chart2D.HorizontalMarkerLine; import lt.monarch.chart.chart2D.axis.Axis2DX; import lt.monarch.chart.chart2D.axis.Axis2DY; import lt.monarch.chart.chart2D.engine.PlaneMapper2D; import lt.monarch.chart.chart2D.series.LineSeries; import lt.monarch.chart.chart2D.series.LineStrategies; import lt.monarch.chart.engine.ChartObject; import lt.monarch.chart.engine.SimpleHotSpotMap; import lt.monarch.chart.legend.Legend; import lt.monarch.chart.mapper.MathAxisMapper; import lt.monarch.chart.marker.DotMarker; import lt.monarch.chart.models.ChartDataModel; import lt.monarch.chart.style.enums.Alignment; import lt.monarch.chart.swing.JChartPanel; import lt.monarch.chart.view.LabeledChart; public class ScatterSeriesDemo extends JFrame { private transient JChartPanel m_chartPanel; public ScatterSeriesDemo() { setLayout(new BorderLayout()); initChart(); add(m_chartPanel, BorderLayout.CENTER); } protected void initChart() { /* * Creating mappers */ MathAxisMapper xMapper = new MathAxisMapper(-2d, 1010d); MathAxisMapper yMapper = new MathAxisMapper(-4.5d, 1.5d); /* * Creating Data Models */ ChartDataModel data = generateModel(); /* * Creating and setting axes */ Axis2DX xAxis = new Axis2DX(xMapper); xAxis.setTitle("Number of Iterations"); Axis2DY yAxis = new Axis2DY(yMapper); yAxis.setTitle("Values"); /* * Creating and setting series */ LineSeries lineSeries = new LineSeries(data, xMapper, yMapper); // Setting title for series lineSeries.setName("Distribution"); // Setting strategies lineSeries.setStrategy(LineStrategies.SCATTER_STRATEGY); // Setting marker DotMarker marker = new DotMarker(); marker.setMarkerSize(5d); lineSeries.addMarker(marker); // Setting horizontal marker line HorizontalMarkerLine line = new HorizontalMarkerLine(yAxis); line.setLevel(-1.28); line.getPaintStyle().setStroke(new BasicStroke(1)); line.getPaintStyle().setForeground(new Color(230, 124, 110)); line.setLabelPosition(0d, Alignment.LEFT); /* * Creating the grid */ Grid grid = new Grid(new PlaneMapper2D(), null, yMapper); /* * Creating the chart */ Chart2D chart = new Chart2D(); chart.setObjects(new ChartObject[] { grid, lineSeries, line }); chart.setXAxis(xAxis); chart.setYAxis(yAxis); /* * Creating the title */ LabeledChart m_chart = new LabeledChart(chart); m_chart.setTitle("Distribution of Intervals"); /* * Creating legend */ Legend legend = new Legend(chart); legend.setMaxColumns(3); m_chart.setBottomView(legend); m_chartPanel = new JChartPanel(m_chart); m_chartPanel.setHotSpotMap(new SimpleHotSpotMap()); } private ChartDataModel generateModel() { ChartDataModel data = new ChartDataModel(); data.add(new Object[] { 2d, -0.024269231573297183 }); data.add(new Object[] { 2d, 0.0018308658040719957 }); data.add(new Object[] { 6d, -13.227584821514574 }); data.add(new Object[] { 6d, 2.451376761952277 }); data.add(new Object[] { 10d, -7.835571619597531 }); data.add(new Object[] { 10d, 1.2809658017358485 }); data.add(new Object[] { 14d, -4.441683187994636 }); data.add(new Object[] { 14d, 0.6406130481970922 }); data.add(new Object[] { 18d, -1.7039873035810456 }); data.add(new Object[] { 18d, 0.7277597558963962 }); data.add(new Object[] { 22d, -0.7347640868853385 }); data.add(new Object[] { 22d, 0.5328372049899917 }); data.add(new Object[] { 26d, -5.070790480736039 }); data.add(new Object[] { 26d, 0.9785277507289187 }); data.add(new Object[] { 30d, -1.6020126067659208 }); data.add(new Object[] { 30d, 0.5794214063424374 }); data.add(new Object[] { 34d, 0.14658877460757502 }); data.add(new Object[] { 34d, 0.44905974760218725 }); data.add(new Object[] { 38d, -2.863209693026689 }); data.add(new Object[] { 38d, 0.037734453610922314 }); data.add(new Object[] { 42d, -2.751651203387235 }); data.add(new Object[] { 42d, 1.0527221651983485 }); data.add(new Object[] { 46d, -2.550163309600035 }); data.add(new Object[] { 46d, 0.6576834629823991 }); data.add(new Object[] { 50d, -5.010075935172675 }); data.add(new Object[] { 50d, -0.5325238246675497 }); data.add(new Object[] { 54d, -4.103520157115264 }); data.add(new Object[] { 54d, -0.23976665307037637 }); data.add(new Object[] { 58d, -2.564594837552649 }); data.add(new Object[] { 58d, 0.03852103941835172 }); data.add(new Object[] { 62d, -2.5844157256008247 }); data.add(new Object[] { 62d, 0.5548954815266451 }); data.add(new Object[] { 66d, -4.345515682822475 }); data.add(new Object[] { 66d, -0.42554779186669545 }); data.add(new Object[] { 70d, -3.461637763196233 }); data.add(new Object[] { 70d, -0.7216829471433288 }); data.add(new Object[] { 74d, -1.9254945145546833 }); data.add(new Object[] { 74d, 0.45225897293446005 }); data.add(new Object[] { 78d, -2.5001407355628857 }); data.add(new Object[] { 78d, 0.22457120200574288 }); data.add(new Object[] { 82d, -4.017366929632658 }); data.add(new Object[] { 82d, -0.7720240825923199 }); data.add(new Object[] { 86d, -1.5305664908862413 }); data.add(new Object[] { 86d, 0.5278200427857759 }); data.add(new Object[] { 90d, -2.5137055200435308 }); data.add(new Object[] { 90d, -0.4601819626933994 }); data.add(new Object[] { 94d, -2.1685915929912896 }); data.add(new Object[] { 94d, 0.11103920376638499 }); data.add(new Object[] { 98d, -1.8395190429596089 }); data.add(new Object[] { 98d, 0.21311134208582116 }); data.add(new Object[] { 102d, -1.7140793038460573 }); data.add(new Object[] { 102d, 0.33072197536166104 }); data.add(new Object[] { 106d, -3.29526530599702 }); data.add(new Object[] { 106d, -0.8406816173741993 }); data.add(new Object[] { 110d, -1.1602245337940753 }); data.add(new Object[] { 110d, 0.23452407035569656 }); data.add(new Object[] { 114d, -1.8360388876170024 }); data.add(new Object[] { 114d, 0.0947298507632276 }); data.add(new Object[] { 118d, -2.7133639113663346 }); data.add(new Object[] { 118d, -0.6351857583534479 }); data.add(new Object[] { 122d, -1.835394983297284 }); data.add(new Object[] { 122d, -0.17446522858923952 }); data.add(new Object[] { 126d, -1.5488637438266097 }); data.add(new Object[] { 126d, -0.028652424481729666 }); data.add(new Object[] { 130d, -1.7169799194156745 }); data.add(new Object[] { 130d, 0.23046037653003804 }); data.add(new Object[] { 134d, -1.7438947103724718 }); data.add(new Object[] { 134d, 0.03680135974194765 }); data.add(new Object[] { 138d, -2.980306570992279 }); data.add(new Object[] { 138d, -0.8597351960229467 }); data.add(new Object[] { 142d, -2.6715859617338777 }); data.add(new Object[] { 142d, -0.7595835914824884 }); data.add(new Object[] { 146d, -2.554542204243103 }); data.add(new Object[] { 146d, -0.7756473119931604 }); data.add(new Object[] { 150d, -3.4057752042986538 }); data.add(new Object[] { 150d, -1.0884814622412202 }); data.add(new Object[] { 154d, -2.6125774176356877 }); data.add(new Object[] { 154d, -0.6053038944133193 }); data.add(new Object[] { 158d, -2.0013527225405827 }); data.add(new Object[] { 158d, -0.4805662671709604 }); data.add(new Object[] { 162d, -0.38610766144215025 }); data.add(new Object[] { 162d, 0.8620485827609313 }); data.add(new Object[] { 166d, -2.2255051632563134 }); data.add(new Object[] { 166d, -0.39154601204756423 }); data.add(new Object[] { 170d, -1.6651941051341943 }); data.add(new Object[] { 170d, -0.11077616469562368 }); data.add(new Object[] { 174d, -2.0277487481313834 }); data.add(new Object[] { 174d, -0.4396125876612573 }); data.add(new Object[] { 178d, -1.6726978487826563 }); data.add(new Object[] { 178d, -0.2932961872427633 }); data.add(new Object[] { 182d, -1.2639853277066824 }); data.add(new Object[] { 182d, 0.05112177973229137 }); data.add(new Object[] { 186d, -2.112534201804314 }); data.add(new Object[] { 186d, -0.5468526812271498 }); data.add(new Object[] { 190d, -1.8629399404871676 }); data.add(new Object[] { 190d, -0.3831308425631933 }); data.add(new Object[] { 194d, -1.4798547410717662 }); data.add(new Object[] { 194d, -0.20168883854252273 }); data.add(new Object[] { 198d, -2.05373270683416 }); data.add(new Object[] { 198d, -0.4677435261959434 }); data.add(new Object[] { 202d, -1.8023026852219812 }); data.add(new Object[] { 202d, -0.3401639883540486 }); data.add(new Object[] { 206d, -3.127676928544566 }); data.add(new Object[] { 206d, -1.269028840810181 }); data.add(new Object[] { 210d, -1.7666201792664804 }); data.add(new Object[] { 210d, -0.22829602146644612 }); data.add(new Object[] { 214d, -2.5854586595018714 }); data.add(new Object[] { 214d, -0.797233531622565 }); data.add(new Object[] { 218d, -1.7910319874543204 }); data.add(new Object[] { 218d, -0.24753408204091976 }); data.add(new Object[] { 222d, -3.138988031909643 }); data.add(new Object[] { 222d, -1.2629039263539634 }); data.add(new Object[] { 226d, -2.3134863056918507 }); data.add(new Object[] { 226d, -0.6898266006127182 }); data.add(new Object[] { 230d, -2.1836996763328207 }); data.add(new Object[] { 230d, -0.6000726107269488 }); data.add(new Object[] { 234d, -1.4262851108956833 }); data.add(new Object[] { 234d, -0.07553384891443138 }); data.add(new Object[] { 238d, -2.410603762133934 }); data.add(new Object[] { 238d, -0.8180689857077345 }); data.add(new Object[] { 242d, -2.2939796676671698 }); data.add(new Object[] { 242d, -0.6691303161101738 }); data.add(new Object[] { 246d, -1.8204486088186833 }); data.add(new Object[] { 246d, -0.4817440146532185 }); data.add(new Object[] { 250d, -1.41528503986366 }); data.add(new Object[] { 250d, -0.26749152679497334 }); data.add(new Object[] { 254d, -1.972238320736617 }); data.add(new Object[] { 254d, -0.5045134350164993 }); data.add(new Object[] { 258d, -2.005570225104813 }); data.add(new Object[] { 258d, -0.5374335224107202 }); data.add(new Object[] { 262d, -1.7950622967659635 }); data.add(new Object[] { 262d, -0.574804687579587 }); data.add(new Object[] { 266d, -2.053838699497786 }); data.add(new Object[] { 266d, -0.6389541394968865 }); data.add(new Object[] { 270d, -1.556693903475777 }); data.add(new Object[] { 270d, -0.34686795418493477 }); data.add(new Object[] { 274d, -1.7738032222151001 }); data.add(new Object[] { 274d, -0.45318564833882646 }); data.add(new Object[] { 278d, -2.8380945401492887 }); data.add(new Object[] { 278d, -1.2513453357081774 }); data.add(new Object[] { 282d, -2.365955560663226 }); data.add(new Object[] { 282d, -0.9747986519458491 }); data.add(new Object[] { 286d, -1.2706615716841538 }); data.add(new Object[] { 286d, -0.21348349127858868 }); data.add(new Object[] { 290d, -2.0192255119428255 }); data.add(new Object[] { 290d, -0.7454356011521273 }); data.add(new Object[] { 294d, -2.2959375947973726 }); data.add(new Object[] { 294d, -0.9310019212637598 }); data.add(new Object[] { 298d, -1.4223493926207564 }); data.add(new Object[] { 298d, -0.29603890353854523 }); data.add(new Object[] { 302d, -2.6174838828075853 }); data.add(new Object[] { 302d, -1.1868046697621928 }); data.add(new Object[] { 306d, -2.2546033460971864 }); data.add(new Object[] { 306d, -0.7764590969622372 }); data.add(new Object[] { 310d, -2.349145516985864 }); data.add(new Object[] { 310d, -0.8881461999501254 }); data.add(new Object[] { 314d, -2.413093732308297 }); data.add(new Object[] { 314d, -1.0560769802663525 }); data.add(new Object[] { 318d, -2.0675032194835006 }); data.add(new Object[] { 318d, -0.8486715377866264 }); data.add(new Object[] { 322d, -2.257449982515148 }); data.add(new Object[] { 322d, -0.9331186394872318 }); data.add(new Object[] { 326d, -1.908865373742125 }); data.add(new Object[] { 326d, -0.7211118356927442 }); data.add(new Object[] { 330d, -2.051204611244668 }); data.add(new Object[] { 330d, -0.8130657130946252 }); data.add(new Object[] { 334d, -2.341248731853234 }); data.add(new Object[] { 334d, -1.0395596222608696 }); data.add(new Object[] { 338d, -1.5942291557856851 }); data.add(new Object[] { 338d, -0.45765091171824046 }); data.add(new Object[] { 342d, -1.9287000568582875 }); data.add(new Object[] { 342d, -0.7664123319747677 }); data.add(new Object[] { 346d, -1.8246170589522692 }); data.add(new Object[] { 346d, -0.6828495736825771 }); data.add(new Object[] { 350d, -1.3751463242848656 }); data.add(new Object[] { 350d, -0.2954651528661739 }); data.add(new Object[] { 354d, -2.2278421280187555 }); data.add(new Object[] { 354d, -0.9063589668867282 }); data.add(new Object[] { 358d, -1.3205999485049533 }); data.add(new Object[] { 358d, -0.2942999805610006 }); data.add(new Object[] { 362d, -1.5939874985193465 }); data.add(new Object[] { 362d, -0.454009974836432 }); data.add(new Object[] { 366d, -2.027601225654561 }); data.add(new Object[] { 366d, -0.8260950160744155 }); data.add(new Object[] { 370d, -1.861880706435338 }); data.add(new Object[] { 370d, -0.6138352768477384 }); data.add(new Object[] { 374d, -1.5417545707477052 }); data.add(new Object[] { 374d, -0.36669158471504293 }); data.add(new Object[] { 378d, -2.3978816216740624 }); data.add(new Object[] { 378d, -1.1909236155970664 }); data.add(new Object[] { 382d, -1.6062480191280861 }); data.add(new Object[] { 382d, -0.5461053194016712 }); data.add(new Object[] { 386d, -2.1793030005283422 }); data.add(new Object[] { 386d, -1.0209547287901906 }); data.add(new Object[] { 390d, -1.841760182012163 }); data.add(new Object[] { 390d, -0.759461518596411 }); data.add(new Object[] { 394d, -1.6081419704594895 }); data.add(new Object[] { 394d, -0.562696282020482 }); data.add(new Object[] { 398d, -2.085555307483987 }); data.add(new Object[] { 398d, -0.8704792649825015 }); data.add(new Object[] { 402d, -1.2167379572852508 }); data.add(new Object[] { 402d, -0.3380912878944238 }); data.add(new Object[] { 406d, -1.5304080235054274 }); data.add(new Object[] { 406d, -0.4823244164962438 }); data.add(new Object[] { 410d, -2.1308706490190663 }); data.add(new Object[] { 410d, -0.8952490627088635 }); data.add(new Object[] { 414d, -1.9801551417783225 }); data.add(new Object[] { 414d, -0.8058090805525919 }); data.add(new Object[] { 418d, -1.6779386105733303 }); data.add(new Object[] { 418d, -0.6238130414632169 }); data.add(new Object[] { 422d, -1.927968524768851 }); data.add(new Object[] { 422d, -0.8647135802093143 }); data.add(new Object[] { 426d, -1.9676223000871886 }); data.add(new Object[] { 426d, -0.8908883299421106 }); data.add(new Object[] { 430d, -1.2199549489696508 }); data.add(new Object[] { 430d, -0.3754745764675423 }); data.add(new Object[] { 434d, -1.5165603652947 }); data.add(new Object[] { 434d, -0.46637421323939876 }); data.add(new Object[] { 438d, -2.2528272589531477 }); data.add(new Object[] { 438d, -0.980901345009163 }); data.add(new Object[] { 442d, -2.099400040029588 }); data.add(new Object[] { 442d, -0.9631107323446995 }); data.add(new Object[] { 446d, -2.2232073107141854 }); data.add(new Object[] { 446d, -1.0850163903095882 }); data.add(new Object[] { 450d, -1.369351644531399 }); data.add(new Object[] { 450d, -0.4623931451332024 }); data.add(new Object[] { 454d, -1.9362011548352396 }); data.add(new Object[] { 454d, -0.9248277354909968 }); data.add(new Object[] { 458d, -1.272982262217329 }); data.add(new Object[] { 458d, -0.2605461954919003 }); data.add(new Object[] { 462d, -1.9927817573641333 }); data.add(new Object[] { 462d, -0.9555678018415874 }); data.add(new Object[] { 466d, -1.7599759014223408 }); data.add(new Object[] { 466d, -0.684728175554904 }); data.add(new Object[] { 470d, -2.201884670620471 }); data.add(new Object[] { 470d, -1.0093034595345225 }); data.add(new Object[] { 474d, -2.025079909213445 }); data.add(new Object[] { 474d, -0.9290989950698317 }); data.add(new Object[] { 478d, -2.1150087571347496 }); data.add(new Object[] { 478d, -0.976231563316913 }); data.add(new Object[] { 482d, -1.3490496025705325 }); data.add(new Object[] { 482d, -0.4706509589096221 }); data.add(new Object[] { 486d, -1.6378981966683235 }); data.add(new Object[] { 486d, -0.6627566278769959 }); data.add(new Object[] { 490d, -1.5300902697267027 }); data.add(new Object[] { 490d, -0.6344520084189512 }); data.add(new Object[] { 494d, -1.7369305313888042 }); data.add(new Object[] { 494d, -0.8086185210740423 }); data.add(new Object[] { 498d, -1.4356821303184546 }); data.add(new Object[] { 498d, -0.4931383273455192 }); data.add(new Object[] { 502d, -1.4833019315987686 }); data.add(new Object[] { 502d, -0.5927865482216965 }); data.add(new Object[] { 506d, -1.3623166342700213 }); data.add(new Object[] { 506d, -0.48954583916422656 }); data.add(new Object[] { 510d, -2.5454474496370487 }); data.add(new Object[] { 510d, -1.3609475550397925 }); data.add(new Object[] { 514d, -1.4711166943957454 }); data.add(new Object[] { 514d, -0.5719192283326742 }); data.add(new Object[] { 518d, -1.825460019655268 }); data.add(new Object[] { 518d, -0.8241278899289413 }); data.add(new Object[] { 522d, -1.4625939878681353 }); data.add(new Object[] { 522d, -0.5016470485653894 }); data.add(new Object[] { 526d, -1.8235273478983367 }); data.add(new Object[] { 526d, -0.7759494848218528 }); data.add(new Object[] { 530d, -1.7571895112736502 }); data.add(new Object[] { 530d, -0.7906120034701105 }); data.add(new Object[] { 534d, -2.0012558997980525 }); data.add(new Object[] { 534d, -0.9835766009588205 }); data.add(new Object[] { 538d, -2.3371925768090174 }); data.add(new Object[] { 538d, -1.2731823898029424 }); data.add(new Object[] { 542d, -1.314171046596834 }); data.add(new Object[] { 542d, -0.4501172539831589 }); data.add(new Object[] { 546d, -1.3705161066750164 }); data.add(new Object[] { 546d, -0.5211449363624976 }); data.add(new Object[] { 550d, -1.85887995490581 }); data.add(new Object[] { 550d, -0.854697221598869 }); data.add(new Object[] { 554d, -1.6435868973158152 }); data.add(new Object[] { 554d, -0.749882467196594 }); data.add(new Object[] { 558d, -1.5615939013320914 }); data.add(new Object[] { 558d, -0.7131082866648151 }); data.add(new Object[] { 562d, -2.301554052597219 }); data.add(new Object[] { 562d, -1.2516583166777324 }); data.add(new Object[] { 566d, -2.05320351333594 }); data.add(new Object[] { 566d, -1.0689157831229055 }); data.add(new Object[] { 570d, -1.9490902599722686 }); data.add(new Object[] { 570d, -0.982804259578538 }); data.add(new Object[] { 574d, -1.7783996020667123 }); data.add(new Object[] { 574d, -0.8358951038679718 }); data.add(new Object[] { 578d, -1.3000720257385596 }); data.add(new Object[] { 578d, -0.4230995863309359 }); data.add(new Object[] { 582d, -1.8571490713821548 }); data.add(new Object[] { 582d, -0.8911726669860578 }); data.add(new Object[] { 586d, -2.0096214294180865 }); data.add(new Object[] { 586d, -1.0413263461859132 }); data.add(new Object[] { 590d, -2.085584976573737 }); data.add(new Object[] { 590d, -1.0670878464557965 }); data.add(new Object[] { 594d, -1.8550543900125902 }); data.add(new Object[] { 594d, -0.9126890420264818 }); data.add(new Object[] { 598d, -1.828793276723646 }); data.add(new Object[] { 598d, -0.8729796838914707 }); data.add(new Object[] { 602d, -2.2776273848480297 }); data.add(new Object[] { 602d, -1.2687214230864612 }); data.add(new Object[] { 606d, -1.8594482451829468 }); data.add(new Object[] { 606d, -0.890853359378423 }); data.add(new Object[] { 610d, -1.8173600911216952 }); data.add(new Object[] { 610d, -0.844751965439577 }); data.add(new Object[] { 614d, -1.6831684328093868 }); data.add(new Object[] { 614d, -0.7767318847802098 }); data.add(new Object[] { 618d, -1.5860339353577628 }); data.add(new Object[] { 618d, -0.7392384479586682 }); data.add(new Object[] { 622d, -1.7917544308408133 }); data.add(new Object[] { 622d, -0.8768070254008844 }); data.add(new Object[] { 626d, -1.4491106274849825 }); data.add(new Object[] { 626d, -0.623194892404096 }); data.add(new Object[] { 630d, -1.2827487925355592 }); data.add(new Object[] { 630d, -0.521562114800312 }); data.add(new Object[] { 634d, -1.6974337991845283 }); data.add(new Object[] { 634d, -0.823963211499936 }); data.add(new Object[] { 638d, -1.779131354076133 }); data.add(new Object[] { 638d, -0.8758997371912163 }); data.add(new Object[] { 642d, -2.4793865064793943 }); data.add(new Object[] { 642d, -1.4716212541144678 }); data.add(new Object[] { 646d, -1.896486954798022 }); data.add(new Object[] { 646d, -0.9615531034347209 }); data.add(new Object[] { 650d, -1.2631171339736433 }); data.add(new Object[] { 650d, -0.4744754987616582 }); data.add(new Object[] { 654d, -2.0824706145068106 }); data.add(new Object[] { 654d, -1.1186732267925343 }); data.add(new Object[] { 658d, -1.3513250359442828 }); data.add(new Object[] { 658d, -0.5730426033048731 }); data.add(new Object[] { 662d, -1.3565558199961112 }); data.add(new Object[] { 662d, -0.5823908445518444 }); data.add(new Object[] { 666d, -1.4341644794828667 }); data.add(new Object[] { 666d, -0.6260169741267534 }); data.add(new Object[] { 670d, -1.6929789735571021 }); data.add(new Object[] { 670d, -0.8384887656877278 }); data.add(new Object[] { 674d, -1.9130169890147088 }); data.add(new Object[] { 674d, -1.0171377839854123 }); data.add(new Object[] { 678d, -1.4398627591208442 }); data.add(new Object[] { 678d, -0.6258168301159088 }); data.add(new Object[] { 682d, -1.620747250005241 }); data.add(new Object[] { 682d, -0.7388174891685433 }); data.add(new Object[] { 686d, -1.1923954485562969 }); data.add(new Object[] { 686d, -0.41817761536153414 }); data.add(new Object[] { 690d, -1.6040842680198921 }); data.add(new Object[] { 690d, -0.756629496343517 }); data.add(new Object[] { 694d, -1.2441728436479975 }); data.add(new Object[] { 694d, -0.4824520582225188 }); data.add(new Object[] { 698d, -2.177622592049606 }); data.add(new Object[] { 698d, -1.2064762331705032 }); data.add(new Object[] { 702d, -1.903565054909193 }); data.add(new Object[] { 702d, -1.0009530937605844 }); data.add(new Object[] { 706d, -1.4780982747142752 }); data.add(new Object[] { 706d, -0.6835546806564257 }); data.add(new Object[] { 710d, -2.2256040955457546 }); data.add(new Object[] { 710d, -1.2996362884548276 }); data.add(new Object[] { 714d, -1.1916497725169901 }); data.add(new Object[] { 714d, -0.4373050428575651 }); data.add(new Object[] { 718d, -1.4968151456397822 }); data.add(new Object[] { 718d, -0.6977404006719947 }); data.add(new Object[] { 722d, -1.914717196958668 }); data.add(new Object[] { 722d, -1.0044814349672992 }); data.add(new Object[] { 726d, -1.6547909345470027 }); data.add(new Object[] { 726d, -0.7988373246379887 }); data.add(new Object[] { 730d, -1.2948458262944589 }); data.add(new Object[] { 730d, -0.5150678073195853 }); data.add(new Object[] { 734d, -1.217053972342416 }); data.add(new Object[] { 734d, -0.4850520238847525 }); data.add(new Object[] { 738d, -1.9378965195602187 }); data.add(new Object[] { 738d, -1.0912819635228592 }); data.add(new Object[] { 742d, -2.1493486091951537 }); data.add(new Object[] { 742d, -1.2566949177540236 }); data.add(new Object[] { 746d, -1.7131310794381 }); data.add(new Object[] { 746d, -0.8660775110868755 }); data.add(new Object[] { 750d, -2.453770272349054 }); data.add(new Object[] { 750d, -1.4891235087034755 }); data.add(new Object[] { 754d, -2.0883397856793193 }); data.add(new Object[] { 754d, -1.161829618424183 }); data.add(new Object[] { 758d, -1.7593226451991604 }); data.add(new Object[] { 758d, -0.9080010557677598 }); data.add(new Object[] { 762d, -1.870203921660333 }); data.add(new Object[] { 762d, -1.0166415603377157 }); data.add(new Object[] { 766d, -1.48566284293787 }); data.add(new Object[] { 766d, -0.7128946338853022 }); data.add(new Object[] { 770d, -1.4856604040765384 }); data.add(new Object[] { 770d, -0.7384884938590692 }); data.add(new Object[] { 774d, -1.3998245742647242 }); data.add(new Object[] { 774d, -0.6490057501495008 }); data.add(new Object[] { 778d, -1.84188959235824 }); data.add(new Object[] { 778d, -1.0083740165085397 }); data.add(new Object[] { 782d, -1.183153838976912 }); data.add(new Object[] { 782d, -0.5013615234858566 }); data.add(new Object[] { 786d, -1.4269519793390943 }); data.add(new Object[] { 786d, -0.6614021058722728 }); data.add(new Object[] { 790d, -2.2153122466957735 }); data.add(new Object[] { 790d, -1.3493890026612796 }); data.add(new Object[] { 794d, -1.2383471909233037 }); data.add(new Object[] { 794d, -0.4732640514287681 }); data.add(new Object[] { 798d, -1.5338400747919774 }); data.add(new Object[] { 798d, -0.7622951259791322 }); data.add(new Object[] { 802d, -1.322972324163843 }); data.add(new Object[] { 802d, -0.6197514566860953 }); data.add(new Object[] { 806d, -1.157501147053434 }); data.add(new Object[] { 806d, -0.45543092305812927 }); data.add(new Object[] { 810d, -1.7122595366257114 }); data.add(new Object[] { 810d, -0.9217515443461353 }); data.add(new Object[] { 814d, -1.7810709786839163 }); data.add(new Object[] { 814d, -0.9679209918632957 }); data.add(new Object[] { 818d, -1.5800422281226414 }); data.add(new Object[] { 818d, -0.8298601537178958 }); data.add(new Object[] { 822d, -1.4427541040470326 }); data.add(new Object[] { 822d, -0.681043190363698 }); data.add(new Object[] { 826d, -2.052879422811527 }); data.add(new Object[] { 826d, -1.2271416251348959 }); data.add(new Object[] { 830d, -1.2604085667012765 }); data.add(new Object[] { 830d, -0.5783610694248744 }); data.add(new Object[] { 834d, -1.7146291929971236 }); data.add(new Object[] { 834d, -0.9613684234100205 }); data.add(new Object[] { 838d, -1.4065210254673741 }); data.add(new Object[] { 838d, -0.7031366762882372 }); data.add(new Object[] { 842d, -1.6786379447810202 }); data.add(new Object[] { 842d, -0.8992887438990413 }); data.add(new Object[] { 846d, -2.01276774844026 }); data.add(new Object[] { 846d, -1.1984670562517974 }); data.add(new Object[] { 850d, -1.9389055055271027 }); data.add(new Object[] { 850d, -1.072084857823701 }); data.add(new Object[] { 854d, -1.4613318946702765 }); data.add(new Object[] { 854d, -0.7292593984036674 }); data.add(new Object[] { 858d, -1.7621039448878992 }); data.add(new Object[] { 858d, -0.9671045346875599 }); data.add(new Object[] { 862d, -1.5896998801015128 }); data.add(new Object[] { 862d, -0.8132702039208308 }); data.add(new Object[] { 866d, -1.522511240341405 }); data.add(new Object[] { 866d, -0.7469277014147664 }); data.add(new Object[] { 870d, -1.0686650709675904 }); data.add(new Object[] { 870d, -0.39706259936969324 }); data.add(new Object[] { 874d, -1.7208452950899693 }); data.add(new Object[] { 874d, -0.9214747635108076 }); data.add(new Object[] { 878d, -1.1453163654397678 }); data.add(new Object[] { 878d, -0.5101071718157588 }); data.add(new Object[] { 882d, -1.5478172098339744 }); data.add(new Object[] { 882d, -0.8228174744761035 }); data.add(new Object[] { 886d, -1.7811636639984845 }); data.add(new Object[] { 886d, -1.0307391513379685 }); data.add(new Object[] { 890d, -1.7268090925873985 }); data.add(new Object[] { 890d, -0.9712166371670171 }); data.add(new Object[] { 894d, -1.5192964006406018 }); data.add(new Object[] { 894d, -0.8180183070203921 }); data.add(new Object[] { 898d, -1.1362270675987225 }); data.add(new Object[] { 898d, -0.45612952556747577 }); data.add(new Object[] { 902d, -1.5890694967702426 }); data.add(new Object[] { 902d, -0.8828100074262419 }); data.add(new Object[] { 906d, -1.7626906018832122 }); data.add(new Object[] { 906d, -1.0076370760364268 }); data.add(new Object[] { 910d, -1.1218139665700617 }); data.add(new Object[] { 910d, -0.47853181593651695 }); data.add(new Object[] { 914d, -0.9956292627224053 }); data.add(new Object[] { 914d, -0.3646545212057102 }); data.add(new Object[] { 918d, -1.4364135753602012 }); data.add(new Object[] { 918d, -0.7696648440163552 }); data.add(new Object[] { 922d, -1.5684818012006856 }); data.add(new Object[] { 922d, -0.8157462943161659 }); data.add(new Object[] { 926d, -1.6005197806822171 }); data.add(new Object[] { 926d, -0.8923977715280287 }); data.add(new Object[] { 930d, -1.8073158348345246 }); data.add(new Object[] { 930d, -1.049549257700781 }); data.add(new Object[] { 934d, -1.1778287584857794 }); data.add(new Object[] { 934d, -0.5097305968628644 }); data.add(new Object[] { 938d, -1.5437056095915194 }); data.add(new Object[] { 938d, -0.7921033328507179 }); data.add(new Object[] { 942d, -1.2996350756031698 }); data.add(new Object[] { 942d, -0.6446119610205072 }); data.add(new Object[] { 946d, -1.942880800002078 }); data.add(new Object[] { 946d, -1.1486549369638892 }); data.add(new Object[] { 950d, -1.4081577693126686 }); data.add(new Object[] { 950d, -0.7151041087894823 }); data.add(new Object[] { 954d, -1.5159086293177113 }); data.add(new Object[] { 954d, -0.8049456771328054 }); data.add(new Object[] { 958d, -1.7001070174473443 }); data.add(new Object[] { 958d, -0.9537677567669289 }); data.add(new Object[] { 962d, -1.4602565880658447 }); data.add(new Object[] { 962d, -0.8135026941351109 }); data.add(new Object[] { 966d, -1.4995112806395121 }); data.add(new Object[] { 966d, -0.7929606144737137 }); data.add(new Object[] { 970d, -1.8437080366738916 }); data.add(new Object[] { 970d, -1.0585482723060482 }); data.add(new Object[] { 974d, -1.743550027334623 }); data.add(new Object[] { 974d, -1.0144077725733607 }); data.add(new Object[] { 978d, -1.5726499619585363 }); data.add(new Object[] { 978d, -0.8534846015147621 }); data.add(new Object[] { 982d, -1.779086846843904 }); data.add(new Object[] { 982d, -1.0457617393517775 }); data.add(new Object[] { 986d, -1.6193129837524096 }); data.add(new Object[] { 986d, -0.9214741800838873 }); data.add(new Object[] { 990d, -1.3356151728430439 }); data.add(new Object[] { 990d, -0.6613990201075985 }); data.add(new Object[] { 994d, -1.9073984699839954 }); data.add(new Object[] { 994d, -1.15290213074094 }); data.add(new Object[] { 998d, -1.8126945976525177 }); data.add(new Object[] { 998d, -1.0986656857710262 }); return data; } public static void main(String[] args) { ScatterSeriesDemo frame = new ScatterSeriesDemo(); frame.setSize(new Dimension(600, 400)); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); frame.setTitle("Distribution of Intervals"); frame.setVisible(true); } } |
For more information about markers, see chapter 5.6 Markers.
Stepped Line Series is a series where two neighbor points are connected indirectly. This is done in such manner:
Thus, we have two points connected in an indirect way.
Setting Stepped line Series:
// setting strategy for object named connectedSeries1 which is an instance of LineSeries connectedSeries1.setStrategy(LineStrategies.STEPPED_LINE_STRATEGY); |
Figure 4.1.1.2 Stepped Line Series Demonstration
1 | import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import javax.swing.JFrame; import lt.monarch.chart.chart2D.Chart2D; import lt.monarch.chart.chart2D.Grid; import lt.monarch.chart.chart2D.axis.Axis2DX; import lt.monarch.chart.chart2D.axis.Axis2DY; import lt.monarch.chart.chart2D.engine.PlaneMapper2D; import lt.monarch.chart.chart2D.series.LineSeries; import lt.monarch.chart.chart2D.series.LineStrategies; import lt.monarch.chart.engine.ChartObject; import lt.monarch.chart.engine.SimpleHotSpotMap; 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.swing.JChartPanel; import lt.monarch.chart.view.LabeledChart; public class SteppedLineSeriesDemo extends JFrame { private transient JChartPanel m_chartPanel; public SteppedLineSeriesDemo() { setLayout(new BorderLayout()); initChart(); add(m_chartPanel, BorderLayout.CENTER); } protected void initChart() { /* * Creating mappers */ LabelAxisMapper xMapper = new LabelAxisMapper(); xMapper.registerKey("Jan"); xMapper.registerKey("Feb"); xMapper.registerKey("Mar"); xMapper.registerKey("Apr"); xMapper.registerKey("May"); xMapper.registerKey("Jun"); xMapper.registerKey("Jul"); xMapper.registerKey("Aug"); xMapper.registerKey("Sep"); xMapper.registerKey("Oct"); xMapper.registerKey("Nov"); xMapper.registerKey("Dec"); MathAxisMapper yMapper = new MathAxisMapper(100d, 130d); /* * Creating Data Models */ ChartDataModel data2007 = new ChartDataModel(); data2007.add(new Object[] { "Jan", 106.0312 }); data2007.add(new Object[] { "Feb", 106.3619 }); data2007.add(new Object[] { "Mar", 106.9551 }); data2007.add(new Object[] { "Apr", 107.8769 }); data2007.add(new Object[] { "May", 108.3892 }); data2007.add(new Object[] { "Jun", 108.6474 }); data2007.add(new Object[] { "Jul", 109.3750 }); data2007.add(new Object[] { "Aug", 109.7556 }); data2007.add(new Object[] { "Sep", 111.2443 }); data2007.add(new Object[] { "Oct", 112.9100 }); data2007.add(new Object[] { "Nov", 114.0965 }); data2007.add(new Object[] { "Dec", 114.6466 }); ChartDataModel data2008 = new ChartDataModel(2); data2008.add(new Object[] { "Jan", 116.5013 }); data2008.add(new Object[] { "Feb", 117.8037 }); data2008.add(new Object[] { "Mar", 118.9994 }); data2008.add(new Object[] { "Apr", 120.4732 }); data2008.add(new Object[] { "May", 121.4408 }); data2008.add(new Object[] { "Jun", 122.1973 }); data2008.add(new Object[] { "Jul", 122.7025 }); data2008.add(new Object[] { "Aug", 122.9017 }); data2008.add(new Object[] { "Sep", 123.5192 }); data2008.add(new Object[] { "Oct", 124.7568 }); data2008.add(new Object[] { "Nov", 124.4510 }); data2008.add(new Object[] { "Dec", 124.3589 }); /* * Creating and setting axes */ Axis2DX xAxis = new Axis2DX(xMapper); xAxis.setTitle("Month"); Axis2DY yAxis = new Axis2DY(yMapper); yAxis.setTitle("CPI Value"); /* * Creating and setting series */ LineSeries connectedSeries1 = new LineSeries(data2008, xMapper, yMapper); LineSeries connectedSeries2 = new LineSeries(data2007, xMapper, yMapper); // setting titles for series connectedSeries1.setName("2008"); connectedSeries2.setName("2007"); // setting strategies connectedSeries1.setStrategy(LineStrategies.STEPPED_LINE_STRATEGY); connectedSeries2.setStrategy(LineStrategies.STEPPED_LINE_STRATEGY); // setting colours connectedSeries1.getPaintStyle().setForeground(new Color(219, 67, 47)); connectedSeries1.getPaintStyle().setStroke(new BasicStroke(2)); connectedSeries2.getPaintStyle().setForeground(new Color(49, 119, 31)); connectedSeries2.getPaintStyle().setStroke(new BasicStroke(2)); /* * Creating the grid */ Grid grid = new Grid(new PlaneMapper2D(), null, yMapper); /* * Creating the chart */ Chart2D chart = new Chart2D(); chart.setObjects(new ChartObject[] { grid, connectedSeries1, connectedSeries2, /* connectedSeries3 */}); xAxis.setAxisPosition(yAxis, 0); chart.setXAxis(xAxis); chart.setYAxis(yAxis); /* * Creating the title */ LabeledChart m_chart = new LabeledChart(chart); m_chart.setTitle("Monthly CPI as Compared to 2005 in Lithuania"); /* * Creating legend */ Legend legend = new Legend(chart); legend.setMaxColumns(1); m_chart.setRightView(legend); m_chartPanel = new JChartPanel(m_chart); m_chartPanel.setHotSpotMap(new SimpleHotSpotMap()); } public static void main(String[] args) { SteppedLineSeriesDemo frame = new SteppedLineSeriesDemo(); frame.setSize(new Dimension(600, 400)); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); frame.setTitle("Monthly CPI"); frame.setVisible(true); } } |
Direct Line Series is a series, where value points are connected with each other with a straight line.
Setting Direct Line Series:
// setting strategy for object named connectedSeries1 which is an instance of LineSeries connectedSeries1.setStrategy(LineStrategies.DIRECT_LINE_STRATEGY); |
Figure 4.1.1.3 Direct Line Series Demonstration
1 | import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import javax.swing.JFrame; import lt.monarch.chart.chart2D.Chart2D; import lt.monarch.chart.chart2D.Grid; import lt.monarch.chart.chart2D.axis.Axis2DX; import lt.monarch.chart.chart2D.axis.Axis2DY; import lt.monarch.chart.chart2D.engine.PlaneMapper2D; import lt.monarch.chart.chart2D.series.LineSeries; import lt.monarch.chart.chart2D.series.LineStrategies; import lt.monarch.chart.engine.ChartObject; import lt.monarch.chart.engine.SimpleHotSpotMap; 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.swing.JChartPanel; import lt.monarch.chart.view.LabeledChart; public class DirectLineSeriesDemo_wiki extends JFrame { private transient JChartPanel m_chartPanel; public DirectLineSeriesDemo_wiki() { setLayout(new BorderLayout()); initChart(); add(m_chartPanel, BorderLayout.CENTER); } protected void initChart() { /* * Creating mappers */ LabelAxisMapper xMapper = new LabelAxisMapper(); xMapper.registerKey("Jan"); xMapper.registerKey("Feb"); xMapper.registerKey("Mar"); xMapper.registerKey("Apr"); xMapper.registerKey("May"); xMapper.registerKey("Jun"); xMapper.registerKey("Jul"); xMapper.registerKey("Aug"); xMapper.registerKey("Sep"); xMapper.registerKey("Oct"); xMapper.registerKey("Nov"); xMapper.registerKey("Dec"); MathAxisMapper yMapper = new MathAxisMapper(-35d, 15d); /* * Creating Data Models */ ChartDataModel data2006 = new ChartDataModel(); data2006.add(new Object[] { "Jan", new Double(-1) }); data2006.add(new Object[] { "Feb", new Double(7) }); data2006.add(new Object[] { "Mar", new Double(13) }); data2006.add(new Object[] { "Apr", new Double(9) }); data2006.add(new Object[] { "May", new Double(9) }); data2006.add(new Object[] { "Jun", new Double(5) }); data2006.add(new Object[] { "Jul", new Double(3) }); data2006.add(new Object[] { "Aug", new Double(4) }); data2006.add(new Object[] { "Sep", new Double(8) }); data2006.add(new Object[] { "Oct", new Double(7) }); data2006.add(new Object[] { "Nov", new Double(0) }); data2006.add(new Object[] { "Dec", new Double(-7) }); ChartDataModel data2007 = new ChartDataModel(); data2007.add(new Object[] { "Jan", new Double(-5) }); data2007.add(new Object[] { "Feb", new Double(5) }); data2007.add(new Object[] { "Mar", new Double(10) }); data2007.add(new Object[] { "Apr", new Double(14) }); data2007.add(new Object[] { "May", new Double(8) }); data2007.add(new Object[] { "Jun", new Double(9) }); data2007.add(new Object[] { "Jul", new Double(9) }); data2007.add(new Object[] { "Aug", new Double(9) }); data2007.add(new Object[] { "Sep", new Double(7) }); data2007.add(new Object[] { "Oct", new Double(3) }); data2007.add(new Object[] { "Nov", new Double(7) }); data2007.add(new Object[] { "Dec", new Double(-4) }); ChartDataModel data2008 = new ChartDataModel(); data2008.add(new Object[] { "Jan", new Double(-2) }); data2008.add(new Object[] { "Feb", new Double(-2) }); data2008.add(new Object[] { "Mar", new Double(0) }); data2008.add(new Object[] { "Apr", new Double(-5) }); data2008.add(new Object[] { "May", new Double(-1) }); data2008.add(new Object[] { "Jun", new Double(-4) }); data2008.add(new Object[] { "Jul", new Double(-7) }); data2008.add(new Object[] { "Aug", new Double(-7) }); data2008.add(new Object[] { "Sep", new Double(-9) }); data2008.add(new Object[] { "Oct", new Double(-16) }); data2008.add(new Object[] { "Nov", new Double(-29) }); data2008.add(new Object[] { "Dec", new Double(-34) }); /* * Creating and setting axes */ Axis2DX xAxis = new Axis2DX(xMapper); Axis2DY yAxis = new Axis2DY(yMapper); yAxis.setTitle("ICI Value"); /* * Creating and setting series */ LineSeries connectedSeries1 = new LineSeries(data2008, xMapper, yMapper); LineSeries connectedSeries2 = new LineSeries(data2007, xMapper, yMapper); LineSeries connectedSeries3 = new LineSeries(data2006, xMapper, yMapper); // setting titles for series connectedSeries1.setName("2008"); connectedSeries2.setName("2007"); connectedSeries3.setName("2006"); // setting strategies connectedSeries1.setStrategy(LineStrategies.DIRECT_LINE_STRATEGY); connectedSeries2.setStrategy(LineStrategies.DIRECT_LINE_STRATEGY); connectedSeries3.setStrategy(LineStrategies.DIRECT_LINE_STRATEGY); // setting colours connectedSeries1.getPaintStyle().setForeground(new Color(219, 67, 47)); connectedSeries1.getPaintStyle().setStroke(new BasicStroke(2)); connectedSeries2.getPaintStyle().setForeground(new Color(49, 119, 31)); connectedSeries2.getPaintStyle().setStroke(new BasicStroke(2)); connectedSeries3.getPaintStyle().setForeground(new Color(251, 178, 47)); connectedSeries3.getPaintStyle().setStroke(new BasicStroke(2)); /* * Creating the grid */ Grid grid = new Grid(new PlaneMapper2D(), null, yMapper); /* * Creating the chart */ Chart2D chart = new Chart2D(); chart.setObjects(new ChartObject[] { grid, connectedSeries1, connectedSeries2, connectedSeries3 }); xAxis.setAxisPosition(yAxis, 0); chart.setXAxis(xAxis); chart.setYAxis(yAxis); /* * Creating the title */ LabeledChart m_chart = new LabeledChart(chart); m_chart .setTitle("Industrial Confidence Indicator of Lithuania by Month"); /* * Creating legend */ Legend legend = new Legend(chart); legend.setMaxColumns(3); m_chart.setBottomView(legend); m_chartPanel = new JChartPanel(m_chart); m_chartPanel.setHotSpotMap(new SimpleHotSpotMap()); } public static void main(String[] args) { DirectLineSeriesDemo_wiki frame = new DirectLineSeriesDemo_wiki(); frame.setSize(new Dimension(600, 400)); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); frame.setTitle("Direct Line Series Demo"); frame.setVisible(true); } } |
Spline Series is similar to Direct Line Series, but points are connected with curved lines, not straight.
Setting Spline Series:
// setting strategy for object named lineA which is an instance of LineSeries lineA.setStrategy(LineStrategies.SPLINE_STRATEGY); |
Figure 4.1.1.4 Spline Series Demonstration
1 | import java.awt.*; import javax.swing.JFrame; import lt.monarch.chart.chart2D.*; import lt.monarch.chart.chart2D.axis.*; import lt.monarch.chart.chart2D.engine.PlaneMapper2D; import lt.monarch.chart.chart2D.series.*; import lt.monarch.chart.engine.*; import lt.monarch.chart.legend.Legend; import lt.monarch.chart.mapper.*; import lt.monarch.chart.models.*; import lt.monarch.chart.style.enums.*; import lt.monarch.chart.style.tags.SeriesPaintTags; import lt.monarch.chart.swing.JChartPanel; import lt.monarch.chart.view.LabeledChart; public class SplineSeriesDemo extends JFrame { private JChartPanel m_chartPanel; private Chart2D chart; public SplineSeriesDemo() { setLayout(new BorderLayout()); initChart(); add(m_chartPanel, BorderLayout.CENTER); } private void initChart() { /* * Setting Data Models */ ChartDataModel modelZ = generateZModel(); double zMin = getMinValue(modelZ); double zMax = getMaxValue(modelZ); double zRange = zMax - zMin; ChartDataModel modelA = generateAModel(); ChartDataModel modelX = generateXModel(); double xMin = getMinValue(modelA); double xMax = getMaxValue(modelA); double xRange = xMax - xMin; /* * Setting mappers */ String labels[] = { "6881", "6882", "6883", "6884", "6885", "6886", "6887", "6888", "6889", "6890", "6891", "6892", "6893", "6894", "6895", "6896", "6897", "6898", "6899", "6900", "6901", "6902", "6903", "6904", "6905", "6906", "6907" }; LabelAxisMapper xMapper = new LabelAxisMapper(labels); MathAxisMapper zRangeMapper = new MathAxisMapper(zMin - zRange + 3, zMax + zRange - 3); MathAxisMapper xRangeMapper = new MathAxisMapper(xMin - xRange, xMax + xRange); /* * Setting series */ LineSeries lineZ = new LineSeries(modelZ, new PlaneMapper2D(), xMapper, zRangeMapper); lineZ.setValidateData(true); lineZ.setShowNullValues(true); lineZ.setName("Z"); lineZ.getPaintStyle().setForeground(Color.BLACK); lineZ.getPaintStyle().setStroke(new BasicStroke(2)); lineZ.getPaintStyle().setForeground(SeriesPaintTags.DEFAULT, new Color(251, 178, 47)); lineZ.getPaintStyle().setForeground(SeriesPaintTags.NULL, new Color(251, 178, 47)); lineZ.setStrategy(LineStrategies.SPLINE_STRATEGY); LineSeries lineX = new LineSeries(modelX, new PlaneMapper2D(), xMapper, xRangeMapper); lineX.setValidateData(true); lineX.setShowNullValues(true); lineX.setName("X"); lineX.getPaintStyle().setStroke(new BasicStroke(2)); lineX.getPaintStyle().setForeground(SeriesPaintTags.DEFAULT, new Color(49, 119, 31)); lineX.getPaintStyle().setForeground(SeriesPaintTags.NULL, new Color(49, 119, 31)); lineX.setStrategy(LineStrategies.SPLINE_STRATEGY); LineSeries lineA = new LineSeries(modelA, new PlaneMapper2D(), xMapper, xRangeMapper); lineA.setValidateData(true); lineA.setShowNullValues(true); lineA.setName("A"); lineA.getPaintStyle().setStroke(new BasicStroke(2)); lineA.getPaintStyle().setForeground(SeriesPaintTags.DEFAULT, new Color(143, 60, 168)); lineA.getPaintStyle().setForeground(SeriesPaintTags.NULL, new Color(143, 60, 168)); lineA.setStrategy(LineStrategies.SPLINE_STRATEGY); /* * Setting Marker Lines */ HorizontalMarkerLine lineZMin = new HorizontalMarkerLine( new PlaneMapper2D(), zRangeMapper); lineZMin.setLabel("UT"); lineZMin.setLevel(zMin + 1); lineZMin.setLabelPosition(0, Alignment.TOP); lineZMin.getPaintStyle().setStroke(new BasicStroke(1)); HorizontalMarkerLine lineZMax = new HorizontalMarkerLine( new PlaneMapper2D(), zRangeMapper); lineZMax.setLabel("OT"); lineZMax.setLevel(zMax - 1); lineZMax.getPaintStyle().setStroke(new BasicStroke(1)); lineZMax.setLabelPosition(0, Alignment.TOP); /* * Setting Axes */ Axis2DX axisX = new Axis2DX(xMapper); axisX.setTitle("Measurements"); axisX.getTitleSettings().setPosition(TitlePosition.BELOW); axisX.getLabelSettings().setRotationAngle(-0.8); Axis2DY axisY = new Axis2DY(zRangeMapper); axisY.setTitle("Values (Z)"); Axis2DY axisY2 = new Axis2DY(xRangeMapper); axisY2.setTitle("Values (A and X)"); /* * Creating grid */ Grid grid = new Grid(null, zRangeMapper); /* * Creating the chart and add objects */ chart = new Chart2D(); chart.setObjects(new ChartObject[] { grid, lineZ, lineA, lineZMin, lineX, lineZMax }); chart.setYAxis(axisY); chart.setXAxis(axisX); chart.addRightYAxis(axisY2); /* * Set the title of chart */ LabeledChart topChart = new LabeledChart(chart); topChart.setTitle("7er -Serie FRONT und HECKKLAPPE (Inline-Stationen)"); /* * Creating the legend */ Legend legend = new Legend(chart); legend.setMaxColumns(3); legend.style.setBackground(Color.WHITE); topChart.setBottomView(legend); /* * Add topChart to panel */ m_chartPanel = new JChartPanel(topChart); add(m_chartPanel, BorderLayout.CENTER); m_chartPanel.setHotSpotMap(new SimpleHotSpotMap()); } public static void main(String[] args) { SplineSeriesDemo frame = new SplineSeriesDemo(); frame.setSize(new Dimension(600, 400)); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); frame.setTitle("Spline Series Demonstration"); frame.setVisible(true); } private ChartDataModel generateXModel() { ChartDataModel modelX = new ChartDataModel(); modelX.add(new Object[] { "6881", -0.15d }); modelX.add(new Object[] { "6882", -0.23d }); modelX.add(new Object[] { "6883", -0.18d }); modelX.add(new Object[] { "6884", 0.27d }); modelX.add(new Object[] { "6885", -1.02d }); modelX.add(new Object[] { "6886", -1.41d }); modelX.add(new Object[] { "6887", 0.33d }); modelX.add(new Object[] { "6888", 0.04d }); modelX.add(new Object[] { "6889", 0.26d }); modelX.add(new Object[] { "6890", -0.22d }); modelX.add(new Object[] { "6891", -0.61d }); modelX.add(new Object[] { "6892", -0.53d }); modelX.add(new Object[] { "6893", -0.55d }); modelX.add(new Object[] { "6894", -0.26d }); modelX.add(new Object[] { "6895", 0d }); modelX.add(new Object[] { "6896", -0.12d }); modelX.add(new Object[] { "6897", 0.04d }); modelX.add(new Object[] { "6898", null }); modelX.add(new Object[] { "6899", 0.06d }); modelX.add(new Object[] { "6900", null }); modelX.add(new Object[] { "6901", -0.26d }); modelX.add(new Object[] { "6902", null }); modelX.add(new Object[] { "6903", -0.57d }); modelX.add(new Object[] { "6904", -0.48d }); modelX.add(new Object[] { "6905", -0.57d }); modelX.add(new Object[] { "6906", -1.63d }); modelX.add(new Object[] { "6907", -0.62d }); return modelX; } //Method which returns max value from data model private Double getMaxValue(ChartDataModel model) { Double max = 0d; max = (Double) model.getValueAt(DataColumnType.VALUE, 0); for (int i = 0; i < model.getPointCount(); i++) { Double tmp = 0d; tmp = (Double) model.getValueAt(DataColumnType.VALUE, i); if (tmp != null) { if (tmp > max) { max = tmp; } } } return max; } //Method which returns min value from data model private Double getMinValue(ChartDataModel model) { Double min = 0d; min = (Double) model.getValueAt(DataColumnType.VALUE, 0); for (int i = 0; i < model.getPointCount(); i++) { Double tmp = 0d; tmp = (Double) model.getValueAt(DataColumnType.VALUE, i); if (tmp != null) { if (tmp < min) { min = tmp; } } } return min; } private ChartDataModel generateZModel() { ChartDataModel modelZ = new ChartDataModel(); modelZ.add(new Object[] { "6881", -4.37 }); modelZ.add(new Object[] { "6882", -5.06 }); modelZ.add(new Object[] { "6883", -5.67 }); modelZ.add(new Object[] { "6884", -5.37 }); modelZ.add(new Object[] { "6885", -5.48 }); modelZ.add(new Object[] { "6886", -6.25 }); modelZ.add(new Object[] { "6887", -6.49 }); modelZ.add(new Object[] { "6888", -6.15 }); modelZ.add(new Object[] { "6889", -6.24 }); modelZ.add(new Object[] { "6890", -4.89 }); modelZ.add(new Object[] { "6891", -7.31 }); modelZ.add(new Object[] { "6892", -4.73 }); modelZ.add(new Object[] { "6893", -4.77 }); modelZ.add(new Object[] { "6894", -4.55 }); modelZ.add(new Object[] { "6895", -4.45 }); modelZ.add(new Object[] { "6896", -5.14 }); modelZ.add(new Object[] { "6897", -5.51 }); modelZ.add(new Object[] { "6898", -6.2 }); modelZ.add(new Object[] { "6899", -5.24 }); modelZ.add(new Object[] { "6900", -5.26 }); modelZ.add(new Object[] { "6901", -5.12 }); modelZ.add(new Object[] { "6902", -5.23 }); modelZ.add(new Object[] { "6903", -3.65 }); modelZ.add(new Object[] { "6904", -5.07 }); modelZ.add(new Object[] { "6905", -5.42 }); modelZ.add(new Object[] { "6906", -5.58 }); modelZ.add(new Object[] { "6907", -5.48 }); return modelZ; } private ChartDataModel generateAModel() { ChartDataModel modelA = new ChartDataModel(); modelA.add(new Object[] { "6881", 0.75 }); modelA.add(new Object[] { "6882", -0.1 }); modelA.add(new Object[] { "6883", 0.25 }); modelA.add(new Object[] { "6884", 1.43 }); modelA.add(new Object[] { "6885", 0.57 }); modelA.add(new Object[] { "6886", null }); modelA.add(new Object[] { "6887", -0.62 }); modelA.add(new Object[] { "6888", -0.31 }); modelA.add(new Object[] { "6889", null }); modelA.add(new Object[] { "6890", 2.96 }); modelA.add(new Object[] { "6891", -3.53 }); modelA.add(new Object[] { "6892", null }); modelA.add(new Object[] { "6893", -0.79 }); modelA.add(new Object[] { "6894", -1.11 }); modelA.add(new Object[] { "6895", null }); modelA.add(new Object[] { "6896", -0.17 }); modelA.add(new Object[] { "6897", -2.4 }); modelA.add(new Object[] { "6898", null }); modelA.add(new Object[] { "6899", 0.28 }); modelA.add(new Object[] { "6900", -0.06 }); modelA.add(new Object[] { "6901", null }); modelA.add(new Object[] { "6902", 0.06 }); modelA.add(new Object[] { "6903", -0.33 }); modelA.add(new Object[] { "6904", null }); modelA.add(new Object[] { "6905", -0.95 }); modelA.add(new Object[] { "6906", null }); modelA.add(new Object[] { "6907", 0.33 }); return modelA; } } |
Null Spline Series is similar to Spline Series, but null points are interpolated and are shown as curved line, not straight as with Spline Series.
Setting Null Spline Series:
// setting strategy for object named line which is an instance of LineSeries connectedSeries1.setStrategy(LineStrategies.NULL_SPLINE_STRATEGY); |
Figure 4.1.1.5 Percentage Area Line Series Demonstration
1 | import java.awt.*; import java.text.DecimalFormat; import javax.swing.JFrame; import lt.monarch.chart.chart2D.*; import lt.monarch.chart.chart2D.axis.*; import lt.monarch.chart.chart2D.engine.PlaneMapper2D; import lt.monarch.chart.chart2D.series.*; import lt.monarch.chart.engine.*; import lt.monarch.chart.legend.Legend; import lt.monarch.chart.legend.symbols.LegendLineSymbol; import lt.monarch.chart.mapper.MathAxisMapper; import lt.monarch.chart.models.ChartDataModel; import lt.monarch.chart.style.Style; import lt.monarch.chart.style.enums.*; import lt.monarch.chart.style.tags.SeriesPaintTags; import lt.monarch.chart.swing.JChartPanel; import lt.monarch.chart.view.LabeledChart; public class NullSplineSeriesDemo extends JFrame { public NullSplineSeriesDemo () { /* * Setting mappers */ MathAxisMapper xMapper = new MathAxisMapper(0, 3000); MathAxisMapper yMapper = new MathAxisMapper(0, 110); //setting ymapper's number format yMapper.setNumberFormat(new DecimalFormat("# dBm")); /* * Setting data model */ ChartDataModel data2008 = new ChartDataModel(); data2008.add(new Object[] { 0d, 22d }); data2008.add(new Object[] { 50d, 42d }); data2008.add(new Object[] { 60d, 23d }); data2008.add(new Object[] { 150d, 83d }); data2008.add(new Object[] { 250d, null }); data2008.add(new Object[] { 350d, 53d }); data2008.add(new Object[] { 650d, 13d }); data2008.add(new Object[] { 850d, 23d }); data2008.add(new Object[] { 890d, null }); data2008.add(new Object[] { 950d, 93d }); data2008.add(new Object[] { 1150d, 83d }); data2008.add(new Object[] { 1200d, 50d }); data2008.add(new Object[] { 1500d, 60d }); data2008.add(new Object[] { 1900d, 10d }); data2008.add(new Object[] { 2000d, null }); data2008.add(new Object[] { 2400d, 70d }); data2008.add(new Object[] { 2500d, 90d }); data2008.add(new Object[] { 2600d, 70d }); data2008.add(new Object[] { 2700d, 90d }); data2008.add(new Object[] { 2800d, 70d }); data2008.add(new Object[] { 2900d, 90d }); data2008.add(new Object[] { 3000d, 20d }); /* * Setting axes */ Axis2DX xAxis = new Axis2DX(xMapper); xAxis.setTitle("KHz"); xAxis.getTitleSettings().setPosition(TitlePosition.INLINE); Axis2DY yAxis = new Axis2DY(yMapper); xAxis.getTickSettings().setTickLayout(TickLayout.INVISIBLE); /* * Creating and setting series */ LineSeries connectedSeries1 = new LineSeries(data2008, xMapper, yMapper); // setting strategy connectedSeries1.setStrategy(LineStrategies.NULL_SPLINE_STRATEGY); // enabling showing of null values connectedSeries1.setShowNullValues(true); // setting colours connectedSeries1.getPaintStyle().setForeground(new Color(70, 142, 199).darker()); connectedSeries1.getPaintStyle().setShadowOffset(-1, 1); connectedSeries1.getPaintStyle().setStroke(new BasicStroke(3f)); /* * Setting colours for null values */ connectedSeries1.getPaintStyle().setForeground(SeriesPaintTags.NULL, new Color(200, 17, 17)); connectedSeries1.getPaintStyle().setStroke(SeriesPaintTags.NULL, new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL, 10.0f, new float[] { 12, 12 }, 0.0f)); /* * Setting grid */ Grid grid = new Grid(new PlaneMapper2D(), xMapper, yMapper); grid.getPaintStyle().setBackground(new Color(169, 174, 137, 80)); grid.setXGridDepth(2); grid.setYGridDepth(2); /* * Setting chart */ Chart2D chart = new Chart2D(); chart.setObjects(new ChartObject[] { grid, connectedSeries1 }); chart.setXAxis(xAxis); chart.setYAxis(yAxis); xAxis.setScrollable(true); yAxis.setScrollable(true); /* * Creating legend */ Legend legend = new Legend(); /* * Creating legend's entry style for null values */ Style invalidLegendStyle = new Style(); invalidLegendStyle.setStroke(new BasicStroke(2f)); invalidLegendStyle.setForeground(new Color(200, 17, 17)); /* * Creating legend's entry style for valid values */ Style validLegendStyle = new Style(); validLegendStyle.setStroke(new BasicStroke(2f)); validLegendStyle.setForeground(new Color(70, 142, 199).darker()); /* * Creating legend's symbol for null values */ LegendLineSymbol invalidLegenSymbol = new LegendLineSymbol(invalidLegendStyle); /* * Creating legend's symbol for valid values */ LegendLineSymbol validLegenSymbol = new LegendLineSymbol(validLegendStyle); /* * Creating legend's entry for null values and setting label which it will contain */ LegendEntry invalidDataLegendEntry = new LegendEntry("Invalid", invalidLegenSymbol); /* * Creating legend's entry for valid values and setting label which it will contain */ LegendEntry validDataLegendEntry = new LegendEntry("Valid", validLegenSymbol); /* * Adding entries to legend */ legend.addEntry(invalidDataLegendEntry); legend.addEntry(validDataLegendEntry); legend.setMaxColumns(2); /* * Creating Labeled chart */ LabeledChart m_chart = new LabeledChart(chart); m_chart.setTitle("Two tone intermodulation products measurements"); m_chart.setBottomView(legend); // packing everything and adding to JFrame getContentPane().add(BorderLayout.CENTER, new JChartPanel(m_chart)); } public static void main(String[] args) { NullSplineSeriesDemo frame = new NullSplineSeriesDemo(); frame.setSize(new Dimension(600, 400)); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); frame.setTitle("Two tone intermodulation products measurements"); frame.setVisible(true); } } |
Percentage Area Line Series is a series where values are automatically scaled so that they are stacked to 100%. Stacked chart data models should be used.
Setting Percentage Area Line Series:
// setting strategy for object named connectedSeries1 which is an instance of LineSeries connectedSeries1.setStrategy(LineStrategies.PERCENTAGE_AREA_LINE_STRATEGY); |
Figure 4.1.1.6 Percentage Area Line Series Demonstration
1 | import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.text.DecimalFormat; import javax.swing.JFrame; import lt.monarch.chart.chart2D.Chart2D; import lt.monarch.chart.chart2D.Grid; import lt.monarch.chart.chart2D.axis.Axis2DX; import lt.monarch.chart.chart2D.axis.Axis2DY; import lt.monarch.chart.chart2D.engine.PlaneMapper2D; import lt.monarch.chart.chart2D.series.LineSeries; import lt.monarch.chart.chart2D.series.LineStrategies; import lt.monarch.chart.engine.ChartObject; import lt.monarch.chart.engine.SimpleHotSpotMap; 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.models.StackedDataModel; import lt.monarch.chart.swing.JChartPanel; import lt.monarch.chart.view.LabeledChart; public class PercentageAreaDemo extends JFrame { /** * Container for chart */ private transient JChartPanel m_chartPanel; /** * Constructor */ public PercentageAreaDemo() { setLayout(new BorderLayout()); initChart(); add(m_chartPanel, BorderLayout.CENTER); } /** * Method for setting chart */ private void initChart() { /* * Creating mappers */ String labels[] = { "1900", "1950", "1999", "2008", "2050" }; LabelAxisMapper xMapper = new LabelAxisMapper(labels); /* * setting view range */ xMapper.getViewRange().setRange(xMapper.map("1900"), xMapper.map("2050")); MathAxisMapper yMapper = new MathAxisMapper(0d, 1d); /* * Pattern is applied to show percentage values */ DecimalFormat df = new DecimalFormat("##0.## %"); yMapper.setNumberFormat(df); /* * Creating and setting axes */ Axis2DX xAxis = new Axis2DX(xMapper); xAxis.setTitle("year"); Axis2DY yAxis = new Axis2DY(yMapper); yAxis.setTitle("percentage"); /* * Creating data models */ Double y1[] = { 133d, 221d, 767d, 973d, 1766d }; Double y2[] = { 953d, 1415d, 3664d, 4088d, 5314d }; Double y3[] = { 408d, 547d, 729d, 732d, 628d }; Double y4[] = { 74d, 167d, 511d, 577d, 809d }; Double y5[] = { 82d, 172d, 307d, 337d, 392d }; ChartDataModel dataModel1 = new ChartDataModel(new Object[][] { labels, y1 }); ChartDataModel dataModel2 = new ChartDataModel(new Object[][] { labels, y2 }); ChartDataModel dataModel3 = new ChartDataModel(new Object[][] { labels, y3 }); ChartDataModel dataModel4 = new ChartDataModel(new Object[][] { labels, y4 }); ChartDataModel dataModel5 = new ChartDataModel(new Object[][] { labels, y5 }); /* * Stacking data */ StackedDataModel ds1 = new StackedDataModel(dataModel1); StackedDataModel ds2 = ds1.setStackedModel(dataModel2); StackedDataModel ds3 = ds2.setStackedModel(dataModel3); StackedDataModel ds4 = ds3.setStackedModel(dataModel4); StackedDataModel ds5 = ds4.setStackedModel(dataModel5); /* * Creating and setting series */ LineSeries connectedSeries1 = new LineSeries(ds1, xMapper, yMapper); LineSeries connectedSeries2 = new LineSeries(ds2, xMapper, yMapper); LineSeries connectedSeries3 = new LineSeries(ds3, xMapper, yMapper); LineSeries connectedSeries4 = new LineSeries(ds4, xMapper, yMapper); LineSeries connectedSeries5 = new LineSeries(ds5, xMapper, yMapper); // setting titles for series connectedSeries1.setName("Africa"); connectedSeries2.setName("Asia and Oceania"); connectedSeries3.setName("Europe"); connectedSeries4.setName("Latin America and the Caribbean"); connectedSeries5.setName("Northern America"); // setting strategies connectedSeries1 .setStrategy(LineStrategies.PERCENTAGE_AREA_LINE_STRATEGY); connectedSeries2 .setStrategy(LineStrategies.PERCENTAGE_AREA_LINE_STRATEGY); connectedSeries3 .setStrategy(LineStrategies.PERCENTAGE_AREA_LINE_STRATEGY); connectedSeries4 .setStrategy(LineStrategies.PERCENTAGE_AREA_LINE_STRATEGY); connectedSeries5 .setStrategy(LineStrategies.PERCENTAGE_AREA_LINE_STRATEGY); // setting colours connectedSeries1.getPaintStyle().setBackground(new Color(49, 119, 31)); connectedSeries1.getPaintStyle().setForeground(Color.black); connectedSeries2.getPaintStyle().setBackground(new Color(143, 60, 168)); connectedSeries2.getPaintStyle().setForeground(Color.black); connectedSeries3.getPaintStyle().setBackground(new Color(251, 178, 47)); connectedSeries3.getPaintStyle().setForeground(Color.black); connectedSeries4.getPaintStyle().setBackground(new Color(219, 67, 47)); connectedSeries4.getPaintStyle().setForeground(Color.black); connectedSeries5.getPaintStyle().setBackground(new Color(75, 146, 188)); connectedSeries5.getPaintStyle().setForeground(Color.black); /* * Creating the grid */ Grid grid = new Grid(new PlaneMapper2D(), null, yMapper); /* * Creating the chart */ Chart2D chart = new Chart2D(); chart.setObjects(new ChartObject[] { grid, connectedSeries1, connectedSeries2, connectedSeries3, connectedSeries4, connectedSeries5, }); chart.setXAxis(xAxis); chart.setYAxis(yAxis); /* * Creating the title */ LabeledChart m_chart = new LabeledChart(chart); m_chart.setTitle("World Population by Year"); /* * Creating legend */ Legend legend = new Legend(chart); legend.setMaxColumns(3); m_chart.setBottomView(legend); m_chartPanel = new JChartPanel(m_chart); m_chartPanel.setHotSpotMap(new SimpleHotSpotMap()); } /** * Initialization the chart */ public static void main(String[] args) { PercentageAreaDemo frame = new PercentageAreaDemo(); frame.setSize(new Dimension(600, 400)); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); frame.setTitle("Percentage Area Demo"); frame.setVisible(true); } } |
Caching enables to generate images faster, by storing them in computer memory. This might be very useful when there are many points that need to be represented on chart.
Enabling caching:
// enabling caching for object named connectedSeries1 which is an instance of LineSeries connectedSeries1.setCachingEnabled(true); |