/***********************************************************************
This file is part of KEEL-software, the Data Mining tool for regression,
classification, clustering, pattern mining and so on.
Copyright (C) 2004-2010
F. Herrera (herrera@decsai.ugr.es)
L. Sánchez (luciano@uniovi.es)
J. Alcalá-Fdez (jalcala@decsai.ugr.es)
S. García (sglopez@ujaen.es)
A. Fernández (alberto.fernandez@ujaen.es)
J. Luengo (julianlm@decsai.ugr.es)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/
**********************************************************************/
package keel.GraphInterKeel.datacf.visualizeData;
import keel.GraphInterKeel.datacf.util.AttributeTable;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.text.DecimalFormat;
import java.util.Vector;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
/**
* <p>
* @author Written by Juan Carlos Fernández and Pedro Antonio Gutiérrez(University of Córdoba) 23/10/2008
* @version 1.0
* @since JDK1.5
* </p>
*/
public class VisualizePanelAttribute extends javax.swing.JPanel {
/**
* <p>
* Panel to visualize datasets
* </p>
*/
/**
* <p>
* Constructor that initializes the panel
* </p>
*/
public VisualizePanelAttribute() {
initComponents();
}
/**
* <p>
* This method is called from within the constructor to
* initialize the form.
* </p>
* <p>
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
* </p>
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
tablejScrollPane = new javax.swing.JScrollPane();
this.tablejScrollPane.setEnabled(false);
this.tablejScrollPane.setVisible(false);
tableInfojTable = new javax.swing.JTable();
this.tableInfojTable.getTableHeader().setReorderingAllowed(false);
this.tableInfojTable.setEnabled(false);
this.tableInfojTable.setVisible(false);
infojPanel = new javax.swing.JPanel();
extendedInfojPanel = new javax.swing.JPanel();
valueRankjLabel = new javax.swing.JLabel();
averagejLabel = new javax.swing.JLabel();
variancejLabel = new javax.swing.JLabel();
valuesjLabel = new javax.swing.JLabel();
bracketjLabelIzdo = new javax.swing.JLabel();
valueRankjLabelIzdo = new javax.swing.JLabel();
comajLabel = new javax.swing.JLabel();
valueRankjLabelDcho = new javax.swing.JLabel();
bracketjLabelDcho = new javax.swing.JLabel();
valueAveragejLabel = new javax.swing.JLabel();
valueVariancejLabel = new javax.swing.JLabel();
valuesjScrollPane = new javax.swing.JScrollPane();
valuesjTextPane = new javax.swing.JTextPane();
graphicsjPanel = new javax.swing.JPanel();
clickToExpandjLabel = new javax.swing.JLabel();
imagejScrollPane = new javax.swing.JScrollPane();
imagejLabel = new javax.swing.JLabel();
setName("Form"); // NOI18N
tablejScrollPane.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Info"));
tablejScrollPane.setName("tablejScrollPane"); // NOI18N
tableInfojTable.setAutoCreateRowSorter(true);
tableInfojTable.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
tableInfojTable.setModel(this.TMtablaAtributos);
tableInfojTable.setToolTipText("Select attribute");
tableInfojTable.setName("tableInfojTable"); // NOI18N
tableInfojTable.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
tableInfojTableMouseClicked(evt);
}
public void mousePressed(java.awt.event.MouseEvent evt) {
tableInfojTableMousePressed(evt);
}
});
tablejScrollPane.setViewportView(tableInfojTable);
infojPanel.setName("infojPanel"); // NOI18N
extendedInfojPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Extended Info"));
extendedInfojPanel.setToolTipText("");
extendedInfojPanel.setName("extendedInfojPanel"); // NOI18N
valueRankjLabel.setText("Value Rank");
valueRankjLabel.setName("valueRankjLabel"); // NOI18N
averagejLabel.setText("Average");
averagejLabel.setName("averagejLabel"); // NOI18N
variancejLabel.setText("Variance");
variancejLabel.setName("variancejLabel"); // NOI18N
valuesjLabel.setText("Values");
valuesjLabel.setName("valuesjLabel"); // NOI18N
bracketjLabelIzdo.setText("[");
bracketjLabelIzdo.setName("bracketjLabelIzdo"); // NOI18N
valueRankjLabelIzdo.setName("valueRankjLabelIzdo"); // NOI18N
comajLabel.setText(",");
comajLabel.setName("comajLabel"); // NOI18N
valueRankjLabelDcho.setName("valueRankjLabelDcho"); // NOI18N
bracketjLabelDcho.setText("]");
bracketjLabelDcho.setName("bracketjLabelDcho"); // NOI18N
valueAveragejLabel.setName("valueAveragejLabel"); // NOI18N
valueVariancejLabel.setName("valueVariancejLabel"); // NOI18N
valuesjScrollPane.setName("valuesjScrollPane"); // NOI18N
valuesjTextPane.setEditable(false);
valuesjTextPane.setName("valuesjTextPane"); // NOI18N
this.valuesjScrollPane.setEnabled(false);
this.valuesjScrollPane.setVisible(false);
this.valuesjTextPane.setEnabled(false);
this.valuesjTextPane.setVisible(false);
valuesjScrollPane.setViewportView(valuesjTextPane);
javax.swing.GroupLayout extendedInfojPanelLayout = new javax.swing.GroupLayout(extendedInfojPanel);
extendedInfojPanel.setLayout(extendedInfojPanelLayout);
extendedInfojPanelLayout.setHorizontalGroup(
extendedInfojPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(extendedInfojPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(extendedInfojPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(extendedInfojPanelLayout.createSequentialGroup()
.addGroup(extendedInfojPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(extendedInfojPanelLayout.createSequentialGroup()
.addComponent(valueRankjLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(bracketjLabelIzdo))
.addComponent(averagejLabel)
.addComponent(variancejLabel)
.addComponent(valuesjLabel))
.addGap(6, 6, 6)
.addGroup(extendedInfojPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(valueVariancejLabel)
.addComponent(valueAveragejLabel)
.addGroup(extendedInfojPanelLayout.createSequentialGroup()
.addComponent(valueRankjLabelIzdo)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(comajLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(valueRankjLabelDcho)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(bracketjLabelDcho))))
.addComponent(valuesjScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 117, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(114, Short.MAX_VALUE))
);
extendedInfojPanelLayout.setVerticalGroup(
extendedInfojPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(extendedInfojPanelLayout.createSequentialGroup()
.addGroup(extendedInfojPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(valueRankjLabel)
.addComponent(bracketjLabelIzdo)
.addComponent(valueRankjLabelIzdo)
.addComponent(comajLabel)
.addComponent(valueRankjLabelDcho)
.addComponent(bracketjLabelDcho))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(extendedInfojPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(averagejLabel)
.addComponent(valueAveragejLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(extendedInfojPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(variancejLabel)
.addComponent(valueVariancejLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(valuesjLabel)
.addGap(18, 18, 18)
.addComponent(valuesjScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 56, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(59, Short.MAX_VALUE))
);
graphicsjPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Graphic Info"));
graphicsjPanel.setName("graphicsjPanel"); // NOI18N
graphicsjPanel.setLayout(new java.awt.GridBagLayout());
clickToExpandjLabel.setText("Click to Expand");
clickToExpandjLabel.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
clickToExpandjLabel.setName("clickToExpandjLabel"); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
graphicsjPanel.add(clickToExpandjLabel, gridBagConstraints);
imagejScrollPane.setBorder(null);
imagejScrollPane.setName("imagejScrollPane"); // NOI18N
imagejLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
imagejLabel.setToolTipText("Click to Expand");
imagejLabel.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
imagejLabel.setName("imagejLabel"); // NOI18N
imagejLabel.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
imagejLabelMouseClicked(evt);
}
});
imagejScrollPane.setViewportView(imagejLabel);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
graphicsjPanel.add(imagejScrollPane, gridBagConstraints);
javax.swing.GroupLayout infojPanelLayout = new javax.swing.GroupLayout(infojPanel);
infojPanel.setLayout(infojPanelLayout);
infojPanelLayout.setHorizontalGroup(
infojPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(infojPanelLayout.createSequentialGroup()
.addComponent(extendedInfojPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(graphicsjPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 273, Short.MAX_VALUE))
);
infojPanelLayout.setVerticalGroup(
infojPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(extendedInfojPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(graphicsjPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 248, Short.MAX_VALUE)
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(tablejScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 532, Short.MAX_VALUE)
.addComponent(infojPanel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(tablejScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 145, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(infojPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
private void imagejLabelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_imagejLabelMouseClicked
if (this.chart != null) {
this.chart.setTitle(((VisualizePanel) this.getParent().getParent()).getData().getAttributeIndex(
this.tableInfojTable.getSelectedRow()));
ChartFrame frame = new ChartFrame("Attribute chart", chart, true);
frame.pack();
frame.setBackground(new Color(225, 225, 225));
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
frame.setLocation((screenSize.width - frameSize.width) / 2,
(screenSize.height - frameSize.height) / 2);
frame.setIconImage(Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("/keel/GraphInterKeel/resources/ico/logo/logo.gif")));
frame.setVisible(true);
}
}//GEN-LAST:event_imagejLabelMouseClicked
private void tableInfojTableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tableInfojTableMouseClicked
this.infoAttribute();
}//GEN-LAST:event_tableInfojTableMouseClicked
private void tableInfojTableMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tableInfojTableMousePressed
//this.infoAttribute();
}//GEN-LAST:event_tableInfojTableMousePressed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JLabel averagejLabel;
private javax.swing.JLabel bracketjLabelDcho;
private javax.swing.JLabel bracketjLabelIzdo;
private javax.swing.JLabel clickToExpandjLabel;
private javax.swing.JLabel comajLabel;
private javax.swing.JPanel extendedInfojPanel;
private javax.swing.JPanel graphicsjPanel;
private javax.swing.JLabel imagejLabel;
private javax.swing.JScrollPane imagejScrollPane;
private javax.swing.JPanel infojPanel;
private javax.swing.JTable tableInfojTable;
private javax.swing.JScrollPane tablejScrollPane;
private javax.swing.JLabel valueAveragejLabel;
private javax.swing.JLabel valueRankjLabel;
private javax.swing.JLabel valueRankjLabelDcho;
private javax.swing.JLabel valueRankjLabelIzdo;
private javax.swing.JLabel valueVariancejLabel;
private javax.swing.JLabel valuesjLabel;
private javax.swing.JScrollPane valuesjScrollPane;
private javax.swing.JTextPane valuesjTextPane;
private javax.swing.JLabel variancejLabel;
// End of variables declaration//GEN-END:variables
/** Chart */
protected JFreeChart chart;
/** Table header */
protected String[] tableHeader = {"Attribute", "Type", "Function"};
/** Default values */
protected Object[] defaultValues = {" ", " ", " "};
/** Attribute table */
protected AttributeTable TMtablaAtributos = new AttributeTable(tableHeader, defaultValues, 0);
/**
* <p>
* Clear a table of attributes
* </p>
*/
public void clearTable() {
this.TMtablaAtributos = new AttributeTable(tableHeader, defaultValues, 0);
this.tableInfojTable.setModel(this.TMtablaAtributos);
}
/**
* <p>
* Set the Atributtes Table
* </p>
* @param tabla Attibutes Table
*/
public void setTMtablaAtributos(AttributeTable tabla) {
this.TMtablaAtributos = tabla;
}
/**
* <p>
* Get the Attributes Table
* </p>
* @return Attributes Table
*/
public AttributeTable getTMtablaAtributos() {
return this.TMtablaAtributos;
}
/**
* <p>
* Set a chart for paint attributes values
* </p>
* @param chart JFreeChart
*/
public void setChart(JFreeChart chart) {
this.chart = chart;
}
/**
* <p>
* Gets Chart for paint attributes values
* </p>
* @return JFreeChar for attributes values
*/
public JFreeChart getChart() {
return this.chart;
}
/**
* <p>
* Sets left value Rank
* </p>
* @param value Left value rank
*/
public void setLeftValueRank(String value) {
this.valueRankjLabelIzdo.setText(value);
}
/**
* <p>
* Sets right value Rank
* </p>
* @param value right value rank
*/
public void setRightValueRank(String value) {
this.valueRankjLabelDcho.setText(value);
}
/**
* <p>
* Sets value average
* </p>
* @param value value average
*/
public void setValueAverage(String value) {
this.valueAveragejLabel.setText(value);
}
/**
* <p>
* Sets value variance
* </p>
* @param value value variance
*/
public void setValueVariance(String value) {
this.valueVariancejLabel.setText(value);
}
/**
* <p>
* Sets nominal values
* </p>
* @param values Nominal values
*/
public void setNominalValues(String values) {
this.valuesjTextPane.setText(values);
}
/**
* <p>
* Cotrol for Expand chart
* </p>
* @param value Value for Expand chart
*/
public void setClickToExpand(String value) {
this.clickToExpandjLabel.setText(value);
}
/**
* <p>
* Sets image of attributes
* </p>
* @param image Image of Attributes
*/
public void setImage(BufferedImage image) {
if (image == null) {
this.imagejLabel.setIcon(null);
} else {
this.imagejLabel.setIcon(new ImageIcon(image));
}
}
/**
* <p>
* Enables tha Attribute Table
* </p>
* @param state State of attribute Table, true or false
*/
public void enabledTable(boolean state) {
this.tablejScrollPane.setEnabled(state);
this.tablejScrollPane.setVisible(state);
this.tableInfojTable.setEnabled(state);
this.tableInfojTable.setVisible(state);
}
private void infoAttribute() {
this.enabledTable(true);
// Extended info about selected attribute
if (((VisualizePanel) this.getParent().getParent()).getData().getAttributeTypeIndex(
this.tableInfojTable.getSelectedRow()).equals(
"nominal")) {
this.valuesjScrollPane.setEnabled(true);
this.valuesjScrollPane.setVisible(true);
this.valuesjTextPane.setEnabled(true);
this.valuesjTextPane.setVisible(true);
Vector r = ((VisualizePanel) this.getParent().getParent()).getData().getRangesVar(
((VisualizePanel) this.getParent().getParent()).getData().getAttributeIndex(
this.tableInfojTable.getSelectedRow()));
this.valuesjTextPane.setText("");
this.valueAveragejLabel.setText("");
this.valueVariancejLabel.setText("");
this.valueRankjLabelIzdo.setText(" ");
this.valueRankjLabelDcho.setText(" ");
String cadena = new String();
for (int i = 0; i < r.size(); i++) {
if (i == 0) {
cadena = r.elementAt(i).toString() + "";
this.valuesjTextPane.setText(cadena);
} else {
cadena = this.valuesjTextPane.getText() + "\n" + r.elementAt(i).toString();
}
this.valuesjTextPane.setText(cadena);
}
boolean legend = false;
// Draw bar chart
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
try {
for (int i = 0; i < ((VisualizePanel) this.getParent().getParent()).getData().getNData(); i++) {
String column = ((VisualizePanel) this.getParent().getParent()).getData().getDataIndex(i,
this.tableInfojTable.getSelectedRow());
String row = "";
if (((VisualizePanel) this.getParent().getParent()).getOutAttribute() != -1 && this.tableInfojTable.getSelectedRow() != ((VisualizePanel) this.getParent().getParent()).getOutAttribute()) {
row = "Class " + ((VisualizePanel) this.getParent().getParent()).getData().getDataIndex(i, ((VisualizePanel) this.getParent().getParent()).getOutAttribute());
legend = true;
}
if (column != null) {
if (dataset.getRowIndex(row) == -1 || ((dataset.getColumnIndex(column) == -1))) {
dataset.addValue(1.0, row, column);
} else {
dataset.incrementValue(1.0, row, column);
}
}
}
} catch (ArrayIndexOutOfBoundsException exp) {
JOptionPane.showMessageDialog(
this,
"The data set contains some errors. This attribute can not be visualized",
"Error", 2);
}
this.chart = ChartFactory.createBarChart3D("", "", "", dataset,
PlotOrientation.VERTICAL, legend, false, false);
this.chart.setBackgroundPaint(new Color(0xFFFFFF));
//BufferedImage image = this.chart.createBufferedImage(210, 140);
BufferedImage image = this.chart.createBufferedImage(400, 240);
this.imagejLabel.setIcon(new ImageIcon(image));
this.clickToExpandjLabel.setVisible(true);
} else {
this.valuesjScrollPane.setEnabled(false);
this.valuesjScrollPane.setVisible(false);
this.valuesjTextPane.setEnabled(false);
this.valuesjTextPane.setVisible(false);
Vector r = ((VisualizePanel) this.getParent().getParent()).getData().getRangesVar(
((VisualizePanel) this.getParent().getParent()).getData().getAttributeIndex(
this.tableInfojTable.getSelectedRow()));
this.valueRankjLabelIzdo.setText(r.elementAt(0).toString());
this.valueRankjLabelDcho.setText(r.elementAt(1).toString());
// Average
double m = 0.0;
for (int i = 0; i < ((VisualizePanel) this.getParent().getParent()).getData().getNData(); i++) {
String valor = ((VisualizePanel) this.getParent().getParent()).getData().getDataIndex(i,
this.tableInfojTable.getSelectedRow());
if (valor != null) {
m += Double.valueOf(valor).doubleValue();
}
}
m = m / ((VisualizePanel) this.getParent().getParent()).getData().getNData();
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(3);
this.valueAveragejLabel.setText(df.format(m));
// Variance
double v = 0.0;
for (int i = 0; i < ((VisualizePanel) this.getParent().getParent()).getData().getNData(); i++) {
String valor = ((VisualizePanel) this.getParent().getParent()).getData().getDataIndex(i,
this.tableInfojTable.getSelectedRow());
if (valor != null) {
v += Math.pow(Double.valueOf(valor).doubleValue() - m, 2);
}
}
v = v / (((VisualizePanel) this.getParent().getParent()).getData().getNData() - 1);
this.valueVariancejLabel.setText(df.format(v));
// Draw scatter plot
XYSeriesCollection juegoDatos = new XYSeriesCollection();
boolean legend = false;
if (((VisualizePanel) this.getParent().getParent()).getOutAttribute() != -1) {
Vector outputRang = ((VisualizePanel) this.getParent().getParent()).getData().getRange(((VisualizePanel) this.getParent().getParent()).getOutAttribute());
XYSeries series[] = new XYSeries[outputRang.size()];
for (int i = 0; i < outputRang.size(); i++) {
series[i] = new XYSeries("Class " + outputRang.elementAt(i));
juegoDatos.addSeries(series[i]);
}
for (int i = 0; i < ((VisualizePanel) this.getParent().getParent()).getData().getNData(); i++) {
int clase = outputRang.indexOf(((VisualizePanel) this.getParent().getParent()).getData().getDataIndex(i, ((VisualizePanel) this.getParent().getParent()).getOutAttribute()));
String valor = ((VisualizePanel) this.getParent().getParent()).getData().getDataIndex(i,
this.tableInfojTable.getSelectedRow());
if (valor != null) {
series[clase].add(Double.parseDouble(Integer.toString(i)), Double.valueOf(valor).doubleValue());
}
}
legend = true;
} else {
XYSeries series = new XYSeries("Regresión");
juegoDatos.addSeries(series);
for (int i = 0; i < ((VisualizePanel) this.getParent().getParent()).getData().getNData(); i++) {
String valor = ((VisualizePanel) this.getParent().getParent()).getData().getDataIndex(i,
this.tableInfojTable.getSelectedRow());
if (valor != null) {
series.add(Double.parseDouble(Integer.toString(i)),
Double.valueOf(valor).doubleValue());
}
}
}
chart = ChartFactory.createScatterPlot("", "", "", juegoDatos,
PlotOrientation.VERTICAL, legend, false, false);
chart.setBackgroundPaint(new Color(0xFFFFFF));
//BufferedImage image = chart.createBufferedImage(210, 140);
BufferedImage image = chart.createBufferedImage(400, 240);
this.imagejLabel.setIcon(new ImageIcon(image));
this.clickToExpandjLabel.setVisible(true);
}
}
}