⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 attributevisualizationpanel.java

📁 一个数据挖掘软件ALPHAMINERR的整个过程的JAVA版源代码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
	    int sum=0;
	    for(int k=0; k<histBarClassCounts[0].length; k++)
	      sum += histBarClassCounts[0][k];
	    return ("<html><center><font face=Dialog size=-1>"
		    +sum+"<br>["
		    +Utils.doubleToString(bar+m_barRange*temp,3)+", "+Utils.doubleToString((bar+m_barRange*(temp+1)),3)
		    +"]</font></center></html>");
	  }
	  else if( temp < histBarClassCounts.length ) {
	    int sum=0;
	    for(int k=0; k<histBarClassCounts[temp].length; k++)
	      sum+=histBarClassCounts[temp][k];
	    return ("<html><center><font face=Dialog size=-1>"
		    +sum+"<br>("
		    +Utils.doubleToString(bar+m_barRange*temp,3)+", "+Utils.doubleToString((bar+m_barRange*(temp+1)),3)
		    +"]</font></center></html>"); 
	  }
	}	  
      }
      else {
	barWidth = ((this.getWidth()-6)/histBarCounts.length)<1 ? 1:((this.getWidth()-6)/histBarCounts.length);
	  
	x = 3;
	if( (this.getWidth() - (x + histBarCounts.length*barWidth)) > 5 )
	  x += (this.getWidth() - (x + histBarCounts.length*barWidth))/2;
	  
	heightRatio = (this.getHeight()-(float)fm.getHeight())/maxValue;
	  
	if( ev.getX()-x >= 0) {
	  int temp = (int)((ev.getX()-x)/(barWidth+0.0000000001));
	  if(temp == 0)
	    return ("<html><center><font face=Dialog size=-1>"
		    +histBarCounts[0]+"<br>["
		    +Utils.doubleToString(bar+m_barRange*temp,3)+", "+Utils.doubleToString((bar+m_barRange*(temp+1)),3)
		    +"]</font></center></html>");
	  else if( temp < histBarCounts.length )
	    return ("<html><center><font face=Dialog size=-1>"
		    +histBarCounts[temp]+"<br>("
		    +Utils.doubleToString(bar+m_barRange*temp,3)+", "+Utils.doubleToString((bar+m_barRange*(temp+1)),3)
		    +"]</font></center></html>"); 
	}
      }
    }
    return ""; 
  }
    

  /**
   * Paints this component
   *
   * @param g The graphics object for this component
   */
  public void paintComponent(Graphics g) {
    g.clearRect(0,0,this.getWidth(), this.getHeight());

    if(as!=null) {
      if(threadRun==false) {
	int buttonHeight=0;
	if(m_colorAttrib!=null)
	  buttonHeight = m_colorAttrib.getHeight()+m_colorAttrib.getLocation().y;
	if(as.nominalCounts != null) { 
	  float heightRatio, intervalWidth;
	  int x=0, y=0, barHeight, barWidth;
		
	  if((classIndex >= 0) && (m_data.attribute(classIndex).isNominal())) {
	    intervalWidth =  (this.getWidth()/(float)histBarClassCounts.length);
		    
	    if(intervalWidth>5)
	      barWidth = (int)Math.floor(intervalWidth*0.8F);
	    else
	      barWidth = 1;
		    
	    x = x + (int)( (Math.floor(intervalWidth*0.1F))<1 ? 1:(Math.floor(intervalWidth*0.1F)) );
		    
	    if( this.getWidth() - 
		(x + histBarClassCounts.length*barWidth 
		 +(int)( (Math.floor(intervalWidth*0.2F))<1 ? 
			 1:(Math.floor(intervalWidth*0.2F)) )*histBarClassCounts.length) > 5 )
	      x += (this.getWidth() - 
		    (x + histBarClassCounts.length*barWidth + 
		     (int)( (Math.floor(intervalWidth*0.2F))<1 ? 
			    1:(Math.floor(intervalWidth*0.2F)) )*histBarClassCounts.length))/2;
		    
	    int sum=0;
	    for(int i=0; i<histBarClassCounts.length; i++) {
	      heightRatio = (this.getHeight()-(float)fm.getHeight()-buttonHeight)/maxValue;
	      y=this.getHeight();
	      for(int j=0; j<histBarClassCounts[i].length; j++) {
		sum = sum + histBarClassCounts[i][j];
		y = y-Math.round(histBarClassCounts[i][j]*heightRatio);
		g.setColor( (Color)m_colorList.elementAt(j) );
		g.fillRect(x, y, barWidth, Math.round(histBarClassCounts[i][j]*heightRatio));
		g.setColor(Color.black);
	      }
	      if(fm.stringWidth(Integer.toString(sum))<intervalWidth)
		g.drawString(Integer.toString(sum), x, y-1);
	      x = x+barWidth+(int)( (Math.floor(intervalWidth*0.2F))<1 ? 1:(Math.floor(intervalWidth*0.2F)) );
	      sum=0;
	    }
		    
	  }
	  else {   //else if class attribute is numeric
	    intervalWidth =  (this.getWidth()/(float)histBarCounts.length);
		    
	    if(intervalWidth>5)
	      barWidth = (int)Math.floor(intervalWidth*0.8F);
	    else
	      barWidth = 1;
		    
	    x = x + (int)( (Math.floor(intervalWidth*0.1F))<1 ? 1:(Math.floor(intervalWidth*0.1F)) );
		    
	    if( this.getWidth() - 
		(x + histBarCounts.length*barWidth 
		 +(int)( (Math.floor(intervalWidth*0.2F))<1 ? 1:(Math.floor(intervalWidth*0.2F)) )*histBarCounts.length) > 5 )
	      x += (this.getWidth() - 
		    (x + histBarCounts.length*barWidth + 
		     (int)( (Math.floor(intervalWidth*0.2F))<1 ? 1:(Math.floor(intervalWidth*0.2F)) )*histBarCounts.length))/2;
		    
	    for(int i=0; i<histBarCounts.length; i++) {
	      heightRatio = (this.getHeight()-(float)fm.getHeight()-buttonHeight)/maxValue;
	      y = this.getHeight()-Math.round(histBarCounts[i]*heightRatio);
	      g.fillRect(x, y, barWidth, Math.round(histBarCounts[i]*heightRatio));
	      if(fm.stringWidth(Integer.toString(histBarCounts[i]))<intervalWidth)
		g.drawString(Integer.toString(histBarCounts[i]), x, y-1);
			
	      x = x+barWidth+(int)( (Math.floor(intervalWidth*0.2F))<1 ? 1:(Math.floor(intervalWidth*0.2F)) );
	    }
	  }
		
	}
	//else {
	//g.clearRect(0, 0, this.getWidth(), this.getHeight()); 
	//g.drawString("Calculating. Please Wait...", 
	//       this.getWidth()/2 - fm.stringWidth("Calculating. Please Wait...")/2,
	//       this.getHeight()/2-fm.getHeight()/2);
	//}
	//} 
	else if(as.numericStats != null) {
		
	  if(histBarClassCounts!=null || histBarCounts!=null) {
	    //threadRun==false && (histBarClassCounts!=null || histBarCounts!=null)) {
	    float heightRatio, intervalWidth;
	    int x=0, y=0,  barWidth;
		    
	    if((classIndex >=0) && (m_data.attribute(classIndex).isNominal())) {
	      barWidth = ((this.getWidth()-6)/histBarClassCounts.length)<1 ? 1:((this.getWidth()-6)/histBarClassCounts.length);
			
	      x = 3;
	      if( (this.getWidth() - (x + histBarClassCounts.length*barWidth)) > 5 )
		x += (this.getWidth() - (x + histBarClassCounts.length*barWidth))/2;
			
	      for(int i=0; i<histBarClassCounts.length; i++) {
		heightRatio = (this.getHeight()-(float)fm.getHeight()-buttonHeight-19)/maxValue;
		y = this.getHeight()-19;
		int sum = 0;
		for(int j=0; j<histBarClassCounts[i].length; j++) {
		  y = y-Math.round(histBarClassCounts[i][j]*heightRatio);
		  //System.out.println("Filling x:"+x+" y:"+y+" width:"+barWidth+" height:"+(histBarClassCounts[i][j]*heightRatio));
		  g.setColor( (Color)m_colorList.elementAt(j) );
		  if(barWidth>1)
		    g.fillRect(x, y, barWidth, Math.round(histBarClassCounts[i][j]*heightRatio));
		  else if((histBarClassCounts[i][j]*heightRatio)>0)
		    g.drawLine(x, y, x, y+Math.round(histBarClassCounts[i][j]*heightRatio));
		  g.setColor(Color.black);
		  sum = sum + histBarClassCounts[i][j];
		}
		if(fm.stringWidth(" "+Integer.toString(sum))<barWidth)
		  g.drawString(" "+Integer.toString(sum), x, y-1);
			    
		x = x+barWidth;
	      }
			
	      x = 3;
	      if( (this.getWidth() - (x + histBarClassCounts.length*barWidth)) > 5 )
		x += (this.getWidth() - (x + histBarClassCounts.length*barWidth))/2;
			
	      g.drawLine(x, this.getHeight()-17, 
			 (barWidth==1) ? x+barWidth*histBarClassCounts.length-1:x+barWidth*histBarClassCounts.length,
			 this.getHeight()-17); //axis line
	      g.drawLine(x, this.getHeight()-16, x, this.getHeight()-12); //minimum line
	      g.drawString(Utils.doubleToString(as.numericStats.min, 2), 
			   x, 
			   this.getHeight()-12+fm.getHeight()); //minimum value
	      g.drawLine(x+(barWidth*histBarClassCounts.length)/2,
			 this.getHeight()-16,
			 x+(barWidth*histBarClassCounts.length)/2,
			 this.getHeight()-12); //median line
	      g.drawString(Utils.doubleToString(as.numericStats.max/2+as.numericStats.min/2, 2), 
			   x+(barWidth*histBarClassCounts.length)/2
			   -fm.stringWidth(Utils.doubleToString(as.numericStats.max/2+as.numericStats.min/2, 2))/2,
			   this.getHeight()-12+fm.getHeight()); //median value
	      g.drawLine( (barWidth==1) ? x+barWidth*histBarClassCounts.length-1:x+barWidth*histBarClassCounts.length, 
			  this.getHeight()-16, 
			  (barWidth==1) ? x+barWidth*histBarClassCounts.length-1:x+barWidth*histBarClassCounts.length, 
			  this.getHeight()-12); //maximum line
	      g.drawString(Utils.doubleToString(as.numericStats.max, 2), 
			   (barWidth==1) ?
			   x+barWidth*histBarClassCounts.length-fm.stringWidth(Utils.doubleToString(as.numericStats.max, 2))-1:
			   x+barWidth*histBarClassCounts.length-fm.stringWidth(Utils.doubleToString(as.numericStats.max, 2)), 
			   this.getHeight()-12+fm.getHeight()); //maximum value
	    }
	    else {  //if class attribute is numeric
	      barWidth = ((this.getWidth()-6)/histBarCounts.length)<1 ? 1:((this.getWidth()-6)/histBarCounts.length);
			
	      x = 3;
	      if( (this.getWidth() - (x + histBarCounts.length*barWidth)) > 5 )
		x += (this.getWidth() - (x + histBarCounts.length*barWidth))/2;
			
	      for(int i=0; i<histBarCounts.length; i++) {
		heightRatio = (this.getHeight()-(float)fm.getHeight()-buttonHeight-19)/maxValue;
		y = this.getHeight()-Math.round(histBarCounts[i]*heightRatio)-19;
		//System.out.println("Filling x:"+x+" y:"+y+" width:"+barWidth+" height:"+(histBarCounts[i]*heightRatio));
		if(barWidth>1)
		  g.drawRect(x, y, barWidth, Math.round(histBarCounts[i]*heightRatio));
		else if((histBarCounts[i]*heightRatio)>0)
		  g.drawLine(x, y, x, y+Math.round(histBarCounts[i]*heightRatio));
		if(fm.stringWidth(" "+Integer.toString(histBarCounts[i]))<barWidth)
		  g.drawString(" "+Integer.toString(histBarCounts[i]), x, y-1);
			    
		x = x+barWidth;
	      }
			
	      x = 3;
	      if( (this.getWidth() - (x + histBarCounts.length*barWidth)) > 5 )
		x += (this.getWidth() - (x + histBarCounts.length*barWidth))/2;
			
	      g.drawLine(x, this.getHeight()-17, 
			 (barWidth==1) ? x+barWidth*histBarCounts.length-1:x+barWidth*histBarCounts.length,
			 this.getHeight()-17); //axis line
	      g.drawLine(x, this.getHeight()-16, x, this.getHeight()-12); //minimum line
	      g.drawString(Utils.doubleToString(as.numericStats.min, 2), 
			   x, 
			   this.getHeight()-12+fm.getHeight()); //minimum value
	      g.drawLine(x+(barWidth*histBarCounts.length)/2,
			 this.getHeight()-16,
			 x+(barWidth*histBarCounts.length)/2,
			 this.getHeight()-12); //median line
	      g.drawString(Utils.doubleToString(as.numericStats.max/2+as.numericStats.min/2, 2), 
			   x+(barWidth*histBarCounts.length)/2
			   -fm.stringWidth(Utils.doubleToString(as.numericStats.max/2+as.numericStats.min/2, 2))/2,
			   this.getHeight()-12+fm.getHeight()); //median value
	      g.drawLine( (barWidth==1) ? x+barWidth*histBarCounts.length-1:x+barWidth*histBarCounts.length, 
			  this.getHeight()-16, 
			  (barWidth==1) ? x+barWidth*histBarCounts.length-1:x+barWidth*histBarCounts.length, 
			  this.getHeight()-12); //maximum line
	      g.drawString(Utils.doubleToString(as.numericStats.max, 2), 
			   (barWidth==1) ?
			   x+barWidth*histBarCounts.length-fm.stringWidth(Utils.doubleToString(as.numericStats.max, 2))-1:
			   x+barWidth*histBarCounts.length-fm.stringWidth(Utils.doubleToString(as.numericStats.max, 2)), 
			   this.getHeight()-12+fm.getHeight()); //maximum value
	    }
	    //System.out.println("barWidth:"+barWidth+" histBarCount:"+histBarCounts.length);
		    
	  }
	} else {
	  g.clearRect(0, 0, this.getWidth(), this.getHeight()); 
	  g.drawString("Attribute is neither numeric nor nominal.", 
		     this.getWidth()/2 - fm.
		       stringWidth("Attribute is neither numeric nor nominal.")/2,
		     this.getHeight()/2-fm.getHeight()/2);
	}
      }
      else {   //if still calculating the plot
	g.clearRect(0, 0, this.getWidth(), this.getHeight()); 
	g.drawString("Calculating. Please Wait...", 
		     this.getWidth()/2 - fm.stringWidth("Calculating. Please Wait...")/2,
		     this.getHeight()/2-fm.getHeight()/2);
      }
    }
  }
    
    
    
  /**
   * Main method to test this class from command line
   *
   * @param args The arff file and the index of the attribute to use
   */ 
  public static void main(String [] args) {
    if(args.length!=3) {
      final JFrame jf = new JFrame("AttribVisualization");
      AttributeVisualizationPanel ap = new AttributeVisualizationPanel();
      try { 
	Instances ins = new Instances( new FileReader(args[0]) );
	ap.setInstances(ins);
	System.out.println("Loaded: "+args[0]+"\nRelation: "+ap.m_data.relationName()+"\nAttributes: "+ap.m_data.numAttributes());
	ap.setAttribute( Integer.parseInt(args[1]) );
      }
      catch(Exception ex) { ex.printStackTrace(); System.exit(-1); }
      System.out.println("The attributes are: ");
      for(int i=0; i<ap.m_data.numAttributes(); i++)
	System.out.println(ap.m_data.attribute(i).name());

      jf.setSize(500, 300);
      jf.getContentPane().setLayout( new BorderLayout() );
      jf.getContentPane().add(ap, BorderLayout.CENTER );
      jf.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
      jf.setVisible(true);
    }
    else
      System.out.println("Usage: java AttributeVisualizationPanel [arff file] [index of attribute]");
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -