JFreeChart的气泡图如何正确显示标签?
How To Show Labels Correctly On JFreeChart's Bubble Chart?
我正在学习使用 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);
});
}
}
我明白了,使用以下几行来显示标签:
renderer.setDefaultItemLabelGenerator(generator);
renderer.setDefaultItemLabelsVisible(true);
我正在学习使用 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);
});
}
}
我明白了,使用以下几行来显示标签:
renderer.setDefaultItemLabelGenerator(generator);
renderer.setDefaultItemLabelsVisible(true);