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.BasePanelCreates 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 classAttributeVisualizationPanel.BarCalcInternal class that calculates the barplot to display, in a separate thread.protected classAttributeVisualizationPanel.HistCalcInternal 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.AttributeStatsm_asThis holds the attribute stats of the current attribute on display.protected weka.core.AttributeStats[]m_asCacheCache of attribute stats info for the current data setprotected intm_attribIndexThis holds the index of the current attribute on display and should be set through setAttribute(int idx).protected doublem_barRangeContains the range of each bar in a histogram.protected intm_classIndexContains the current class index.protected adams.gui.core.BaseComboBox<String>m_colorAttribThis stores and lets the user select a class attribute.protected List<Color>m_colorListContains 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.ColorProviderm_ColorProviderthe color provider.protected weka.core.Instancesm_dataThis holds the current set of instancesprotected static Color[]m_defaultColorsdefault colour listprotected booleanm_displayCurrentAttributeprotected booleanm_doneCurrentAttributeprotected FontMetricsm_fmFontmetrics 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_histBarClassCountsThis 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_histBarCountsThis array holds the count (or height) for the each of the bars in a barplot or a histogram.protected Stringm_lockerLock variable to synchronize the different threads running currently in this class.protected doublem_maxValueThis holds the max value of the current attribute.protected booleanm_threadRunTrue 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 voidcalcGraph(int panelWidth, int panelHeight)Recalculates the barplot or histogram to display, required usually when the attribute is changed or the component is resized.protected voidchangeColorProvider()Lets the user choose another color provider.intgetAttribute()Returns the attribute being displayed.adams.gui.core.BaseComboBoxgetColorBox()Returns the class selection combo box if the parent component wants to place it in itself or in some component other than this component.intgetColoringIndex()Get the coloring (class) index for the plotprotected List<Color>getColorList()Returns the list of colors to use.protected adams.gui.visualization.core.ColorProvidergetColorProvider()Returns the color provider to use.static adams.gui.visualization.core.ColorProvidergetDefaultColorProvider()Returns the default color provider to use.weka.core.InstancesgetInstances()Returns the underlying data.protected JPopupMenugetPopupMenu()Creates and returns the popup menu.StringgetToolTipText(MouseEvent ev)Returns "<nominal value> [<nominal value count>]" if displaying a bar plot and mouse is on some bar.voidpaintComponent(Graphics g)Paints this componentprotected voidresetColorProvider()Resets the color provider to the default one.voidsetAttribute(int index)Tells the panel which attribute to visualize.voidsetColoringIndex(int ci)Set the coloring (class) index for the plotvoidsetInstances(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
intvalue
-
setColoringIndex
public void setColoringIndex(int ci)
Set the coloring (class) index for the plot- Parameters:
ci- anintvalue
-
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:
getToolTipTextin classJComponent- Parameters:
ev- The mouse event
-
paintComponent
public void paintComponent(Graphics g)
Paints this component- Overrides:
paintComponentin classJComponent- Parameters:
g- The graphics object for this component
-
-