2013-03-06 96 views
1

由於一張圖片勝過千言萬語,我會告訴你。JfreeChart:改變極座標圖上的軸線角度

這是我有:

old

這就是我需要:

new

一些代碼也許有用:

private JFreeChart createChart (XYDataset dataset) 
{ 
    ValueAxis radiusAxis = new NumberAxis(); 
    radiusAxis.setTickLabelsVisible (false); 

    // Rendering serie (handeling null values) 
    DefaultPolarItemRenderer ren = new DefaultPolarItemRenderer() 
    { 
     @Override 
     public void drawSeries (Graphics2D g2, Rectangle2D dataArea, 
      PlotRenderingInfo info, PolarPlot plot, XYDataset dataset, int seriesIndex) 
     { 
      boolean newPath = true; 
      GeneralPath polyline = new GeneralPath(); 
      int numPoints = dataset.getItemCount (seriesIndex); 
      for (int i = 0 ; i < numPoints - 1 ; i++) 
      { 
       double theta = dataset.getXValue (seriesIndex, i); 
       double radius = dataset.getYValue (seriesIndex, i); 
       Point p = plot.translateValueThetaRadiusToJava2D (theta, radius, 
         dataArea); 
       if (p.x == 0 && p.y == 0) 
       { 
        newPath = true; 
       } 
       else 
       { 
        if (newPath) 
        { 
         polyline.moveTo (p.x, p.y); 
         newPath = false; 
        } 
        else 
        { 
         polyline.lineTo (p.x, p.y); 
        } 
       } 
      } 
      g2.setPaint (lookupSeriesPaint (seriesIndex)); 
      g2.setStroke (lookupSeriesStroke (seriesIndex)); 
      g2.draw (polyline); 
     } 
    }; 

    // removing fill serie 
    ren.setSeriesFilled (0, false); 


    // custimizing angles 
    PolarPlot plot = new PolarPlot (dataset, radiusAxis, ren) 
    { 
     @Override 
     protected java.util.List refreshAngleTicks() 
     { 
      java.util.List ticks = new ArrayList(); 

      ticks.add (new NumberTick (0, "12AM", TextAnchor.CENTER, TextAnchor.TOP_LEFT, 0)); 
      ticks.add (new NumberTick (30, "2AM", TextAnchor.TOP_LEFT, TextAnchor.TOP_RIGHT, 0)); 
      ticks.add (new NumberTick (60, "4AM", TextAnchor.TOP_LEFT, TextAnchor.TOP_LEFT, 0)); 
      ticks.add (new NumberTick (90, "6AM", TextAnchor.TOP_LEFT, TextAnchor.TOP_LEFT, 0)); 
      ticks.add (new NumberTick (120, "8AM", TextAnchor.TOP_LEFT, TextAnchor.TOP_LEFT, 0)); 
      ticks.add (new NumberTick (150, "10AM", TextAnchor.TOP_LEFT, TextAnchor.TOP_LEFT, 0)); 
      ticks.add (new NumberTick (180, "12PM", TextAnchor.CENTER, TextAnchor.TOP_LEFT, 0)); 
      ticks.add (new NumberTick (210, "2PM", TextAnchor.TOP_RIGHT, TextAnchor.TOP_LEFT, 0)); 
      ticks.add (new NumberTick (240, "4PM", TextAnchor.TOP_RIGHT, TextAnchor.TOP_LEFT, 0)); 
      ticks.add (new NumberTick (270, "6PM", TextAnchor.TOP_RIGHT, TextAnchor.TOP_LEFT, 0)); 
      ticks.add (new NumberTick (300, "8PM", TextAnchor.TOP_RIGHT, TextAnchor.TOP_LEFT, 0)); 
      ticks.add (new NumberTick (330, "10PM", TextAnchor.TOP_RIGHT, TextAnchor.TOP_LEFT, 0)); 

      return ticks; 
     } 
    }; 

    // colors.. 
    plot.setOutlinePaint (new Color (0, 0, 0, 0)); 
    plot.setBackgroundPaint (Color.white); 
    plot.setRadiusGridlinePaint (Color.gray); 
    ren.setShapesVisible (true); 
    plot.setRadiusGridlinesVisible (true); 
    plot.setAngleGridlinesVisible (true); 
    plot.setAngleLabelsVisible (true); 
    plot.setOutlineVisible (true); 
    plot.setAngleGridlinePaint (Color.BLACK); 
    plot.setRenderer (ren); 

    JFreeChart chart = new JFreeChart ("", JFreeChart.DEFAULT_TITLE_FONT, plot, false); 
    chart.setBackgroundPaint (Color.white); 
    chart.setBorderVisible (false); 
    chart.setBorderPaint (Color.RED); 

    // showing Label Axis (0 ... 20 ... 30 ...40) 
    NumberAxis rangeAxis = (NumberAxis) plot.getAxis(); 
    rangeAxis.setTickLabelsVisible (true); 

    rangeAxis.setAxisLinePaint (Color.RED); 
    return chart; 
} 

正如你所看到的,我想更改Axis線角度;我不知道如何繼續。

謝謝。

+0

交叉貼[這裏](http://www.jfree.org/forum/viewtopic.php?f=3&t=116432)。另請參閱本[問與答](http://stackoverflow.com/q/3458824/230513)。 – trashgod 2013-03-06 19:23:48

+0

您可能想突出顯示兩個圖像之間的差異。我不完全相信有一個。 – mbatchkarov 2013-03-06 20:06:44

+0

感謝您的反饋,如果您注意到我想更改軸線角度(在此示例中從6AM到4AM)。任何想法將不勝感激 – Skazi 2013-03-06 23:15:09

回答

0

您沒有提及JFreeChart的使用版本,但JFreeChart 1.0.14對polarcharts進行了一些改進。您可以通過PolarPlot.setAngleOffset()設置角度偏移,允許在任何你喜歡的位置以12點開始。

但是,軸自身不能處於任意角度,只能在北,東,南或西。這可以使用PolarPlot.setAxisLocation()進行設置。

心連心,
- 馬丁