All Downloads are FREE. Search and download functionalities are using the official Maven repository.

sim.portrayal.inspector.BoxPlotChartingPropertyInspector Maven / Gradle / Ivy

Go to download

MASON is a fast discrete-event multiagent simulation library core in Java, designed to be the foundation for large custom-purpose Java simulations, and also to provide more than enough functionality for many lightweight simulation needs. MASON contains both a model library and an optional suite of visualization tools in 2D and 3D.

The newest version!
/*
  Copyright 2006 by Sean Luke and George Mason University
  Licensed under the Academic Free License version 3.0
  See the file "LICENSE" for more information
*/

package sim.portrayal.inspector;
import java.awt.*;
import java.awt.event.*;
import sim.util.*;
import sim.display.*;
import sim.engine.*;
import javax.swing.*;
import sim.util.gui.*;
import sim.util.media.chart.*;
import org.jfree.data.xy.*;
import org.jfree.data.general.*;

/** A property inspector which generates BoxPlots of data.  The BoxPlots update in real-time as
    requested by the user.  Data properties for which
    the BoxPlotChartingPropertyInspector will operate include:
        
    
  • Any array of numerical values (byte[], int[], double[], etc.)
  • Any array of sim.util.Valuable
  • Any array of Numbers (Double[], Integer[], etc.)
  • Any sim.util.IntBag
  • Any sim.util.DoubleBag

BoxPlotChartingPropertyInspector registers itself with the property menu option "Make BoxPlot". */ public class BoxPlotChartingPropertyInspector extends ChartingPropertyInspector { double[] previousValues = new double[] { 0 }; // sacrificial protected boolean validChartGenerator(ChartGenerator generator) { return generator instanceof BoxPlotGenerator; } protected boolean includeAggregationMethodAttributes() { return false; } public static String name() { return "Make BoxPlot"; } public static Class[] types() { return new Class[] { new byte[0].getClass(), new short[0].getClass(), new int[0].getClass(), new long[0].getClass(), new float[0].getClass(), new double[0].getClass(), new boolean[0].getClass(), new Valuable[0].getClass(), new Number[0].getClass(), IntBag.class, DoubleBag.class, ChartUtilities.ProvidesDoubles.class, ChartUtilities.ProvidesDoubleDoublesAndLabels.class }; } public BoxPlotChartingPropertyInspector(Properties properties, int index, Frame parent, final GUIState simulation) { super(properties,index,parent,simulation); setupSeriesAttributes(properties, index); } public BoxPlotChartingPropertyInspector(Properties properties, int index, final GUIState simulation, ChartGenerator generator) { super(properties, index, simulation, generator); setupSeriesAttributes(properties, index); } //I isolated this code from the constructor into this method because I have two constructors now. private void setupSeriesAttributes(Properties properties, int index) { if (isValidInspector()) { if (getGenerator().getNumSeriesAttributes() == 0) // recall that we've not been added yet { // take control getGenerator().setTitle("" + properties.getName(index) + " of " + properties.getObject()); ((BoxPlotGenerator)getGenerator()).setYAxisLabel("Frequency"); } if (properties.getValue(index) instanceof ChartUtilities.ProvidesDoubleDoublesAndLabels) { // have to handle specially String[] labels = ((ChartUtilities.ProvidesDoubleDoublesAndLabels)(properties.getValue(index))).provideLabels(); seriesAttributes = ((BoxPlotGenerator)generator).addSeries(new double[labels.length][0], labels, properties.getName(index), new SeriesChangeListener() { public void seriesChanged(SeriesChangeEvent event) { getStopper().stop(); } }); } else { seriesAttributes = ((BoxPlotGenerator)generator).addSeries(previousValues, properties.getName(index), new SeriesChangeListener() { public void seriesChanged(SeriesChangeEvent event) { getStopper().stop(); } }); } } } protected ChartGenerator createNewGenerator() { return new BoxPlotGenerator() { public void quit() { super.quit(); Stoppable stopper = getStopper(); if (stopper!=null) stopper.stop(); // remove the chart from the GUIState's charts getCharts(simulation).remove(this); } }; } public void updateSeries(double time, double lastTime) { Object obj = properties.getValue(index); if (obj==null) return; Class cls = obj.getClass(); double[] vals = previousValues; // set it to something in case we don't get anything new. if (cls.isArray()) { Class comp = cls.getComponentType(); // this is gonna be long if (comp.equals(Byte.TYPE)) { byte[] array = (byte[]) obj; vals = new double[array.length]; for(int i=0;idouble... double[] array = (double[]) obj; vals = new double[array.length]; for(int i=0;i





© 2015 - 2025 Weber Informatics LLC | Privacy Policy