JFrreChart createBubbleChart方法中Bubble大小的调节


   需要用一个Bubble Chart, 但生成的Bubble似乎直径太大,图形上根本看不出是个圆圈,代码如下:

  1. package demo;

  2. import java.awt.Color;

  3. import javax.swing.JPanel;

  4. import org.jfree.chart.ChartFactory;
  5. import org.jfree.chart.ChartPanel;
  6. import org.jfree.chart.JFreeChart;
  7. import org.jfree.chart.axis.NumberAxis;
  8. import org.jfree.chart.plot.PlotOrientation;
  9. import org.jfree.chart.plot.XYPlot;
  10. import org.jfree.chart.renderer.xy.XYItemRenderer;
  11. import org.jfree.data.xy.DefaultXYZDataset;
  12. import org.jfree.data.xy.XYZDataset;
  13. import org.jfree.ui.ApplicationFrame;
  14. import org.jfree.ui.RefineryUtilities;

  15. /**
  16.  * A bubble chart demo.
  17.  */
  18. public class BubbleChartDemo1 extends ApplicationFrame {

  19.     /**
  20.      * A demonstration application showing a bubble chart.
  21.      * 
  22.      * @param title the frame title.
  23.      */
  24.     public BubbleChartDemo1(String title) {
  25.         super(title);
  26.         JPanel chartPanel = createDemoPanel();
  27.         chartPanel.setPreferredSize(new java.awt.Dimension(500270));
  28.         setContentPane(chartPanel);
  29.     }

  30.     /**
  31.      * Creates a chart.
  32.      * 
  33.      * @param dataset the dataset.
  34.      * 
  35.      * @return The chart.
  36.      */
  37.     private static JFreeChart createChart(XYZDataset dataset) {
  38.         JFreeChart chart = ChartFactory.createBubbleChart("Bubble Chart Demo 1""X""Y", dataset, PlotOrientation.HORIZONTAL,
  39.                 truetruefalse);
  40.         XYPlot plot = (XYPlot) chart.getPlot();
  41.         plot.setForegroundAlpha(0.65f);

  42.         XYItemRenderer renderer = plot.getRenderer();
  43.         renderer.setSeriesPaint(0, Color.blue);

  44.         // increase the margins to account for the fact that the auto-range
  45.         // doesn't take into account the bubble size...
  46.         NumberAxis domainAxis = (NumberAxis) plot.getDomainAxis();
  47.         domainAxis.setLowerMargin(0.15);
  48.         domainAxis.setUpperMargin(0.15);
  49.         NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
  50.         rangeAxis.setLowerMargin(0.15);
  51.         rangeAxis.setUpperMargin(0.15);
  52.         return chart;
  53.     }

  54.     /**
  55.      * Creates a sample dataset.
  56.      * 
  57.      * @return A sample dataset.
  58.      */
  59.     public static XYZDataset createDataset() {
  60.         DefaultXYZDataset dataset = new DefaultXYZDataset();
  61.         double[] x = { 2.12.32.3 };
  62.         double[] y = { 14.114.112.0 };
  63.         double[] z = { 2.42.72.7 };
  64.         double[][] series = new double[][] { x, y, z };
  65.         dataset.addSeries("Series 1", series);
  66.         return dataset;
  67.     }

  68.     /**
  69.      * Creates a panel for the demo (used by SuperDemo.java).
  70.      * 
  71.      * @return A panel.
  72.      */
  73.     public static JPanel createDemoPanel() {
  74.         JFreeChart chart = createChart(createDataset());
  75.         ChartPanel chartPanel = new ChartPanel(chart);
  76.         chartPanel.setDomainZoomable(true);
  77.         chartPanel.setRangeZoomable(true);
  78.         return chartPanel;
  79.     }

  80.     /**
  81.      * Starting point for the demonstration application.
  82.      * 
  83.      * @param args ignored.
  84.      */
  85.     public static void main(String[] args) {
  86.         BubbleChartDemo1 demo = new BubbleChartDemo1("Bubble Chart Demo 1");
  87.         demo.pack();
  88.         RefineryUtilities.centerFrameOnScreen(demo);
  89.         demo.setVisible(true);
  90.     }
   生成的图形如下:
  
JFrreChart createBubbleChart方法中Bubble大小的调节_第1张图片


    从上图是根本不能看出Series1代表的一系列圆圈(Bubble)。一开始自己总是想着调节Z的范围,使直径变小,后来才发现bubbleChart所使用的XYItemRenderer是XYBubbleRenderer,而构造XYBubbleRenderer的默认scaleType参数正是XYBubbleRenderer.SCALE_ON_RANGE_AXIS,所以应该改变RangeAxis的范围才对,所以需要在上述源代码的59行之后需加入下面一句

  1. rangeAxis.setRange(460);


这样使得RangeAxis范围变大,即可在图上看到每个Bubble的整体,最后效果图如下:

JFrreChart createBubbleChart方法中Bubble大小的调节_第2张图片

你可能感兴趣的:(技术代码类)