2012-04-18 18 views
3

enter image description here 現在、このコードを実行すると、上に示したようなグラフが表示されます。私が示したグラフを描きたいと思います。現在、(0,0)についてグラフを対称的に描いていますが、(0、-3)または(0,< -2)から描画すると思っています。これを行うための他の方法はありますか?画像に示すようにグラフを作成するにはどうしたらいいですか?

現在のコード:

public class Profile { 



    double last=0; 
    ChartFrame frame1; 
    JToolBar jt=new JToolBar(); 
    public void generateProfile(int[] pointValue,double[] distance){ 
     ArrayList pv=new ArrayList(); 
     ArrayList dist=new ArrayList(); 

     pv.add(pointValue); 
     dist.add(distance); 
     int min=pointValue[0]; 
     for(int i=0;i<pv.size();i++){ 
      //System.out.print(pointValue[i]); 
      if(pointValue[i]<min){ 
       min=pointValue[i]; 
      } 
     } 
     for(int i=0;i<dist.size();i++){ 
      System.out.print(distance[i]); 
     } 


     XYSeries series = new XYSeries("Average Weight"); 
     for(int i=0;i<pointValue.length;i++){ 
      //if(pointValue[i]!=0){ 
       series.add(last,pointValue[i]); 
       last=distance[i]; 
      //} 
     } 


     XYDataset xyDataset = new XYSeriesCollection(series); 
     JFreeChart chart= ChartFactory.createXYAreaChart("Profile View Of Contour", "Distance", "Contour Value", xyDataset, PlotOrientation.VERTICAL, true, true, false); 
     ValueAxis rangeAxis = chart.getXYPlot().getRangeAxis(); 
     rangeAxis.setLowerBound(-3); 
     frame1=new ChartFrame("XYLine Chart",chart); 

     JButton saveimg=new JButton(new AbstractAction("Save as Image"){ 
      public void actionPerformed(ActionEvent e) { 
       //some other lines of code... 
      } 
     }); 
     jt.add(saveimg); 
     frame1.add(jt, BorderLayout.NORTH); 
     frame1.setVisible(true); 
     frame1.setSize(300,300); 
    } 



    public static void main(String ar[]){ 
     Profile pro=new Profile(); 
     int[] pv={2,3,0,5,-2,10}; 
     double[] dist={1,4,8,12,14,20}; 
     pro.generateProfile(pv, dist); 



    } 
} 
+2

を書き込むことによって、この新しいレンダラを使用する必要がある[ここ](http://stackoverflow.com/q/8866390/230513) 。 – trashgod

答えて

0

このためのサポートはXYAreaRendererに現在ありません。しかし、これを実装するのは難しいことではありません。 XYAreaRenderer.drawItem()メソッドのコードを見てください。このメソッド内には、実際のゼロ値(0.0)を使用して計算されるローカル変数transZeroがあります。他の値で0.0を置き換えるだけであれば、おそらく必要なことをするでしょう。

これを達成する最も簡単な方法は、XYAreaRendererから派生し、drawItem()をオーバーライドする独自のレンダラーを作成することです。この方法では、元のコードをコピーし、上記のように修正します。

あなたが示したのいずれかの方法を適応させることができるかもしれないあなたはその後、ちょうど

XYAreaRenderer yourNewRenderer = ...; /* initialize here */ 
chart.getXYPlot().setRender(yourNewRenderer); 
関連する問題