Advertisement
Guest User

Stacked Area Time Series Chart Demo

a guest
Jun 14th, 2016
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.89 KB | None | 0 0
  1. package masoncsc.gui;
  2.  
  3. import java.awt.BorderLayout;
  4. import java.awt.Color;
  5. import java.awt.EventQueue;
  6. import java.awt.FlowLayout;
  7. import java.awt.event.ActionEvent;
  8. import java.awt.event.ActionListener;
  9. import java.text.DecimalFormat;
  10. import java.util.Date;
  11. import java.util.Random;
  12.  
  13. import javax.swing.JButton;
  14. import javax.swing.JComboBox;
  15. import javax.swing.JPanel;
  16. import javax.swing.Timer;
  17.  
  18. import org.jfree.chart.ChartFactory;
  19. import org.jfree.chart.ChartPanel;
  20. import org.jfree.chart.JFreeChart;
  21. import org.jfree.chart.axis.NumberAxis;
  22. import org.jfree.chart.plot.PlotOrientation;
  23. import org.jfree.chart.plot.SeriesRenderingOrder;
  24. import org.jfree.chart.plot.XYPlot;
  25. import org.jfree.chart.renderer.xy.StackedXYAreaRenderer;
  26. import org.jfree.data.time.Millisecond;
  27. import org.jfree.data.time.RegularTimePeriod;
  28. import org.jfree.data.time.SimpleTimePeriod;
  29. import org.jfree.data.time.TimePeriod;
  30. import org.jfree.data.time.TimeTableXYDataset;
  31. import org.jfree.ui.ApplicationFrame;
  32. import org.jfree.ui.RefineryUtilities;
  33.  
  34. public class StackedAreaTimeSeriesChartDemo extends ApplicationFrame
  35. {
  36.     private static final long serialVersionUID = 1L;
  37.  
  38.     private static final String TITLE = "Dynamic Series";
  39.     private static final String START = "Start";
  40.     private static final String STOP = "Stop";
  41.     private static final float MINMAX = 100;
  42.     private static final int COUNT = 50;
  43.     private static final int FAST = 100;
  44.     private static final int SLOW = FAST * 5;
  45.     private static final Random random = new Random();
  46.     private Timer timer;
  47.     private static final String SERIES1 = "Positive";
  48.     private static final String SERIES2 = "Negative";
  49.  
  50.     // Added by JFH:
  51.     long step = 0; // current step
  52.  
  53.     public StackedAreaTimeSeriesChartDemo(final String title) {
  54.         super(title);
  55.         final TimeTableXYDataset dataset = new TimeTableXYDataset();
  56.         JFreeChart chart = createAreaChart(dataset);
  57.  
  58.         final JButton run = new JButton(STOP);
  59.         run.addActionListener(new ActionListener() {
  60.  
  61.             @Override
  62.             public void actionPerformed(ActionEvent e) {
  63.                 String cmd = e.getActionCommand();
  64.                 if (STOP.equals(cmd)) {
  65.                     timer.stop();
  66.                     run.setText(START);
  67.                 }
  68.                 else {
  69.                     timer.start();
  70.                     run.setText(STOP);
  71.                 }
  72.             }
  73.         });
  74.  
  75.         final JComboBox combo = new JComboBox();
  76.         combo.addItem("Fast");
  77.         combo.addItem("Slow");
  78.         combo.addActionListener(new ActionListener() {
  79.  
  80.             @Override
  81.             public void actionPerformed(ActionEvent e) {
  82.                 if ("Fast".equals(combo.getSelectedItem())) {
  83.                     timer.setDelay(FAST);
  84.                 }
  85.                 else {
  86.                     timer.setDelay(SLOW);
  87.                 }
  88.             }
  89.         });
  90.  
  91.         this.add(new ChartPanel(chart), BorderLayout.CENTER);
  92.         JPanel btnPanel = new JPanel(new FlowLayout());
  93.         btnPanel.add(run);
  94.         btnPanel.add(combo);
  95.         this.add(btnPanel, BorderLayout.SOUTH);
  96.  
  97.         timer = new Timer(FAST, new ActionListener() {
  98.  
  99.             @Override
  100.             public void actionPerformed(ActionEvent e) {
  101.                 final SimpleTimePeriod timePeriod = new SimpleTimePeriod(step, step);
  102.                 step++;
  103.  
  104.                 dataset.add(timePeriod, 100 + randomValue(), SERIES1);
  105.                 dataset.add(timePeriod, 100 + randomValue(), SERIES2);
  106.  
  107.                 // cull
  108.                 if (dataset.getItemCount() > COUNT) {
  109.                     TimePeriod firstItemTime = dataset.getTimePeriod(0);
  110.                     dataset.remove(firstItemTime, SERIES1);
  111.                     dataset.remove(firstItemTime, SERIES2);
  112.                 }
  113.             }
  114.         });
  115.     }
  116.  
  117.     private float randomValue() {
  118.         float randValue = (float) (random.nextGaussian() * MINMAX / 3);
  119.         return randValue < 0 ? -randValue : randValue;
  120.     }
  121.  
  122.     private JFreeChart createAreaChart(final TimeTableXYDataset dataset) {
  123.         final JFreeChart chart = ChartFactory.createStackedXYAreaChart("Live Sentiment Chart", "Time", "Sentiments", dataset, PlotOrientation.VERTICAL, true, true, false);
  124.  
  125.         final StackedXYAreaRenderer render = new StackedXYAreaRenderer();
  126.         render.setSeriesPaint(0, Color.RED);
  127.         render.setSeriesPaint(1, Color.GREEN);
  128.  
  129.         // commented out by JFH
  130.         // DateAxis domainAxis = new DateAxis();
  131.         // domainAxis.setAutoRange(true);
  132.         // domainAxis.setDateFormatOverride(new SimpleDateFormat("HH:mm:ss"));
  133.         // domainAxis.setTickUnit(new DateTickUnit(DateTickUnitType.SECOND, 1));
  134.  
  135.         XYPlot plot = (XYPlot) chart.getPlot();
  136.         plot.setRenderer(render);
  137.         // plot.setDomainAxis(domainAxis);
  138.         plot.setSeriesRenderingOrder(SeriesRenderingOrder.FORWARD);
  139.         plot.setForegroundAlpha(0.5f);
  140.  
  141.         NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
  142.         rangeAxis.setNumberFormatOverride(new DecimalFormat("#,###.#"));
  143.         rangeAxis.setAutoRange(true);
  144.  
  145.         return chart;
  146.     }
  147.  
  148.     public void start() {
  149.         timer.start();
  150.     }
  151.  
  152.     public static void main(final String[] args) {
  153.         EventQueue.invokeLater(new Runnable() {
  154.  
  155.             @Override
  156.             public void run() {
  157.                 StackedAreaTimeSeriesChartDemo demo = new StackedAreaTimeSeriesChartDemo(TITLE);
  158.                 demo.pack();
  159.                 RefineryUtilities.centerFrameOnScreen(demo);
  160.                 demo.setVisible(true);
  161.                 demo.start();
  162.             }
  163.         });
  164.     }
  165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement