【问题标题】:How To Show Labels Correctly On JFreeChart's Bubble Chart?如何在 JFreeChart 的气泡图上正确显示标签?
【发布时间】:2019-09-26 01:18:18
【问题描述】:

我正在学习使用 JFreeChart,所以我下载了一个气泡图示例:https://www.boraji.com/jfreechart-bubble-chart-example

您需要来自http://repo1.maven.org/maven2/org/jfree/jfreechart/1.5.0/ 的“jfreechart-1.5.0.jar”来运行应用程序。

然而,示例应用程序无法编译,所以我对其进行了一些修改,现在它可以运行了,但无法显示国家/地区的标签,如何正确显示标签?我修改后的应用如下所示:

import java.text.DecimalFormat;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

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.labels.BubbleXYItemLabelGenerator;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYBubbleRenderer;
import org.jfree.data.xy.DefaultXYZDataset;
import org.jfree.data.xy.XYZDataset;

public class Bubble_Chart extends JFrame
{
  private static final long serialVersionUID=1L;

  public Bubble_Chart(String title)
  {
    super(title);
    XYZDataset dataset=createDataset();
    JFreeChart chart=ChartFactory.createBubbleChart("Country(Cars, Buses, Trucks)",
                                                    "X-Values",
                                                    "Y-Values",dataset);
    // Set range for X-Axis
    XYPlot plot=chart.getXYPlot();
    NumberAxis domain=(NumberAxis)plot.getDomainAxis();
    domain.setRange(0,100);

    // Set range for Y-Axis
    NumberAxis range=(NumberAxis)plot.getRangeAxis();
    range.setRange(0,100);

    //Format label
    XYBubbleRenderer renderer=(XYBubbleRenderer)plot.getRenderer();

    BubbleXYItemLabelGenerator generator=new BubbleXYItemLabelGenerator(" {0}:({1},{2},{3}) ",
                                                                        new DecimalFormat("0"),
                                                                        new DecimalFormat("0"),
                                                                        new DecimalFormat("0"));
//    renderer.setBaseItemLabelGenerator(generator);
    renderer.setDefaultSeriesVisible(true);
    //.setBaseItemLabelsVisible(true);

    ChartPanel panel=new ChartPanel(chart);
    setContentPane(panel);
  }

  private XYZDataset createDataset()
  {
    DefaultXYZDataset dataset=new DefaultXYZDataset();

    dataset.addSeries("INDIA",new double[][]
    {
      {40}, // X-Value 
      {65}, // Y-Value 
      {70}  // Z-Value 
    });
    dataset.addSeries("USA",new double[][]
    {
      {30},
      {20},
      {50}
    });
    dataset.addSeries("CHINA",new double[][]
    {
      {80},
      {50},
      {80}
    });
    dataset.addSeries("JAPAN",new double[][]
    {
      {11},
      {50},
      {20}
    });

    return dataset;
  }

  public static void main(String[] args)
  {
    SwingUtilities.invokeLater(() ->
    {
      Bubble_Chart demo=new Bubble_Chart("Bubble_Chart");
      demo.setSize(800,400);
      demo.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
      demo.setLocationRelativeTo(null);
      demo.setVisible(true);
    });
  }
}

【问题讨论】:

    标签: java swing label jfreechart


    【解决方案1】:

    我想通了,使用以下几行来显示标签:

    renderer.setDefaultItemLabelGenerator(generator);
    renderer.setDefaultItemLabelsVisible(true);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-14
      • 2021-01-11
      相关资源
      最近更新 更多