Как правильно отображать метки на пузырьковой диаграмме JFreeChart? - PullRequest
1 голос
/ 25 сентября 2019

Я учусь использовать JFreeChart, поэтому я скачал пример для пузырьковой диаграммы по адресу: https://www.boraji.com/jfreechart-bubble-chart-example

Вам нужен "jfreechart-1.5.0.jar" из http://repo1.maven.org/maven2/org/jfree/jfreechart/1.5.0/ для запускаприложение.

Тем не менее, пример приложения не может быть скомпилирован, поэтому я немного изменил его, теперь он может работать, но не может отображать ярлыки в странах, как правильно отображать ярлыки?Мое модифицированное приложение выглядит так:

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);
    });
  }
}

1 Ответ

1 голос
/ 25 сентября 2019

Я понял, используйте следующие строки, чтобы показать метки:

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