📄 attributepanel.java
字号:
if (barC == null) {
/*
System.err.println("Warning: no configuration property found in "
+VisualizeUtils.PROPERTY_FILE
+" for "+barKey);
*/
} else {
//System.err.println("Setting attribute bar colour to: "+barC);
m_barColour = VisualizeUtils.processColour(barC, m_barColour);
}
}
}
/**
* This constructs an attributePanel.
*/
public AttributePanel() {
setProperties();
this.setBackground(Color.blue);
setVerticalScrollBarPolicy(VERTICAL_SCROLLBAR_ALWAYS);
m_colorList = new FastVector(10);
for (int noa = m_colorList.size(); noa < 10; noa++) {
Color pc = m_DefaultColors[noa % 10];
int ija = noa / 10;
ija *= 2;
for (int j=0;j<ija;j++) {
pc = pc.darker();
}
m_colorList.addElement(pc);
}
}
/**
* Add a listener to the list of things listening to this panel
* @param a the listener to notify when attribute bars are clicked on
*/
public void addAttributePanelListener(AttributePanelListener a) {
m_Listeners.addElement(a);
}
/**
* Set the index of the attribute by which to colour the data. Updates
* the number of entries in the colour list if there are more values
* for this new attribute than previous ones.
* @param c the index of the attribute to colour on
* @param h maximum value of this attribute
* @param l minimum value of this attribute
*/
public void setCindex(int c, double h, double l) {
m_cIndex = c;
m_maxC = h;
m_minC = l;
if (m_span != null) {
if (m_plotInstances.numAttributes() > 0 &&
m_cIndex < m_plotInstances.numAttributes()) {
if (m_plotInstances.attribute(m_cIndex).isNominal()) {
if (m_plotInstances.attribute(m_cIndex).numValues() >
m_colorList.size()) {
extendColourMap();
}
}
}
this.repaint();
}
}
/**
* Set the index of the attribute by which to colour the data. Updates
* the number of entries in the colour list if there are more values
* for this new attribute than previous ones.
* @param c the index of the attribute to colour on
*/
public void setCindex(int c) {
m_cIndex = c;
/* m_maxC = h;
m_minC = l; */
if (m_span != null) {
if (m_cIndex < m_plotInstances.numAttributes() &&
m_plotInstances.attribute(m_cIndex).isNumeric()) {
double min=Double.POSITIVE_INFINITY;
double max=Double.NEGATIVE_INFINITY;
double value;
for (int i=0;i<m_plotInstances.numInstances();i++) {
if (!m_plotInstances.instance(i).isMissing(m_cIndex)) {
value = m_plotInstances.instance(i).value(m_cIndex);
if (value < min) {
min = value;
}
if (value > max) {
max = value;
}
}
}
m_minC = min; m_maxC = max;
} else {
if (m_plotInstances.attribute(m_cIndex).numValues() >
m_colorList.size()) {
extendColourMap();
}
}
this.repaint();
}
}
/**
* Adds more colours to the colour list
*/
private void extendColourMap() {
if (m_plotInstances.attribute(m_cIndex).isNominal()) {
for (int i = m_colorList.size();
i < m_plotInstances.attribute(m_cIndex).numValues();
i++) {
Color pc = m_DefaultColors[i % 10];
int ija = i / 10;
ija *= 2;
for (int j=0;j<ija;j++) {
pc = pc.brighter();
}
m_colorList.addElement(pc);
}
}
}
/**
* Sets a list of colours to use for colouring data points
* @param cols a list of java.awt.Color
*/
public void setColours(FastVector cols) {
m_colorList = cols;
}
/**
* This sets the instances to be drawn into the attribute panel
* @param ins The instances.
*/
public void setInstances(Instances ins) throws Exception {
if (ins.numAttributes() > 512) {
throw new Exception("Can't display more than 512 attributes!");
}
if (m_span == null) {
m_span = new JPanel() {
public void paintComponent(Graphics gx) {
super.paintComponent(gx);
gx.setColor(Color.red);
if (m_yIndex != m_xIndex) {
gx.drawString("X", 5, m_xIndex * 20 + 16);
gx.drawString("Y", 5, m_yIndex * 20 + 16);
}
else {
gx.drawString("B", 5, m_xIndex * 20 + 16);
}
}
};
}
m_span.removeAll();
m_plotInstances = ins;
if (ins.numInstances() > 0 && ins.numAttributes() > 0) {
JPanel padder = new JPanel();
JPanel padd2 = new JPanel();
/* if (m_splitListener != null) {
m_plotInstances.randomize(new Random());
} */
m_heights = new int[ins.numInstances()];
m_cIndex = ins.numAttributes() - 1;
for (int noa = 0; noa < ins.numInstances(); noa++) {
m_heights[noa] = (int)(Math.random() * 19);
}
m_span.setPreferredSize(new Dimension(m_span.getPreferredSize().width,
(m_cIndex + 1) * 20));
m_span.setMaximumSize(new Dimension(m_span.getMaximumSize().width,
(m_cIndex + 1) * 20));
AttributeSpacing tmp;
GridBagLayout gb = new GridBagLayout();
GridBagLayout gb2 = new GridBagLayout();
GridBagConstraints constraints = new GridBagConstraints();
padder.setLayout(gb);
m_span.setLayout(gb2);
constraints.anchor = GridBagConstraints.CENTER;
constraints.gridx=0;constraints.gridy=0;constraints.weightx=5;
constraints.fill = GridBagConstraints.HORIZONTAL;
constraints.gridwidth=1;constraints.gridheight=1;
constraints.insets = new Insets(0, 0, 0, 0);
padder.add(m_span, constraints);
constraints.gridx=0;constraints.gridy=1;constraints.weightx=5;
constraints.fill = GridBagConstraints.BOTH;
constraints.gridwidth=1;constraints.gridheight=1;constraints.weighty=5;
constraints.insets = new Insets(0, 0, 0, 0);
padder.add(padd2, constraints);
constraints.weighty=0;
setViewportView(padder);
//getViewport().setLayout(null);
//m_span.setMinimumSize(new Dimension(100, (m_cIndex + 1) * 24));
//m_span.setSize(100, (m_cIndex + 1) * 24);
constraints.anchor = GridBagConstraints.CENTER;
constraints.gridx=0;constraints.gridy=0;constraints.weightx=5;
constraints.fill = GridBagConstraints.HORIZONTAL;
constraints.gridwidth=1;constraints.gridheight=1;constraints.weighty=5;
constraints.insets = new Insets(2,20,2,4);
for (int noa = 0; noa < ins.numAttributes(); noa++) {
tmp = new AttributeSpacing(ins.attribute(noa), noa);
constraints.gridy = noa;
m_span.add(tmp, constraints);
}
}
}
/**
* shows which bar is the current x attribute.
* @param x The attributes index.
*/
public void setX(int x) {
if (m_span != null) {
m_xIndex = x;
m_span.repaint();
}
}
/**
* shows which bar is the current y attribute.
* @param y The attributes index.
*/
public void setY(int y) {
if (m_span != null) {
m_yIndex = y;
m_span.repaint();
}
}
/**
* Main method for testing this class.
* @param args first argument should be an arff file. Second argument
* can be an optional class col
*/
public static void main(String [] args) {
try {
if (args.length < 1) {
System.err.println("Usage : weka.gui.visualize.AttributePanel "
+"<dataset> [class col]");
System.exit(1);
}
final javax.swing.JFrame jf =
new javax.swing.JFrame("Weka Explorer: Attribute");
jf.setSize(100,100);
jf.getContentPane().setLayout(new BorderLayout());
final AttributePanel p2 = new AttributePanel();
p2.addAttributePanelListener(new AttributePanelListener() {
public void attributeSelectionChange(AttributePanelEvent e) {
if (e.m_xChange) {
System.err.println("X index changed to : "+e.m_indexVal);
} else {
System.err.println("Y index changed to : "+e.m_indexVal);
}
}
});
jf.getContentPane().add(p2, BorderLayout.CENTER);
jf.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent e) {
jf.dispose();
System.exit(0);
}
});
if (args.length >= 1) {
System.err.println("Loading instances from " + args[0]);
java.io.Reader r = new java.io.BufferedReader(
new java.io.FileReader(args[0]));
Instances i = new Instances(r);
i.setClassIndex(i.numAttributes()-1);
p2.setInstances(i);
}
if (args.length > 1) {
p2.setCindex((Integer.parseInt(args[1]))-1);
} else {
p2.setCindex(0);
}
jf.setVisible(true);
} catch (Exception ex) {
ex.printStackTrace();
System.err.println(ex.getMessage());
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -