JfreeChartshi一个强大的Java开源插件,最近在学习使用它,就把学习以后写得一些代码贴出来吧,我写的第一个程序使用JfreeChart生成柱状图。
其实使用JfreeChart生成各种图表的步骤是差不多的啊
1.实例化你要生成的图表对应的数据集。
2.从ChartFactory中得到对应的Chart实例
3.设置图表的背景,可以通过plot和render
4.利用ChartUtilities保存图片。
5.显示图片。
当然有些步骤你可以省略,比如第散步和第五步。
下面是我写的代码:
其实使用JfreeChart生成各种图表的步骤是差不多的啊
1.实例化你要生成的图表对应的数据集。
2.从ChartFactory中得到对应的Chart实例
3.设置图表的背景,可以通过plot和render
4.利用ChartUtilities保存图片。
5.显示图片。
当然有些步骤你可以省略,比如第散步和第五步。
下面是我写的代码:
package com.mj.template;
import java.awt.Color;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.data.category.DefaultCategoryDataset;
/*
*@author mj
*/
public class MyBar {
public MyBar(){
init();
}
private void init(){
DefaultCategoryDataset dataset=getDataSet();
JFreeChart chart=ChartFactory.createBarChart3D("My first JfreeChar programe", "Compare", "Weight",
dataset,PlotOrientation.VERTICAL, false, false, false);
CategoryPlot plot=chart.getCategoryPlot();
//设置图表的横轴
CategoryAxis axis=plot.getDomainAxis();
//设置图片左端距离,此时为10%
axis.setLowerMargin(0.1);
//设置右端距离,此时10%
axis.setUpperMargin(0.1);
//设置横轴与标签之间的距离为10像素
axis.setCategoryLabelPositionOffset(10);
//设置标签之间的距离为20%
axis.setCategoryMargin(0.2);
//设置纵轴
ValueAxis valueaxis=plot.getRangeAxis();
//设置最高的一个柱与图片顶端的距离是10%
valueaxis.setUpperMargin(0.1);
//设置图表的颜色,好像边框的颜色设置没有起到作用,郁闷
BarRenderer3D render=new BarRenderer3D();
render.setBaseOutlinePaint(Color.RED);
//设置“一年前”柱子的颜色为绿色
render.setSeriesPaint(0, Color.GREEN);
//设置“一年前”柱子的边框颜色为蓝色
render.setSeriesOutlinePaint(0, Color.BLUE);
//设置“now"柱子的颜色为黄色
render.setSeriesPaint(1, Color.YELLOW);
//设置"now"柱子的边框颜色为黑色
render.setSeriesOutlinePaint(1, Color.BLACK);
//一组内两个柱子间的宽度为组宽的10%
render.setItemMargin(0.1);
//使设置生效
plot.setRenderer(render);
//设置总横坐标的显示位置
plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_LEFT);//设置compare位于横轴的左侧或下端
plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT);//设置weight位于纵轴的左端或下侧
//将报表保存为文件
File file=new File("c:/jiange.png");
try {
ChartUtilities.saveChartAsPNG(file,chart, 400, 300);
} catch (IOException e) {
e.printStackTrace();
}
//将报表显示当窗口当中
final ChartFrame frame=new ChartFrame("第一个柱状图",chart);
//设置关闭操作,貌似不用这么写
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
//释放所占的资源
frame.dispose();
}
});
frame.pack();
// frame.setSize(800, 800);
frame.setVisible(true);
}
public DefaultCategoryDataset getDataSet(){
DefaultCategoryDataset dataset=new DefaultCategoryDataset();
dataset.addValue(120, "One Years Ago", "TM");
dataset.addValue(130, "Now", "TM");
dataset.addValue(110, "One Years Ago", "MJ");
dataset.addValue(100, "Now", "MJ");
dataset.addValue(156, "One Years Ago", "Yaoming");
dataset.addValue(200, "Now", "Yaoming");
return dataset;
}
public static void main(String[] args){
new MyBar();
}
}