I'm learning to use JFreeChart, so I downloaded an example for bubble chart at : https://www.boraji.com/jfreechart-bubble-chart-example
You need "jfreechart-1.5.0.jar" from http://repo1.maven.org/maven2/org/jfree/jfreechart/1.5.0/ to run the app.
Yet, the sample app can't compile, so I modified it a bit, now it can run, but can't show the labels on the countries, how to show the labels correctly ? My modified app looks like this :
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);
});
}
}
I figured it out, use the following lines to show the labels :
renderer.setDefaultItemLabelGenerator(generator);
renderer.setDefaultItemLabelsVisible(true);