Print

Print


Mike,
   Hmm, while I did not get around to actually setting up JFreeChart
for an earlier version of Mason, I had no problem following the
tutorial suggestions and getting a chart up and going for version 11.
While I would describe my code as well functioning, clean it is not
as it contains lots of non-chart functionality. I have extracted the
following in hopes it helps you:

public class SimulatorWithUI extends GUIState {

   public JFrame			chartFrame;
   public ChartGenerator		statisticsChart;

   public void start() {
	super.start();
	.
	.
	.
	// Set up statistics to display via JCharts
	statisticsChart.removeAllSeries();
         final XYSeries detectedSeries =
		new XYSeries("Detected Attacks", false);
         final XYSeries attacksSeries =
		new XYSeries("Attacks Launched", false);
         final XYSeries missedSeries =
		new XYSeries("Attacks Not Detected", false);
         final XYSeries delaySeries =
		new XYSeries("Recognition Delay (Mean)", false);
         final XYSeries sensorSeries =
		new XYSeries("Sensor Events", false);
         final XYSeries eventSeries =
		new XYSeries("Event Packets Generated", false);
         statisticsChart.addSeries(detectedSeries, null);
         statisticsChart.addSeries(attacksSeries, null);
         statisticsChart.addSeries(missedSeries, null);
         statisticsChart.addSeries(delaySeries, null);
         statisticsChart.addSeries(sensorSeries, null);
         statisticsChart.addSeries(eventSeries, null);
         chartFrame.pack();
         chartFrame.setVisible(false);

         // Set up chart refresh rate with the simulator
         scheduleImmediateRepeat(true, new Steppable() {
           public void step(SimState state) {
              StatLogger logger = ((Simulator)state).stats;
        	     AttackSummary attacks =
			((Simulator)state).getAttackSummary();
	     double currentTime = state.schedule.time();
        	     // Update statistics chart
	     sensorSeries.add(currentTime,
		logger.get(Stats.SENSOR_PACKET_STAT), true);
	     eventSeries.add(currentTime,
		logger.get(Stats.EVENT_PACKET_STAT), true);
	     detectedSeries.add(currentTime,
		attacks.attacksDetected, true);
	     attacksSeries.add(currentTime,
		attacks.attacksRegistered, true);
	     missedSeries.add(currentTime,
		attacks.attacksMissed, true);
	     delaySeries.add(currentTime,
		attacks.meanRecognitionDelay, true);
            }
          });
   }

   public void init(Controller c) {
	super.init(c);
	// Your display frame declaration might be like this:
	displayFrame = display.createFrame();
	.
	.
	.
	// Create the chart frame
	chartFrame = createChartFrame();
		
	// register the frame so it appears in the "Display" list
	c.registerFrame(displayFrame);
	c.registerFrame(chartFrame);
   }

   public JFrame createChartFrame() {
	// Use JFreeChart to display statistics
	statisticsChart = new sim.util.media.ChartGenerator();
	statisticsChart.setTitle("Performance Summary Statistics");
	statisticsChart.setRangeAxisLabel("Peformance Metric Value");
	statisticsChart.setDomainAxisLabel("Time (Simulated)");
	JFrame frame = statisticsChart.createFrame(this);
	frame.setTitle("Statistics Chart");
	return frame;
   }
}

Of course your statistics, and number thereof, and how you acquire
them from your simulation code will differ from mine.

I hope the fact I show the use of six helps, rather than hinders, this
example. For me, this generates a chart like the image attached. It
uses the defaults, with the exception of the title and labels shown
above in the sample code. You can see multiple items show in different
colors by default.

					-Mike

Michael Makowsky wrote:

> Version 11 seems to allow for a slightly different incorporation of JFree
> Charts, and in turn a different set up for the GUI subclass of whatever
> model you are creating. Does anyone have some clean, well functioning code
> of a GUIclass that creates charts. It would be great if the charts plotted
> multiple items in different colors. 
> 
> mike
> 
> Michael Makowsky
> Graduate Student
> Department of Economics
> George Mason University
> 703.608.1366
> [log in to unmask]
> website: http://mason.gmu.edu/~mmakowsk
> ******************************
>