Advertisement
Guest User

Stacked Area Chart Demo

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