JFreeChart生成柱状图、饼状图、折线图详解

项目中用到了一些图,要用JFreeChart生成,参考了一些资料,做了两天,分享一下

 

 

柱状图

package util;
import java.awt.Color;
import java.awt.Font;
import java.io.FileOutputStream;
import java.io.IOException;
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.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
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.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
public class BarChart3DDemo
{
public static void main(String[] args) throws IOException
{  
  
JFreeChart chart = ChartFactory.createBarChart3D(
"图书销量统计图", // 图表标题
"图书", // 目录轴的显示标签
"销量", // 数值轴的显示标签
getDataSet(), // 数据集
//PlotOrientation.HORIZONTAL , // 图表方向:水平
PlotOrientation.VERTICAL , // 图表方向:垂直
true, // 是否显示图例(对于简单的柱状图必须是false)
false, // 是否生成工具
false // 是否生成URL链接
);
//重新设置图标标题,改变字体
chart.setTitle(new TextTitle("图书销量统计图", new Font("黑体", Font.ITALIC , 22)));
//取得统计图标的第一个图例
LegendTitle legend = chart.getLegend(0);
//修改图例的字体
legend.setItemFont(new Font("宋体", Font.BOLD, 14));
CategoryPlot plot = (CategoryPlot)chart.getPlot();

//设置柱状图到图片上端的距离
ValueAxis rangeAxis = plot.getRangeAxis();
rangeAxis.setUpperMargin(0.1);
//取得横轴
CategoryAxis categoryAxis = plot.getDomainAxis();
//设置横轴显示标签的字体
categoryAxis.setLabelFont(new Font("宋体" , Font.BOLD , 22));
//分类标签以45度角倾斜
categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
categoryAxis.setTickLabelFont(new Font("宋体" , Font.BOLD , 18));
//取得纵轴
NumberAxis numberAxis = (NumberAxis)plot.getRangeAxis();
//设置纵轴显示标签的字体
numberAxis.setLabelFont(new Font("宋体" , Font.BOLD , 22));

//在柱体的上面显示数据
BarRenderer custombarrenderer3d = new BarRenderer();
custombarrenderer3d.setBaseItemLabelPaint(Color.BLACK);//数据字体的颜色
custombarrenderer3d
  .setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
custombarrenderer3d.setBaseItemLabelsVisible(true);
plot.setRenderer(custombarrenderer3d);

 

FileOutputStream fos = null;
fos = new FileOutputStream("d:book1.jpg");
//将统计图标输出成JPG文件
ChartUtilities.writeChartAsJPEG(
fos, //输出到哪个输出流
1, //JPEG图片的质量,0~1之间
chart, //统计图标对象
800, //宽
600,//宽
null //ChartRenderingInfo 信息
);
fos.close();
}
//返回一个CategoryDataset实例
private static CategoryDataset getDataSet()
{
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(45000 , "北京" , "Spring2.0宝典");
dataset.addValue(38000 , "北京" , "轻量级J2EE企业实战");
dataset.addValue(24000 , "北京" , "基于J2EE的Ajax宝典");
dataset.addValue(32000 , "北京" , "JavaScript权威指南");
dataset.addValue(21000 , "北京" , "Ajax In Action");
dataset.addValue(37000 , "上海" , "Spring2.0宝典");
dataset.addValue(36000 , "上海" , "轻量级J2EE企业实战");
dataset.addValue(34000 , "上海" , "基于J2EE的Ajax宝典");
dataset.addValue(42000 , "上海" , "JavaScript权威指南");
dataset.addValue(12000 , "上海" , "Ajax In Action");
dataset.addValue(42000 , "广州" , "Spring2.0宝典");
dataset.addValue(40000 , "广州" , "轻量级J2EE企业实战");
dataset.addValue(34000 , "广州" , "基于J2EE的Ajax宝典");
dataset.addValue(18000 , "广州" , "JavaScript权威指南");
dataset.addValue(26000 , "广州" , "Ajax In Action");
return dataset;
}
}

 

 

饼状图

package test;
import java.awt.Color;
import java.awt.Font;
import java.io.File;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.DefaultPieDataset;
public class testPieChart {
 public static void main(String []args){
  DefaultPieDataset dataset = new DefaultPieDataset();
  dataset.setValue(" 市场前期", new Double(10));
  dataset.setValue(" 立项", new Double(15));   
  dataset.setValue(" 计划", new Double(10));   
  dataset.setValue(" 需求与设计", new Double(10));   
  dataset.setValue(" 执行控制", new Double(35));   
  dataset.setValue(" 收尾", new Double(10));   
  dataset.setValue(" 运维",new Double(10));   
  JFreeChart chart = ChartFactory.createPieChart3D("项目状态分布", dataset,
      true, true, false);
    PiePlot3D plot = (PiePlot3D) chart.getPlot();
    // 图片中显示百分比:默认方式
    // plot.setLabelGenerator(new
    // StandardPieSectionLabelGenerator(StandardPieToolTipGenerator.DEFAULT_TOOLTIP_FORMAT));
    // 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位
    plot.setLabelGenerator(new StandardPieSectionLabelGenerator(
      "{0}({2})", NumberFormat.getNumberInstance(),
      new DecimalFormat("0.00%")));
    // 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例
    plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator(
      "{0}={1}({2})"));
    // 设置背景色为白色
    chart.setBackgroundPaint(Color.white);
    // 指定图片的透明度(0.0-1.0)
    plot.setForegroundAlpha(1.0f);
    // 指定显示的饼图上圆形(false)还椭圆形(true)
    plot.setCircular(true);
    // 设置图标题的字体
    Font font = new Font(" 黑体", Font.CENTER_BASELINE, 20);
    TextTitle title = new TextTitle("项目状态分布");
    title.setFont(font);
    chart.setTitle(title);
    plot.setLabelFont(new Font("SimSun", 0, 12));//
    LegendTitle legend = chart.getLegend(0);
    legend.setItemFont(new Font("宋体", Font.BOLD, 14));

  try {
     ChartUtilities.saveChartAsJPEG(
       new File("d://PieTest9.jpg"), //输出到哪个输出流
       1, //JPEG图片的质量,0~1之间
       chart, //统计图标对象
       640, //宽
       300,//宽
       null //ChartRenderingInfo 信息
       );
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }  
 }

}

 

 

折线图

package chart;
import java.awt.Font;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.title.LegendTitle;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
public class LineCharts extends ApplicationFrame {
 public LineCharts(String s) {
  super(s);
  setContentPane(createDemoLine());
 }
 public static void main(String[] args) {
  LineCharts fjc = new LineCharts("折线图");
  fjc.pack();
  RefineryUtilities.centerFrameOnScreen(fjc);
  fjc.setVisible(true);
 }
 // 生成显示图表的面板
 public static JPanel createDemoLine() {
  JFreeChart jfreechart = createChart(createDataset());
  return new ChartPanel(jfreechart);
 }
 // 生成图表主对象JFreeChart
 public static JFreeChart createChart(DefaultCategoryDataset linedataset) {
  // 定义图表对象
  JFreeChart chart = ChartFactory.createLineChart("折线图", // chart title
    "时间", // domain axis label
    "销售额(百万)", // range axis label
    linedataset, // data
    PlotOrientation.VERTICAL, // orientation
    true, // include legend
    true, // tooltips
    false // urls
    );
  CategoryPlot plot = chart.getCategoryPlot();  
  // 设置图示字体 
  chart.getTitle().setFont(new Font("宋体", Font.BOLD, 22));    
  //设置横轴的字体
  CategoryAxis categoryAxis = plot.getDomainAxis();
  categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 22));//x轴标题字体 
  categoryAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 18));//x轴刻度字体 

  //以下两行 设置图例的字体
  LegendTitle legend = chart.getLegend(0);
  legend.setItemFont(new Font("宋体", Font.BOLD, 14));
  //设置竖轴的字体
  NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
  rangeAxis.setLabelFont(new Font("宋体" , Font.BOLD , 22)); //设置数轴的字体
  rangeAxis.setTickLabelFont(new Font("宋体" , Font.BOLD , 22));
  
  rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());//去掉竖轴字体显示不全
  rangeAxis.setAutoRangeIncludesZero(true);
  rangeAxis.setUpperMargin(0.20);
  rangeAxis.setLabelAngle(Math.PI / 2.0);
  return chart;
 }

 // 生成数据
 public static DefaultCategoryDataset createDataset() {
  DefaultCategoryDataset linedataset = new DefaultCategoryDataset();
  // 各曲线名称
  String series1 = "冰箱";
  String series2 = "彩电";
  String series3 = "洗衣机";
  // 横轴名称(列名称)
  String type1 = "1月";
  String type2 = "2月";
  String type3 = "3月";
  linedataset.addValue(0.0, series1, type1);
  linedataset.addValue(4.2, series1, type2);
  linedataset.addValue(3.9, series1, type3);
  linedataset.addValue(1.0, series2, type1);
  linedataset.addValue(5.2, series2, type2);
  linedataset.addValue(7.9, series2, type3);
  linedataset.addValue(2.0, series3, type1);
  linedataset.addValue(9.2, series3, type2);
  linedataset.addValue(8.9, series3, type3);
  return linedataset;
 }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值