下面是使用JFreeChart库在Java类中绘制图表的完整攻略。
准备工作
在开始使用JFreeChart之前,我们需要先将其添加到我们的工程中。可以通过以下步骤完成:
-
下载JFreeChart库的jar包,可以从官方网站 www.jfree.org 上获得。
-
将下载的jar包拷贝到工程的lib目录下。
-
在Eclipse中添加JFreeChart库到Java Build Path中,具体操作为:右键点击工程名 - Build Path - Configure Build Path - Libraries - Add JARs... - 选择JFreeChart库的jar包。
-
确认添加成功,便可愉快的开始使用JFreeChart库了。
实现过程
下面我们分别以折线图和柱状图为例,来介绍如何使用JFreeChart绘制图表。
折线图
示例代码:
import java.awt.Color;
import java.awt.Font;
import java.awt.Rectangle;
import java.io.File;
import java.io.IOException;
import java.text.DecimalFormat;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
public class LineChartDemo extends JPanel {
private static final long serialVersionUID = 1L;
public LineChartDemo() {
// 生成折线图数据
XYDataset dataset = createDataset();
// 创建折线图
JFreeChart chart = createChart(dataset);
// 将折线图保存到本地文件
saveChart(chart, "linechart.png", 600, 400);
}
/**
* 生成折线图数据
*/
private XYDataset createDataset() {
// 创建数据集
XYSeriesCollection dataset = new XYSeriesCollection();
// 创建数据
XYSeries series = new XYSeries("随机数据");
for (int i = 0; i < 50; i++) {
series.add(i, Math.random() * 100);
}
dataset.addSeries(series);
return dataset;
}
/**
* 创建折线图
*/
private JFreeChart createChart(XYDataset dataset) {
// 创建折线图
JFreeChart chart = ChartFactory.createXYLineChart(
"折线图示例", // 图表标题
"X轴", // X轴标签
"Y轴", // Y轴标签
dataset, // 数据集
PlotOrientation.VERTICAL, // 图表方向
true, // 是否包含图例
true, // 悬浮提示是否显示
false // 是否使用url链接
);
// 设置折线图标题的字体
chart.getTitle().setFont(new Font("宋体", Font.BOLD, 18));
// 获取折线图画布
XYPlot plot = chart.getXYPlot();
// 设置画布背景颜色
plot.setBackgroundPaint(Color.WHITE);
// 设置坐标轴范围
NumberAxis domainAxis = (NumberAxis) plot.getDomainAxis();
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
domainAxis.setRange(0, 50);
rangeAxis.setRange(0, 100);
// 设置坐标轴标签的字体
domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
rangeAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
// 设置坐标轴上刻度线条的字体
domainAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 12));
rangeAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 12));
// 设置折线图标注的字体
XYItemRenderer renderer = plot.getRenderer();
renderer.setBaseItemLabelsVisible(true);
renderer.setBaseItemLabelFont(new Font("宋体", Font.PLAIN, 12));
DecimalFormat decimalFormat = new DecimalFormat("#.##");
renderer.setBaseItemLabelGenerator((dataset, series, item) -> {
double x = dataset.getXValue(series, item);
double y = dataset.getYValue(series, item);
return String.format("(%s,%s)", decimalFormat.format(x), decimalFormat.format(y));
});
// 设置折线图的样式
renderer.setSeriesPaint(0, Color.BLUE);
renderer.setSeriesStroke(0, new BasicStroke(2.0F));
return chart;
}
/**
* 将折线图保存到本地文件
*/
private void saveChart(JFreeChart chart, String fileName, int width, int height) {
File file = new File(fileName);
try {
ChartUtilities.saveChartAsPNG(file, chart, width, height);
} catch (IOException e) {
e.printStackTrace();
}
}
}
该示例中,首先通过createDataset()方法生成折线图数据,然后通过createChart()方法创建折线图实例,最后使用saveChart()方法将折线图保存到本地文件中。
其中,createChart()方法中的代码注释表明了各个设置的含义,按需进行修改即可。
柱状图
示例代码:
import java.awt.Color;
import java.awt.Font;
import java.io.File;
import java.io.IOException;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
public class BarChartDemo extends JPanel {
private static final long serialVersionUID = 1L;
public BarChartDemo() {
// 生成柱状图数据
DefaultCategoryDataset dataset = createDataset();
// 创建柱状图
JFreeChart chart = createChart(dataset);
// 将柱状图保存到本地文件
saveChart(chart, "barchart.png", 600, 400);
}
/**
* 生成柱状图数据
*/
private DefaultCategoryDataset createDataset() {
// 创建数据集
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
// 创建数据
dataset.setValue(20, "销售额", "2019年");
dataset.setValue(30, "销售额", "2020年");
dataset.setValue(40, "销售额", "2021年");
return dataset;
}
/**
* 创建柱状图
*/
private JFreeChart createChart(DefaultCategoryDataset dataset) {
// 创建柱状图
JFreeChart chart = ChartFactory.createBarChart(
"柱状图示例", // 图表标题
"年度", // X轴标签
"销售额(万元)", // Y轴标签
dataset, // 数据集
PlotOrientation.VERTICAL, // 图表方向
true, // 是否包含图例
true, // 悬浮提示是否显示
false // 是否使用url链接
);
// 设置柱状图标题的字体
chart.getTitle().setFont(new Font("宋体", Font.BOLD, 18));
// 获取柱状图画布
CategoryPlot plot = chart.getCategoryPlot();
// 设置画布背景颜色
plot.setBackgroundPaint(Color.WHITE);
// 设置X轴标签字体
CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
// 设置Y轴
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setTickUnit(new NumberTickUnit(10));
rangeAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
// 设置柱状图标注
BarRenderer renderer = (BarRenderer) plot.getRenderer();
renderer.setBaseItemLabelsVisible(true);
renderer.setBaseItemLabelFont(new Font("宋体", Font.PLAIN, 12));
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setSeriesPaint(0, Color.BLUE);
renderer.setMaximumBarWidth(0.1D);
return chart;
}
/**
* 将柱状图保存到本地文件
*/
private void saveChart(JFreeChart chart, String fileName, int width, int height) {
File file = new File(fileName);
try {
ChartUtilities.saveChartAsPNG(file, chart, width, height);
} catch (IOException e) {
e.printStackTrace();
}
}
}
该示例中,原理和折线图基本相同,只是需要使用DefaultCategoryDataset类来创建分类数据集。此外,柱状图的标注需要设置为StandardCategoryItemLabelGenerator类。
结尾
以上便是使用JFreeChart库在Java类中绘制图表的完整攻略,可以按照相应的步骤进行操作。同时,还需要注意,JFreeChart库封装了众多的标准图表,开发者可以根据自己的需求选择相应的绘图类库。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java类中使用Jfreechart的简单实例 - Python技术站