要求:运用开源的JFreeChart生成一个柱形图。
新建一个project,将JFreeChar的jar包导入到该project,然后新建一个SalesCountServlet .java
代码如下:
- package com.dr.demo;
- import java.awt.Color;
- import java.awt.Font;
- import java.io.FileNotFoundException;
- 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.ValueAxis;
- import org.jfree.chart.plot.CategoryPlot;
- import org.jfree.chart.plot.PlotOrientation;
- import org.jfree.chart.title.TextTitle;
- import org.jfree.data.category.CategoryDataset;
- import org.jfree.data.category.DefaultCategoryDataset;
- public class SalesCountServlet {
- protected static void doGet() {
- System.out.println("图表已经建立!");
- CategoryDataset dataset = getDataSet();
- String fileName = "SalesCount.jpg";//文件名称
- JFreeChart chart = ChartFactory.createBarChart3D("产品销量图", // 图表标题
- "产品", // 目录轴的显示标签
- "销量", // 数值轴的显示标签
- dataset, // 数据集
- PlotOrientation.VERTICAL, // 图表方向:水平、垂直
- true, // 是否显示图例(对于简单的柱状图必须是false)
- false, // 是否生成工具
- false // 是否生成URL链接
- );
- configFont(chart);//设置中文格式
- FileOutputStream fos_jpg = null;
- try {
- String statImagePath = "d:";//存放图表的路径
- try {
- fos_jpg = new FileOutputStream(statImagePath+ fileName);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- try {
- ChartUtilities.writeChartAsJPEG(fos_jpg, 0.5f, chart, 400, 300,null);
- } catch (IOException e) {
- e.printStackTrace();
- }
- } finally {
- try {
- fos_jpg.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- public static void configFont(JFreeChart chart){
- // 配置字体
- Font xfont = new Font("宋体",Font.PLAIN,12) ;// X轴
- Font yfont = new Font("宋体",Font.PLAIN,12) ;// Y轴
- Font kfont = new Font("宋体",Font.PLAIN,12) ;// 底部
- Font titleFont = new Font("隶书", Font.BOLD , 25) ; // 图片标题
- CategoryPlot plot = chart.getCategoryPlot();// 图形的绘制结构对象
- // 图片标题
- chart.setTitle(new TextTitle(chart.getTitle().getText(),titleFont));
- // 底部
- chart.getLegend().setItemFont(kfont);
- // X 轴
- CategoryAxis domainAxis = plot.getDomainAxis();
- domainAxis.setLabelFont(xfont);// 轴标题
- domainAxis.setTickLabelFont(xfont);// 轴数值
- domainAxis.setTickLabelPaint(Color.BLUE) ; // 字体颜色
- domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 横轴上的label斜显示
- // Y 轴
- ValueAxis rangeAxis = plot.getRangeAxis();
- rangeAxis.setLabelFont(yfont);
- rangeAxis.setLabelPaint(Color.BLUE) ; // 字体颜色
- rangeAxis.setTickLabelFont(yfont);
- }
- private static CategoryDataset getDataSet() {
- DefaultCategoryDataset dataset = new DefaultCategoryDataset();
- dataset.addValue(20, "销售图表", "苹果");
- dataset.addValue(20, "销售图表", "梨");
- dataset.addValue(30, "销售图表", "香蕉");
- dataset.addValue(40, "销售图表", "葡萄");
- dataset.addValue(50, "销售图表", "桔子");
- return dataset;
- }
- public static void main(String args[]){
- doGet();
- }
- }
运行程序后就会在d盘根目录下找到一个SalesCount.jpg的文件,打开显示结果如下:
希望各位大虾不吝赐教!
转载于:https://blog.51cto.com/tscfengkui/480902