Class Plot
- java.lang.Object
-
- java.awt.Component
-
- java.awt.Container
-
- javax.swing.JComponent
-
- javax.swing.JPanel
-
- ptolemy.plot.PlotBox
-
- ptolemy.plot.Plot
-
- All Implemented Interfaces:
- java.awt.image.ImageObserver, java.awt.MenuContainer, java.awt.print.Printable, java.io.Serializable, javax.accessibility.Accessible
- Direct Known Subclasses:
- EditablePlot, PlotLive
public class Plot extends PlotBox
A flexible signal plotter. The plot can be configured and data can be provided either through a file with commands or through direct invocation of the public methods of the class.When calling the public methods, in most cases the changes will not be visible until paintComponent() is called. To request that this be done, call repaint(). One exception is addPoint(), which makes the new point visible immediately if the plot is visible on the screen and addPoint() is called from the event dispatching thread.
This base class supports a simple file syntax that has largely been replaced by the XML-based PlotML syntax. To read a file or a URL in this older syntax, use the read() method. This older syntax contains any number commands, one per line. Unrecognized commands and commands with syntax errors are ignored. Comments are denoted by a line starting with a pound sign "#". The recognized commands include those supported by the base class, plus a few more. The commands are case insensitive, but are usually capitalized. The number of data sets to be plotted does not need to be specified. Data sets are added as needed. Each dataset can be optionally identified with color (see the base class) or with unique marks. The style of marks used to denote a data point is defined by one of the following commands:
Marks: none Marks: points Marks: dots Marks: various Marks: pixels
Here, "points" are small dots, while "dots" are larger. If "various" is specified, then unique marks are used for the first ten data sets, and then recycled. If "pixels" are specified, then each point is drawn as one pixel. Using no marks is useful when lines connect the points in a plot, which is done by default. However, if persistence is set, then you may want to choose "pixels" because the lines may overlap, resulting in annoying gaps in the drawn line. If the above directive appears before any DataSet directive, then it specifies the default for all data sets. If it appears after a DataSet directive, then it applies only to that data set.To disable connecting lines, use:
Lines: off
To reenable them, useLines: on
You can also specify "impulses", which are lines drawn from a plotted point down to the x axis. Plots with impulses are often called "stem plots." These are off by default, but can be turned on with the command:Impulses: on
or back off with the commandImpulses: off
If that command appears before any DataSet directive, then the command applies to all data sets. Otherwise, it applies only to the current data set. To create a bar graph, turn off lines and use any of the following commands:Bars: on Bars: width Bars: width, offset
The width is a real number specifying the width of the bars in the units of the x axis. The offset is a real number specifying how much the bar of the ith data set is offset from the previous one. This allows bars to "peek out" from behind the ones in front. Note that the frontmost data set will be the first one. To turn off bars, useBars: off
To specify data to be plotted, start a data set with the following command:DataSet: string
Here, string is a label that will appear in the legend. It is not necessary to enclose the string in quotation marks. To start a new dataset without giving it a name, use:DataSet:
In this case, no item will appear in the legend. New datasets are plotted behind the previous ones. If the following directive occurs:ReuseDataSets: on
Then datasets with the same name will be merged. This makes it easier to combine multiple datafiles that contain the same datasets into one file. By default, this capability is turned off, so datasets with the same name are not merged. The data itself is given by a sequence of commands with one of the following forms:x, y draw: x, y move: x, y x, y, yLowErrorBar, yHighErrorBar draw: x, y, yLowErrorBar, yHighErrorBar move: x, y, yLowErrorBar, yHighErrorBar
The "draw" command is optional, so the first two forms are equivalent. The "move" command causes a break in connected points, if lines are being drawn between points. The numbers x and y are arbitrary numbers as supported by the Double parser in Java. If there are four numbers, then the last two numbers are assumed to be the lower and upper values for error bars. The numbers can be separated by commas, spaces or tabs.Some of the methods, such as those that add points a plot, are executed in the event thread, possibly some time after they are called. If they are called from a thread different from the event thread, then the order in which changes to the plot take effect may be surprising. We recommend that any code you write that changes the plot in visible ways be executed in the event thread. You can accomplish this using the following template:
Runnable doAction = new Runnable() { public void run() { ... make changes here (e.g. setMarksStyle()) ... } }; plot.deferIfNecessary(doAction);This plotter has some limitations:
- If you zoom in far enough, the plot becomes unreliable. In particular, if the total extent of the plot is more than 232 times extent of the visible area, quantization errors can result in displaying points or lines. Note that 232 is over 4 billion.
- The limitations of the log axis facility are listed in
the
_gridInit()method in the PlotBox class.
- Since:
- Ptolemy II 0.2
- See Also:
- Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class ptolemy.plot.PlotBox
PlotBox.DragListener, PlotBox.ZoomListener
-
-
Field Summary
-
Fields inherited from class ptolemy.plot.PlotBox
_documentBase, PTPLOT_RELEASE
-
Fields inherited from class javax.swing.JComponent
TOOL_TIP_TEXT_KEY, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
-
-
Constructor Summary
Constructors Constructor and Description Plot()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method and Description voidaddLegend(int dataset, java.lang.String legend)Add a legend (displayed at the upper right) for the specified data set with the specified string.voidaddPoint(int dataset, double x, double y, boolean connected)In the specified data set, add the specified x, y point to the plot.voidaddPointWithErrorBars(int dataset, double x, double y, double yLowEB, double yHighEB, boolean connected)In the specified data set, add the specified x, y point to the plot with error bars.voidclear(boolean format)Clear the plot of all data points.voidclear(int dataset)Clear the plot of data points in the specified dataset.voiderasePoint(int dataset, int index)Erase the point at the given index in the given dataset.voidfillPlot()Rescale so that the data that is currently plotted just fits.booleangetConnected()Return whether the default is to connect subsequent points with a line.booleangetImpulses()Return whether a line will be drawn from any plotted point down to the x axis.java.lang.StringgetMarksStyle()Get the marks style, which is one of "none", "points", "dots", or "various".intgetNumDataSets()Return the actual number of data sets.booleangetReuseDatasets()Return false if setReuseDatasets() has not yet been called or if setReuseDatasets(false) has been called.voidread(java.io.InputStream inputStream)Read a file with the old syntax (non-XML).voidsamplePlot()Create a sample plot.voidsetBars(boolean on)Turn bars on or off (for bar charts).voidsetBars(double width, double offset)Turn bars on and set the width and offset.voidsetConnected(boolean on)If the argument is true, then the default is to connect subsequent points with a line.voidsetConnected(boolean on, int dataset)If the first argument is true, then by default for the specified dataset, points will be connected by a line.voidsetImpulses(boolean on)If the argument is true, then a line will be drawn from any plotted point down to the x axis.voidsetImpulses(boolean on, int dataset)If the first argument is true, then a line will be drawn from any plotted point in the specified dataset down to the x axis.voidsetMarksStyle(java.lang.String style)Set the marks style to "none", "points", "dots", or "various".voidsetMarksStyle(java.lang.String style, int dataset)Set the marks style to "none", "points", "dots", "various", or "pixels" for the specified dataset.voidsetPointsPersistence(int persistence)Calling this method with a positive argument sets the persistence of the plot to the given number of points.voidsetReuseDatasets(boolean on)If the argument is true, then datasets with the same name are merged into a single dataset.voidsetXPersistence(double persistence)Calling this method with a positive argument sets the persistence of the plot to the given width in units of the horizontal axis.voidwriteData(java.io.PrintWriter output)Write plot data information to the specified output stream in PlotML.voidwriteFormat(java.io.PrintWriter output)Write plot format information to the specified output stream in PlotML, an XML scheme.-
Methods inherited from class ptolemy.plot.PlotBox
addXTick, addYTick, clearLegends, deferIfNecessary, export, export, exportImage, exportImage, exportImage, exportImage, getCanvas, getColor, getColorByName, getColors, getDataurl, getDocumentBase, getGrid, getLegend, getLegendDataset, getPlotRectangle, getPreferredSize, getTitle, getXAutoRange, getXLabel, getXLog, getXRange, getXTicks, getYAutoRange, getYLabel, getYLog, getYRange, getYTicks, init, paintComponent, parseFile, parseFile, print, read, removeLegend, renameLegend, resetAxes, setBackground, setBounds, setButtons, setColor, setColors, setDataurl, setDocumentBase, setForeground, setGrid, setLabelFont, setPlotRectangle, setSize, setTitle, setTitleFont, setWrap, setXLabel, setXLog, setXRange, setYLabel, setYLog, setYRange, updateAndPaint, write, write, write, writeOldSyntax, zoom
-
Methods inherited from class javax.swing.JPanel
getAccessibleContext, getUI, getUIClassID, setUI, updateUI
-
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintImmediately, paintImmediately, print, printAll, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
-
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate
-
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, contains, createImage, createImage, createVolatileImage, createVolatileImage, dispatchEvent, enable, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
-
-
-
-
Method Detail
-
addLegend
public void addLegend(int dataset, java.lang.String legend)Add a legend (displayed at the upper right) for the specified data set with the specified string. Short strings generally fit better than long strings.- Overrides:
addLegendin classPlotBox- Parameters:
dataset- The dataset index.legend- The label for the dataset.- See Also:
PlotBox.renameLegend(int, String)
-
addPoint
public void addPoint(int dataset, double x, double y, boolean connected)In the specified data set, add the specified x, y point to the plot. Data set indices begin with zero. If the data set does not exist, create it. The fourth argument indicates whether the point should be connected by a line to the previous point. Regardless of the value of this argument, a line will not drawn if either there has been no previous point for this dataset or setConnected() has been called with a false argument.In order to work well with swing and be thread safe, this method actually defers execution to the event dispatch thread, where all user interface actions are performed. Thus, the point will not be added immediately (unless you call this method from within the event dispatch thread). All the methods that do this deferring coordinate so that they are executed in the order that you called them.
- Parameters:
dataset- The data set index.x- The X position of the new point.y- The Y position of the new point.connected- If true, a line is drawn to connect to the previous point.
-
addPointWithErrorBars
public void addPointWithErrorBars(int dataset, double x, double y, double yLowEB, double yHighEB, boolean connected)In the specified data set, add the specified x, y point to the plot with error bars. Data set indices begin with zero. If the dataset does not exist, create it. yLowEB and yHighEB are the lower and upper error bars. The sixth argument indicates whether the point should be connected by a line to the previous point. The new point will be made visible if the plot is visible on the screen. Otherwise, it will be drawn the next time the plot is drawn on the screen. This method is based on a suggestion by Michael Altmann. In order to work well with swing and be thread safe, this method actually defers execution to the event dispatch thread, where all user interface actions are performed. Thus, the point will not be added immediately (unless you call this method from within the event dispatch thread). All the methods that do this deferring coordinate so that they are executed in the order that you called them.
- Parameters:
dataset- The data set index.x- The X position of the new point.y- The Y position of the new point.yLowEB- The low point of the error bar.yHighEB- The high point of the error bar.connected- If true, a line is drawn to connect to the previous point.
-
clear
public void clear(boolean format)
Clear the plot of all data points. If the argument is true, then reset all parameters to their initial conditions, including the persistence, plotting format, and axes formats. For the change to take effect, you must call repaint().- Overrides:
clearin classPlotBox- Parameters:
format- If true, clear the format controls as well.In order to work well with swing and be thread safe, this method actually defers execution to the event dispatch thread, where all user interface actions are performed. Thus, the clear will not be executed immediately (unless you call this method from within the event dispatch thread). All the methods that do this deferring coordinate so that they are executed in the order that you called them.
-
clear
public void clear(int dataset)
Clear the plot of data points in the specified dataset. This calls repaint() to request an update of the display.In order to work well with swing and be thread safe, this method actually defers execution to the event dispatch thread, where all user interface actions are performed. Thus, the point will not be added immediately (unless you call this method from within the event dispatch thread). If you call this method, the addPoint() method, and the erasePoint() method in any order, they are assured of being processed in the order that you called them.
- Parameters:
dataset- The dataset to clear.
-
erasePoint
public void erasePoint(int dataset, int index)Erase the point at the given index in the given dataset. If lines are being drawn, also erase the line to the next points (note: not to the previous point). The point is not checked to see whether it is in range, so care must be taken by the caller to ensure that it is.In order to work well with swing and be thread safe, this method actually defers execution to the event dispatch thread, where all user interface actions are performed. Thus, the point will not be erased immediately (unless you call this method from within the event dispatch thread). All the methods that do this deferring coordinate so that they are executed in the order that you called them.
- Parameters:
dataset- The data set index.index- The index of the point to erase.
-
fillPlot
public void fillPlot()
Rescale so that the data that is currently plotted just fits. This overrides the base class method to ensure that the protected variables _xBottom, _xTop, _yBottom, and _yTop are valid. This method calls repaint(), which eventually causes the display to be updated.In order to work well with swing and be thread safe, this method actually defers execution to the event dispatch thread, where all user interface actions are performed. Thus, the fill will not occur immediately (unless you call this method from within the event dispatch thread). All the methods that do this deferring coordinate so that they are executed in the order that you called them.
-
getConnected
public boolean getConnected()
Return whether the default is to connect subsequent points with a line. If the result is false, then points are not connected. When points are by default connected, individual points can be not connected by giving the appropriate argument to addPoint(). Also, a different default can be set for each dataset, overriding this global default.
-
getImpulses
public boolean getImpulses()
Return whether a line will be drawn from any plotted point down to the x axis. A plot with such lines is also known as a stem plot.
-
getMarksStyle
public java.lang.String getMarksStyle()
Get the marks style, which is one of "none", "points", "dots", or "various".- Returns:
- A string specifying the style for points.
-
getNumDataSets
public int getNumDataSets()
Return the actual number of data sets.- Returns:
- The number of data sets that have been created.
-
getReuseDatasets
public boolean getReuseDatasets()
Return false if setReuseDatasets() has not yet been called or if setReuseDatasets(false) has been called.- Returns:
- false if setReuseDatasets() has not yet been called or if setReuseDatasets(false) has been called.
- Since:
- Ptplot 5.3
- See Also:
setReuseDatasets(boolean)
-
read
public void read(java.io.InputStream inputStream) throws java.io.IOExceptionRead a file with the old syntax (non-XML). Override the base class to register that we are reading a new data set.
-
samplePlot
public void samplePlot()
Create a sample plot. This is not actually done immediately unless the calling thread is the event dispatch thread. Instead, it is deferred to the event dispatch thread. It is important that the calling thread not hold a synchronize lock on the Plot object, or deadlock will result (unless the calling thread is the event dispatch thread).- Overrides:
samplePlotin classPlotBox
-
setBars
public void setBars(boolean on)
Turn bars on or off (for bar charts). Note that this is a global property, not per dataset.- Parameters:
on- If true, turn bars on.
-
setBars
public void setBars(double width, double offset)Turn bars on and set the width and offset. Both are specified in units of the x axis. The offset is the amount by which the i < sup>th data set is shifted to the right, so that it peeks out from behind the earlier data sets.- Parameters:
width- The width of the bars.offset- The offset per data set.
-
setConnected
public void setConnected(boolean on)
If the argument is true, then the default is to connect subsequent points with a line. If the argument is false, then points are not connected. When points are by default connected, individual points can be not connected by giving the appropriate argument to addPoint(). Also, a different default can be set for each dataset, overriding this global default.- Parameters:
on- If true, draw lines between points.- See Also:
setConnected(boolean, int)
-
setConnected
public void setConnected(boolean on, int dataset)If the first argument is true, then by default for the specified dataset, points will be connected by a line. Otherwise, the points will not be connected. When points are by default connected, individual points can be not connected by giving the appropriate argument to addPoint(). Note that this method should be called before adding any points. Note further that this method should probably be called from the event thread.- Parameters:
on- If true, draw lines between points.dataset- The dataset to which this should apply.- See Also:
setConnected(boolean)
-
setImpulses
public void setImpulses(boolean on)
If the argument is true, then a line will be drawn from any plotted point down to the x axis. Otherwise, this feature is disabled. A plot with such lines is also known as a stem plot.- Parameters:
on- If true, draw a stem plot.
-
setImpulses
public void setImpulses(boolean on, int dataset)If the first argument is true, then a line will be drawn from any plotted point in the specified dataset down to the x axis. Otherwise, this feature is disabled. A plot with such lines is also known as a stem plot.- Parameters:
on- If true, draw a stem plot.dataset- The dataset to which this should apply.
-
setMarksStyle
public void setMarksStyle(java.lang.String style)
Set the marks style to "none", "points", "dots", or "various". In the last case, unique marks are used for the first ten data sets, then recycled. This method should be called only from the event dispatch thread.- Parameters:
style- A string specifying the style for points.
-
setMarksStyle
public void setMarksStyle(java.lang.String style, int dataset)Set the marks style to "none", "points", "dots", "various", or "pixels" for the specified dataset. In the last case, unique marks are used for the first ten data sets, then recycled.- Parameters:
style- A string specifying the style for points.dataset- The dataset to which this should apply.
-
setPointsPersistence
public void setPointsPersistence(int persistence)
Calling this method with a positive argument sets the persistence of the plot to the given number of points. Calling with a zero argument turns off this feature, reverting to infinite memory (unless sweeps persistence is set). If both sweeps and points persistence are set then sweeps take precedence.Setting the persistence greater than zero forces the plot to be drawn in XOR mode, which allows points to be quickly and efficiently erased. However, there is a bug in Java (as of version 1.3), where XOR mode does not work correctly with double buffering. Thus, if you call this with an argument greater than zero, then we turn off double buffering for this panel and all of its parents. This actually happens on the next call to addPoint().
-
setReuseDatasets
public void setReuseDatasets(boolean on)
If the argument is true, then datasets with the same name are merged into a single dataset.- Parameters:
on- If true, then merge datasets.- See Also:
getReuseDatasets()
-
setXPersistence
public void setXPersistence(double persistence)
Calling this method with a positive argument sets the persistence of the plot to the given width in units of the horizontal axis. Calling with a zero argument turns off this feature, reverting to infinite memory (unless points persistence is set). If both X and points persistence are set then both are applied, meaning that points that are old by either criterion will be erased.Setting the X persistence greater than zero forces the plot to be drawn in XOR mode, which allows points to be quickly and efficiently erased. However, there is a bug in Java (as of version 1.3), where XOR mode does not work correctly with double buffering. Thus, if you call this with an argument greater than zero, then we turn off double buffering for this panel and all of its parents. This actually happens on the next call to addPoint().
-
writeData
public void writeData(java.io.PrintWriter output)
Write plot data information to the specified output stream in PlotML.
-
writeFormat
public void writeFormat(java.io.PrintWriter output)
Write plot format information to the specified output stream in PlotML, an XML scheme.- Overrides:
writeFormatin classPlotBox- Parameters:
output- A buffered print writer.
-
-
DMelt 3.0 © DataMelt by jWork.ORG