jfreechart小記(雷達圖+折線圖)

openkk 13年前發布 | 53K 次閱讀 JFreeChart 圖表/報表制作

原理是jfreechart雷達圖+折線

在設置折現圖像顏色 以及 設置雷達圖像網格數量費解,后來解決。(注釋部分)

由于網上jfreechart的資料太多重復,在細節上還比較模糊。希望看到更多的資料分享 :)

package meigui;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;

import javax.swing.JPanel;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.event.ChartChangeEvent;
import org.jfree.chart.event.ChartChangeListener;
import org.jfree.chart.plot.PolarPlot;
import org.jfree.chart.renderer.DefaultPolarItemRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.RefineryUtilities;

public class PolarChartDemo1 extends ApplicationFrame {

public PolarChartDemo1(String s) {
   super(s);
   JPanel jpanel = createDemoPanel();
   jpanel.setPreferredSize(new Dimension(600, 500));
   setContentPane(jpanel);
}

private static XYDataset createDataset() {
   XYSeriesCollection xyseriescollection = new XYSeriesCollection();
   XYSeries xyseries = new XYSeries("Series       1 ");
   xyseries.add(0.0D, 2D);
   xyseries.add(90D, 13D);
   xyseries.add(180D, 9D);
   xyseries.add(270D, 8D);
   xyseriescollection.addSeries(xyseries);
   XYSeries xyseries1 = new XYSeries("Series       2 ");
   xyseries1.add(90D, -11.199999999999999D);
   xyseries1.add(180D, 21.399999999999999D);
   xyseries1.add(250D, 17.300000000000001D);
   xyseries1.add(355D, 10.9D);
   xyseriescollection.addSeries(xyseries1);
   return xyseriescollection;
}

private static JFreeChart createChart(XYDataset xydataset) {
   JFreeChart jfreechart = ChartFactory.createPolarChart(
     "Polar       Chart       Demo       1 ", xydataset, true,
     false, false);
   jfreechart.setBackgroundPaint(Color.white);
   PolarPlot polarplot = (PolarPlot) jfreechart.getPlot();
   polarplot.setBackgroundPaint(Color.lightGray);
   polarplot.addCornerTextItem("Corner       Item       1 ");
   polarplot.addCornerTextItem("Corner       Item       2 ");
   polarplot.setBackgroundImageAlignment(PolarPlot.MINIMUM_HEIGHT_TO_DRAW);
   polarplot.setAngleTickUnit(new NumberTickUnit(45));
   // polarplot.setAngleGridlinesVisible(false);

   // 設置雷達顏色
   GradientPaint gradientpaint3 = new GradientPaint(0.0F, 0.0F,
     Color.black, 0.0F, 0.0F, Color.black);
   polarplot.setRadiusGridlinePaint(gradientpaint3);//

   // 兩個四邊形顏色
   GradientPaint gradientpaint1 = new GradientPaint(0.0F, 0.0F, Color.red,
     0.0F, 0.0F, Color.red); //
   GradientPaint gradientpaint2 = new GradientPaint(0.0F, 0.0F,
     Color.blue, 0.0F, 0.0F, Color.blue); // ????
   // 設置兩個四邊形顏色
   DefaultPolarItemRenderer renderer = new DefaultPolarItemRenderer();
   renderer.setSeriesPaint(0, gradientpaint1);
   renderer.setSeriesPaint(1, gradientpaint2);
   polarplot.setRenderer(renderer);

   NumberAxis numberaxis = (NumberAxis) polarplot.getAxis();
   numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
   numberaxis.setAutoRange(true);
   numberaxis.setVisible(false);
   numberaxis.setTickUnit(new NumberTickUnit(2));// 設置雷達網格數量

   return jfreechart;
}

public static JPanel createDemoPanel() {
   final JFreeChart jfreechart = createChart(createDataset());
   ChartPanel chartpanel = new ChartPanel(jfreechart);
   // chartpanel.setMouseZoomable(true);// 是否可以鼠標放大
   //通過鼠標滾輪放大縮小放大,整體都放大縮小,尋找更好方法ing
   chartpanel.addMouseWheelListener(new MouseWheelListener() {

    public void mouseWheelMoved(MouseWheelEvent e) {
     if (-3 == e.getUnitsToScroll()) {
      jfreechart.setPadding(new RectangleInsets(jfreechart
        .getPadding().getTop() - 10, jfreechart
        .getPadding().getBottom() - 10, jfreechart
        .getPadding().getLeft() - 10, jfreechart
        .getPadding().getRight() - 10));
      System.out.println("向上");
     } else if (3 == e.getUnitsToScroll()){
      jfreechart.setPadding(new RectangleInsets(jfreechart
        .getPadding().getTop() + 10, jfreechart
        .getPadding().getBottom() + 10, jfreechart
        .getPadding().getLeft() + 10, jfreechart
        .getPadding().getRight() + 10));
      System.out.println("向下");
     }
    }

   });
   return chartpanel;
}

public static void main(String args[]) {
   PolarChartDemo1 polarchartdemo1 = new PolarChartDemo1(
     "Polar       Chart       Demo ");
   polarchartdemo1.pack();
   RefineryUtilities.centerFrameOnScreen(polarchartdemo1);
   polarchartdemo1.setVisible(true);
}

}
1710500.jpg 

//放大部分另一種寫法 - -

 

  chartpanel.addMouseWheelListener(new MouseWheelListener() {
    public void mouseWheelMoved(MouseWheelEvent e) {
     if (-3 == e.getUnitsToScroll()) {
      chartpanel.zoomInBoth(10, 10);
      System.out.println("向上");
     } else if (3 == e.getUnitsToScroll()) {
      chartpanel.zoomOutBoth(10, 10);
      System.out.println("向下");
     }
    }
   });

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!