📄 attributepanel.java
字号:
if (VisualizeUtils.VISUALIZE_PROPERTIES != null) { String thisClass = this.getClass().getName(); String barKey = thisClass+".barColour"; String barC = VisualizeUtils.VISUALIZE_PROPERTIES. getProperty(barKey); 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 Knowledge 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 + -