Class AttributeVisualizationPanel
- java.lang.Object
-
- java.awt.Component
-
- java.awt.Container
-
- javax.swing.JComponent
-
- javax.swing.JPanel
-
- adams.gui.core.BasePanel
-
- adams.gui.tools.wekainvestigator.tab.preprocesstab.AttributeVisualizationPanel
-
- All Implemented Interfaces:
ImageObserver
,MenuContainer
,Serializable
,Accessible
public class AttributeVisualizationPanel extends adams.gui.core.BasePanel
Creates a panel that shows a visualization of an attribute in a dataset. For nominal attribute it shows a bar plot, with each bar corresponding to each nominal value of the attribute with its height equal to the frequecy that value appears in the dataset. For numeric attributes, it displays a histogram. The width of an interval in the histogram is calculated using Scott's(1979) method:
intervalWidth = Max(1, 3.49*Std.Dev*numInstances^(1/3)) Then the number of intervals is calculated by:
intervals = max(1, Math.round(Range/intervalWidth);- Author:
- Ashraf M. Kibriya ([email protected]), FracPete (fracpete at waikato dot ac dot nz)
- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected class
AttributeVisualizationPanel.BarCalc
Internal class that calculates the barplot to display, in a separate thread.protected class
AttributeVisualizationPanel.HistCalc
Internal class that calculates the histogram to display, in a separate thread.-
Nested classes/interfaces inherited from class javax.swing.JPanel
JPanel.AccessibleJPanel
-
Nested classes/interfaces inherited from class javax.swing.JComponent
JComponent.AccessibleJComponent
-
Nested classes/interfaces inherited from class java.awt.Container
Container.AccessibleAWTContainer
-
Nested classes/interfaces inherited from class java.awt.Component
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy
-
-
Field Summary
Fields Modifier and Type Field Description protected weka.core.AttributeStats
m_as
This holds the attribute stats of the current attribute on display.protected weka.core.AttributeStats[]
m_asCache
Cache of attribute stats info for the current data setprotected int
m_attribIndex
This holds the index of the current attribute on display and should be set through setAttribute(int idx).protected double
m_barRange
Contains the range of each bar in a histogram.protected int
m_classIndex
Contains the current class index.protected adams.gui.core.BaseComboBox<String>
m_colorAttrib
This stores and lets the user select a class attribute.protected List<Color>
m_colorList
Contains discrete colours for colouring of subbars of histograms and bar plots when the class attribute is set and is nominalprotected static adams.gui.visualization.core.ColorProvider
m_ColorProvider
the color provider.protected weka.core.Instances
m_data
This holds the current set of instancesprotected static Color[]
m_defaultColors
default colour listprotected boolean
m_displayCurrentAttribute
protected boolean
m_doneCurrentAttribute
protected FontMetrics
m_fm
Fontmetrics used to get the font size which is required for calculating displayable area size, bar height ratio and width of strings that are displayed on top of bars indicating their count.protected weka.core.SparseInstance[]
m_histBarClassCounts
This array holds the per class count (or per class height) of the each of the bars in a barplot or a histogram.protected double[]
m_histBarCounts
This array holds the count (or height) for the each of the bars in a barplot or a histogram.protected String
m_locker
Lock variable to synchronize the different threads running currently in this class.protected double
m_maxValue
This holds the max value of the current attribute.protected boolean
m_threadRun
True if the thread m_hc above is running.-
Fields inherited from class javax.swing.JComponent
listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
-
Fields inherited from class java.awt.Component
accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
-
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
-
-
Constructor Summary
Constructors Constructor Description AttributeVisualizationPanel()
Constructor - If used then the class will not show the class selection combo box.AttributeVisualizationPanel(boolean showColouringOption)
Constructor.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
calcGraph(int panelWidth, int panelHeight)
Recalculates the barplot or histogram to display, required usually when the attribute is changed or the component is resized.protected void
changeColorProvider()
Lets the user choose another color provider.int
getAttribute()
Returns the attribute being displayed.adams.gui.core.BaseComboBox
getColorBox()
Returns the class selection combo box if the parent component wants to place it in itself or in some component other than this component.int
getColoringIndex()
Get the coloring (class) index for the plotprotected List<Color>
getColorList()
Returns the list of colors to use.protected adams.gui.visualization.core.ColorProvider
getColorProvider()
Returns the color provider to use.static adams.gui.visualization.core.ColorProvider
getDefaultColorProvider()
Returns the default color provider to use.weka.core.Instances
getInstances()
Returns the underlying data.protected JPopupMenu
getPopupMenu()
Creates and returns the popup menu.String
getToolTipText(MouseEvent ev)
Returns "<nominal value> [<nominal value count>]" if displaying a bar plot and mouse is on some bar.void
paintComponent(Graphics g)
Paints this componentprotected void
resetColorProvider()
Resets the color provider to the default one.void
setAttribute(int index)
Tells the panel which attribute to visualize.void
setColoringIndex(int ci)
Set the coloring (class) index for the plotvoid
setInstances(weka.core.Instances data)
Sets the instances for use-
Methods inherited from class adams.gui.core.BasePanel
afterHide, afterShow, beforeHide, beforeShow, closeParent, finishInit, getParentChild, getParentDialog, getParentFrame, getParentInternalFrame, getParentTitle, initFileChooser, initGUI, initialize, main, printErrorMessage, printException, saveComponent, setEnabledCascade, setEnabledCascade, setParentTitle, setVisible
-
Methods inherited from class javax.swing.JPanel
getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
-
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, unregisterKeyboardAction, update
-
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, 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, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree
-
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, 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, 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, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
-
-
-
-
Field Detail
-
m_data
protected weka.core.Instances m_data
This holds the current set of instances
-
m_as
protected weka.core.AttributeStats m_as
This holds the attribute stats of the current attribute on display. It is calculated in setAttribute(int idx) when it is called to set a new attribute index.
-
m_asCache
protected weka.core.AttributeStats[] m_asCache
Cache of attribute stats info for the current data set
-
m_attribIndex
protected int m_attribIndex
This holds the index of the current attribute on display and should be set through setAttribute(int idx).
-
m_maxValue
protected double m_maxValue
This holds the max value of the current attribute. In case of nominal attribute it is the highest count that a nominal value has in the attribute (given by m_as.nominalWeights[i]), otherwise in case of numeric attribute it is simply the maximum value present in the attribute (given by m_as.numericStats.max). It is used to calculate the ratio of the height of the bars with respect to the height of the display area.
-
m_histBarCounts
protected double[] m_histBarCounts
This array holds the count (or height) for the each of the bars in a barplot or a histogram. In case of barplots (and current attribute being nominal) its length (and the number of bars) is equal to the number of nominal values in the current attribute, with each field of the array being equal to the count of each nominal that it represents (the count of ith nominal value of an attribute is given by m_as.nominalWeights[i]). Whereas, in case of histograms (and current attribute being numeric) the width of its intervals is calculated by Scott's(1979) method:
intervalWidth = Max(1, 3.49*Std.Dev*numInstances^(1/3)) And the number of intervals by:
intervals = max(1, Math.round(Range/intervalWidth); Then each field of this array contains the number of values of the current attribute that fall in the histogram interval that it represents.
NOTE: The values of this array are only calculated if the class attribute is not set or if it is numeric.
-
m_histBarClassCounts
protected weka.core.SparseInstance[] m_histBarClassCounts
This array holds the per class count (or per class height) of the each of the bars in a barplot or a histogram. For nominal attributes the format is:
m_histBarClassCounts[nominalValue][classValue+1]. For numeric attributes the format is:
m_histBarClassCounts[interval][classValues+1],
where the number of intervals is calculated by the Scott's method as mentioned above. The array is initialized to have 1+numClasses to accomodate for instances with missing class value. The ones with missing class value are displayed as a black sub par in a histogram or a barplot. NOTE: The values of this array are only calculated if the class attribute is set and it is nominal.
-
m_barRange
protected double m_barRange
Contains the range of each bar in a histogram. It is used to work out the range of bar the mouse pointer is on in getToolTipText().
-
m_classIndex
protected int m_classIndex
Contains the current class index.
-
m_threadRun
protected boolean m_threadRun
True if the thread m_hc above is running.
-
m_doneCurrentAttribute
protected boolean m_doneCurrentAttribute
-
m_displayCurrentAttribute
protected boolean m_displayCurrentAttribute
-
m_colorAttrib
protected adams.gui.core.BaseComboBox<String> m_colorAttrib
This stores and lets the user select a class attribute. It also has an entry "No Class" if the user does not want to set a class attribute for colouring.
-
m_fm
protected final FontMetrics m_fm
Fontmetrics used to get the font size which is required for calculating displayable area size, bar height ratio and width of strings that are displayed on top of bars indicating their count.
-
m_locker
protected final String m_locker
Lock variable to synchronize the different threads running currently in this class. There are two to three threads in this class, AWT paint thread which is handled differently in paintComponent() which checks on m_threadRun to determine if it can perform full paint or not, the second thread is the main execution thread and the third is the one represented by m_hc which we start when we want to calculate the internal fields for a bar plot or a histogram.
-
m_colorList
protected final List<Color> m_colorList
Contains discrete colours for colouring of subbars of histograms and bar plots when the class attribute is set and is nominal
-
m_defaultColors
protected static final Color[] m_defaultColors
default colour list
-
m_ColorProvider
protected static adams.gui.visualization.core.ColorProvider m_ColorProvider
the color provider.
-
-
Constructor Detail
-
AttributeVisualizationPanel
public AttributeVisualizationPanel()
Constructor - If used then the class will not show the class selection combo box.
-
AttributeVisualizationPanel
public AttributeVisualizationPanel(boolean showColouringOption)
Constructor.- Parameters:
showColouringOption
- - should be true if the class selection combo box is to be displayed with the histogram/barplot, or false otherwise. P.S: the combo box is always created it just won't be shown if showColouringOption is false.
-
-
Method Detail
-
getPopupMenu
protected JPopupMenu getPopupMenu()
Creates and returns the popup menu.- Returns:
- the menu
-
changeColorProvider
protected void changeColorProvider()
Lets the user choose another color provider.
-
resetColorProvider
protected void resetColorProvider()
Resets the color provider to the default one.
-
setInstances
public void setInstances(weka.core.Instances data)
Sets the instances for use- Parameters:
data
- a set of Instances, null to unset
-
getInstances
public weka.core.Instances getInstances()
Returns the underlying data.- Returns:
- the data
-
getDefaultColorProvider
public static adams.gui.visualization.core.ColorProvider getDefaultColorProvider()
Returns the default color provider to use.- Returns:
- the default
-
getColorProvider
protected adams.gui.visualization.core.ColorProvider getColorProvider()
Returns the color provider to use.- Returns:
- the color provider
-
getColorList
protected List<Color> getColorList()
Returns the list of colors to use.- Returns:
- the list
-
getColorBox
public adams.gui.core.BaseComboBox getColorBox()
Returns the class selection combo box if the parent component wants to place it in itself or in some component other than this component.
-
getColoringIndex
public int getColoringIndex()
Get the coloring (class) index for the plot- Returns:
- an
int
value
-
setColoringIndex
public void setColoringIndex(int ci)
Set the coloring (class) index for the plot- Parameters:
ci
- anint
value
-
setAttribute
public void setAttribute(int index)
Tells the panel which attribute to visualize.- Parameters:
index
- The index of the attribute
-
getAttribute
public int getAttribute()
Returns the attribute being displayed.- Returns:
- the attribute
-
calcGraph
public void calcGraph(int panelWidth, int panelHeight)
Recalculates the barplot or histogram to display, required usually when the attribute is changed or the component is resized.
-
getToolTipText
public String getToolTipText(MouseEvent ev)
Returns "<nominal value> [<nominal value count>]" if displaying a bar plot and mouse is on some bar. If displaying histogram then it- returns "count <br> [<bars Range>]" if mouse is on the first bar.
- returns "count <br> (<bar's Range>]" if mouse is on some bar other than the first one.
Otherwise it returns ""- Overrides:
getToolTipText
in classJComponent
- Parameters:
ev
- The mouse event
-
paintComponent
public void paintComponent(Graphics g)
Paints this component- Overrides:
paintComponent
in classJComponent
- Parameters:
g
- The graphics object for this component
-
-