JFreeChart是一个开源的java语言编写的图表生成框架。支持生成饼图、条形图、折线图等相关图表。
示例代码
Maven依赖
<dependency>
<groupId>org.jfree</groupId>
<artifactId>jfreechart</artifactId>
<version>1.5.0</version>
</dependency>
饼图

package org.ysy.study.chart.pie;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;
public class PieChartDemo1 {
public static void main(String args[])throws Exception{
DefaultPieDataset dataset=new DefaultPieDataset();
dataset.setValue("Category 1",38.2);
dataset.setValue("Category 2",36.2);
dataset.setValue("Category 3",35.2);
dataset.setValue("Category 4",3.2);
//创建chart
JFreeChart chart= ChartFactory.createPieChart(
"Simple Pie Chart",//标题
dataset,
true,//显示legend
true,//生成tooltips
false//不成生成URLs
);
ChartFrame frame=new ChartFrame("DemoPie1",chart);
frame.pack();
frame.setVisible(true);
}
}
条形图

package org.ysy.study.chart.bar;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.ui.ApplicationFrame;
import org.jfree.chart.ui.UIUtils;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import java.awt.*;
public class BarChartDemo0 extends ApplicationFrame {
public BarChartDemo0(String title){
super(title);
CategoryDataset dataset=createDataset();
JFreeChart chart=createChart(dataset);
ChartPanel chartPanel=new ChartPanel(chart);
chartPanel.setPreferredSize(new Dimension(800,340));
setContentPane(chartPanel);
}
private CategoryDataset createDataset(){
// row keys
String series1="First";
String series2="Second";
String series3="Third";
String series4="fourth";
//column keys
String category1="Category 1";
String category2="Category 2";
String category3="Category 3";
String category4="Category 4";
String category5="Category 5";
DefaultCategoryDataset dataset=new DefaultCategoryDataset();
dataset.addValue(1.0,series1,category1);
dataset.addValue(2.0,series1,category2);
dataset.addValue(3.0,series1,category3);
dataset.addValue(4.0,series1,category4);
dataset.addValue(5.0,series1,category5);
dataset.addValue(5.0,series2,category1);
dataset.addValue(2.0,series2,category2);
dataset.addValue(7.0,series2,category3);
dataset.addValue(6.0,series2,category4);
dataset.addValue(3.0,series2,category5);
dataset.addValue(7.0,series3,category1);
dataset.addValue(9.0,series3,category2);
dataset.addValue(3.0,series3,category3);
dataset.addValue(6.0,series3,category4);
dataset.addValue(4.0,series3,category5);
dataset.addValue(7.0,series4,category1);
dataset.addValue(9.0,series4,category2);
dataset.addValue(3.0,series4,category3);
dataset.addValue(6.0,series4,category4);
dataset.addValue(4.0,series4,category5);
return dataset;
}
private JFreeChart createChart(CategoryDataset dataset){
JFreeChart chart= ChartFactory.createBarChart(
"Bar Chart demo1",//标题
"Category",//横坐标标签
"Value",//纵坐标标签
dataset,
PlotOrientation.VERTICAL,//垂直
true,//显示说明
true,//显示工具提示
false
);
return chart;
}
public static void main(String args[])throws Exception{
BarChartDemo0 demo1=new BarChartDemo0("Bar Chart Demo0");
demo1.pack();
UIUtils.centerFrameOnScreen(demo1);
demo1.setVisible(true);
}
}
直线图

package org.ysy.study.chart.line;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.ui.ApplicationFrame;
import org.jfree.chart.ui.UIUtils;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import java.awt.*;
public class LineChartDemo0 extends ApplicationFrame {
public LineChartDemo0(String titile){
super(titile);
CategoryDataset dataset=createDataset();
JFreeChart chart=createChart(dataset);
ChartPanel chartPanel=new ChartPanel(chart);
chartPanel.setPreferredSize(new Dimension(800,500));
setContentPane(chartPanel);
}
private CategoryDataset createDataset(){
DefaultCategoryDataset dataset=new DefaultCategoryDataset();
dataset.addValue(212,"Letter","A");
dataset.addValue(504,"Letter","B");
dataset.addValue(1520,"Letter","C");
dataset.addValue(1842,"Letter","D");
dataset.addValue(2991,"Letter","E");
return dataset;
}
private JFreeChart createChart(CategoryDataset dataset){
JFreeChart chart= ChartFactory.createLineChart(
"Line Chart Demo",
"Category Axis",
"Value Axis",
dataset,
PlotOrientation.VERTICAL,
false,
true,
false
);
return chart;
}
public static void main(String args[])throws Exception{
LineChartDemo0 demo=new LineChartDemo0("Line CHart Demo0");
demo.pack();
UIUtils.centerFrameOnScreen(demo);
demo.setVisible(true);
}
}
如果需要生成图片保存到本地路径可以使用如下API
org.jfree.chart.ChartUtils#saveChartAsJPEG
/**
* Saves a chart to a file in JPEG format.
*
* @param file the file ({@code null} not permitted).
* @param chart the chart ({@code null} not permitted).
* @param width the image width.
* @param height the image height.
*
* @throws IOException if there are any I/O errors.
*/
public static void saveChartAsJPEG(File file, JFreeChart chart,
int width, int height) throws IOException {
网友评论