public void drawHorizontalItem(Graphics2D g2,CategoryItemRendererState state,Rectangle2D dataArea,CategoryPlot plot,CategoryAxis domainAxis,ValueAxis rangeAxis,CategoryDataset dataset,int row,int column){
  BoxAndWhiskerCategoryDataset bawDataset=(BoxAndWhiskerCategoryDataset)dataset;
  double categoryEnd=domainAxis.getCategoryEnd(column,getColumnCount(),dataArea,plot.getDomainAxisEdge());
  double categoryStart=domainAxis.getCategoryStart(column,getColumnCount(),dataArea,plot.getDomainAxisEdge());
  double categoryWidth=Math.abs(categoryEnd - categoryStart);
  double yy=categoryStart;
  int seriesCount=getRowCount();
  int categoryCount=getColumnCount();
  if (seriesCount > 1) {
    double seriesGap=dataArea.getHeight() * getItemMargin() / (categoryCount * (seriesCount - 1));
    double usedWidth=(state.getBarWidth() * seriesCount) + (seriesGap * (seriesCount - 1));
    double offset=(categoryWidth - usedWidth) / 2;
    yy=yy + offset + (row * (state.getBarWidth() + seriesGap));
  }
 else {
    double offset=(categoryWidth - state.getBarWidth()) / 2;
    yy=yy + offset;
  }
  g2.setPaint(getItemPaint(row,column));
  Stroke s=getItemStroke(row,column);
  g2.setStroke(s);
  RectangleEdge location=plot.getRangeAxisEdge();
  Number xQ1=bawDataset.getQ1Value(row,column);
  Number xQ3=bawDataset.getQ3Value(row,column);
  Number xMax=bawDataset.getMaxRegularValue(row,column);
  Number xMin=bawDataset.getMinRegularValue(row,column);
  Shape box=null;
  if (xQ1 != null && xQ3 != null && xMax != null && xMin != null) {
    double xxQ1=rangeAxis.valueToJava2D(xQ1.doubleValue(),dataArea,location);
    double xxQ3=rangeAxis.valueToJava2D(xQ3.doubleValue(),dataArea,location);
    double xxMax=rangeAxis.valueToJava2D(xMax.doubleValue(),dataArea,location);
    double xxMin=rangeAxis.valueToJava2D(xMin.doubleValue(),dataArea,location);
    double yymid=yy + state.getBarWidth() / 2.0;
    double halfW=(state.getBarWidth() / 2.0) * this.whiskerWidth;
    box=new Rectangle2D.Double(Math.min(xxQ1,xxQ3),yy,Math.abs(xxQ1 - xxQ3),state.getBarWidth());
    if (this.fillBox) {
      g2.fill(box);
    }
    Paint outlinePaint=getItemOutlinePaint(row,column);
    if (this.useOutlinePaintForWhiskers) {
      g2.setPaint(outlinePaint);
    }
    g2.draw(new Line2D.Double(xxMax,yymid,xxQ3,yymid));
    g2.draw(new Line2D.Double(xxMax,yymid - halfW,xxMax,yymid + halfW));
    g2.draw(new Line2D.Double(xxMin,yymid,xxQ1,yymid));
    g2.draw(new Line2D.Double(xxMin,yymid - halfW,xxMin,yymid + halfW));
    g2.setStroke(getItemOutlineStroke(row,column));
    g2.setPaint(outlinePaint);
    g2.draw(box);
  }
  g2.setPaint(this.artifactPaint);
  double aRadius;
  if (this.meanVisible) {
    Number xMean=bawDataset.getMeanValue(row,column);
    if (xMean != null) {
      double xxMean=rangeAxis.valueToJava2D(xMean.doubleValue(),dataArea,location);
      aRadius=state.getBarWidth() / 4;
      if ((xxMean > (dataArea.getMinX() - aRadius)) && (xxMean < (dataArea.getMaxX() + aRadius))) {
        Ellipse2D.Double avgEllipse=new Ellipse2D.Double(xxMean - aRadius,yy + aRadius,aRadius * 2,aRadius * 2);
        g2.fill(avgEllipse);
        g2.draw(avgEllipse);
      }
    }
  }
  if (this.medianVisible) {
    Number xMedian=bawDataset.getMedianValue(row,column);
    if (xMedian != null) {
      double xxMedian=rangeAxis.valueToJava2D(xMedian.doubleValue(),dataArea,location);
      g2.draw(new Line2D.Double(xxMedian,yy,xxMedian,yy + state.getBarWidth()));
    }
  }
  if (state.getInfo() != null && box != null) {
    EntityCollection entities=state.getEntityCollection();
    if (entities != null) {
      addItemEntity(entities,dataset,row,column,box);
    }
  }
}

public void drawHorizontalItem ( Graphics2D g2 , CategoryItemRendererState state , Rectangle2D dataArea , CategoryPlot plot , CategoryAxis domainAxis , ValueAxis rangeAxis , CategoryDataset dataset , int row , int column ) { BoxAndWhiskerCategoryDataset bawDataset = ( BoxAndWhiskerCategoryDataset ) dataset ; double categoryEnd = domainAxis . getCategoryEnd ( column , getColumnCount ( ) , dataArea , plot . getDomainAxisEdge ( ) ) ; double categoryStart = domainAxis . getCategoryStart ( column , getColumnCount ( ) , dataArea , plot . getDomainAxisEdge ( ) ) ; double categoryWidth = Math . abs ( categoryEnd - categoryStart ) ; double yy = categoryStart ; int seriesCount = getRowCount ( ) ; int categoryCount = getColumnCount ( ) ; if ( seriesCount > 1 ) { double seriesGap = dataArea . getHeight ( ) * getItemMargin ( ) / ( categoryCount * ( seriesCount - 1 ) ) ; double usedWidth = ( state . getBarWidth ( ) * seriesCount ) + ( seriesGap * ( seriesCount - 1 ) ) ; double offset = ( categoryWidth - usedWidth ) / 2 ; yy = yy + offset + ( row * ( state . getBarWidth ( ) + seriesGap ) ) ; } else { double offset = ( categoryWidth - state . getBarWidth ( ) ) / 2 ; yy = yy + offset ; } g2 . setPaint ( getItemPaint ( row , column ) ) ; Stroke s = getItemStroke ( row , column ) ; g2 . setStroke ( s ) ; RectangleEdge location = plot . getRangeAxisEdge ( ) ; Number xQ1 = bawDataset . getQ1Value ( row , column ) ; Number xQ3 = bawDataset . getQ3Value ( row , column ) ; Number xMax = bawDataset . getMaxRegularValue ( row , column ) ; Number xMin = bawDataset . getMinRegularValue ( row , column ) ; Shape box = null ; if ( xQ1 != null && xQ3 != null && xMax != null && xMin != null ) { double xxQ1 = rangeAxis . valueToJava2D ( xQ1 . doubleValue ( ) , dataArea , location ) ; double xxQ3 = rangeAxis . valueToJava2D ( xQ3 . doubleValue ( ) , dataArea , location ) ; double xxMax = rangeAxis . valueToJava2D ( xMax . doubleValue ( ) , dataArea , location ) ; double xxMin = rangeAxis . valueToJava2D ( xMin . doubleValue ( ) , dataArea , location ) ; double yymid = yy + state . getBarWidth ( ) / 2.0 ; double halfW = ( state . getBarWidth ( ) / 2.0 ) * this . whiskerWidth ; box = new Rectangle2D . Double ( Math . min ( xxQ1 , xxQ3 ) , yy , Math . abs ( xxQ1 - xxQ3 ) , state . getBarWidth ( ) ) ; if ( this . fillBox ) { g2 . fill ( box ) ; } Paint outlinePaint = getItemOutlinePaint ( row , column ) ; if ( this . useOutlinePaintForWhiskers ) { g2 . setPaint ( outlinePaint ) ; } g2 . draw ( new Line2D . Double ( xxMax , yymid , xxQ3 , yymid ) ) ; g2 . draw ( new Line2D . Double ( xxMax , yymid - halfW , xxMax , yymid + halfW ) ) ; g2 . draw ( new Line2D . Double ( xxMin , yymid , xxQ1 , yymid ) ) ; g2 . draw ( new Line2D . Double ( xxMin , yymid - halfW , xxMin , yymid + halfW ) ) ; g2 . setStroke ( getItemOutlineStroke ( row , column ) ) ; g2 . setPaint ( outlinePaint ) ; g2 . draw ( box ) ; } g2 . setPaint ( this . artifactPaint ) ; double aRadius ; if ( this . meanVisible ) { Number xMean = bawDataset . getMeanValue ( row , column ) ; if ( xMean != null ) { double xxMean = rangeAxis . valueToJava2D ( xMean . doubleValue ( ) , dataArea , location ) ; aRadius = state . getBarWidth ( ) / 4 ; if ( ( xxMean > ( dataArea . getMinX ( ) - aRadius ) ) && ( xxMean < ( dataArea . getMaxX ( ) + aRadius ) ) ) { Ellipse2D . Double avgEllipse = new Ellipse2D . Double ( xxMean - aRadius , yy + aRadius , aRadius * 2 , aRadius * 2 ) ; g2 . fill ( avgEllipse ) ; g2 . draw ( avgEllipse ) ; } } } if ( this . medianVisible ) { Number xMedian = bawDataset . getMedianValue ( row , column ) ; if ( xMedian != null ) { double xxMedian = rangeAxis . valueToJava2D ( xMedian . doubleValue ( ) , dataArea , location ) ; g2 . draw ( new Line2D . Double ( xxMedian , yy , xxMedian , yy + state . getBarWidth ( ) ) ) ; } } if ( state . getInfo ( ) != null && box != null ) { EntityCollection entities = state . getEntityCollection ( ) ; if ( entities != null ) { addItemEntity ( entities , dataset , row , column , box ) ; } } }
draws the visual representation of a single data item when the plot has a horizontal orientation .
