您的位置 首页 java

使用JFreeChart制作图表详细总结(一)

大数据 和人工智能交流》头条号向广大初学者新增C 、 Java 、Python 、Scala、javascript 等目前流行的计算机、大数据编程语言,希望大家以后关注本头条号更多的内容。

一、获取图片

JfreeChart组件能够生成jpeg、png格式图片,其输出方式直接存在硬盘中,也可以交给JfreeChart组件进行管理。在web应用中,所生成的图形报表一般为动态报表,如果每次生成的图表都进行存储,将产生大量的垃圾文件,因此由JfreeChart组件进行管理是一个不错的选择

1、配置JFreeChart

JfreeChart组件提供一个 servlet 文件用于获取生成的图片,此Servlet文件存在JfreeChart组件包中,所以在使用过程中,需要将其配置在web.xml中

<servlet>

<servlet-name>DisplayChart</servlet-name>

<servlet-class> org .jfree.chart.servlet.DisplayChart</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name> DisplayChart </servlet-name>

<url-pattern>/servlet/ DisplayChart </url-pattern>

</servlet-mapping>

2、获取图片

在输出图片之前,首先要生成JfreeChart组件所绘制的图片。此操作通过调用ServletUtilities类的saveChartAsJPEG()方法来实现,它返回一个.jpeg格式的图片:

public static String saveChartAsJPEG(JfreeChart chart,int width,int height,HttpSession session)

通过此方法生成图片后,调用已注册的JfreeChart提供的Servlet类DisplayChart即可获取图片的相对路径,例如:

<%

String fileName = ServletUtilities.saveChartAsJPEG(

ChartUtil.createChart(),450,300,session);

String graphURL = request .getContextPath() + “/DisplayChart?filename=” + fileName;

%>

上述代码生成个宽度450、高度300的图片,文件名为fileName,路径为graphURL,通过此路径即可对生成的图片进行访问

二、第一个图表案例

第1步:建立项目,引入jar包(jar包已经给提供),其项目结构如下:

使用JFreeChart制作图表详细总结(一)

第2步:建立自定义绘图工具类ChartUtil

public class ChartUtil {

/**

* 创建数据集合

* @return CategoryDataset对象

*/

public static CategoryDataset createDataSet() {

// 实例化 DefaultCategoryDataset对象

DefaultCategoryDataset dataSet = new DefaultCategoryDataset();

//向数据集合中添加数据

dataSet.addValue(550, ” JavaEE “, “Java EE类”);

dataSet.addValue(100, ” JavaSE “, “Java SE类”);

dataSet.addValue(950, “Java项目”, “Java 项目类”);

return dataSet;

}

/**

* 创建JFreeChart对象

* @return JFreeChart对象

*/

public static JFreeChart createChart() {

//创建主题样式

StandardChartTheme standardChartTheme = new StandardChartTheme(“CN”);

//设置标题字体

standardChartTheme.setExtraLarge Font ( new Font(“隶书”, Font.BOLD, 20));

//设置图例的字体

standardChartTheme.setRegularFont( new Font(“微软雅黑”, Font.PLAIN, 15));

//设置轴向的字体

standardChartTheme.setLargeFont( new Font(“微软雅黑”, Font.PLAIN, 15));

ChartFactory.setChartTheme(standardChartTheme); //设置主题样式

//通过ChartFactory创建JFreeChart

JFreeChart chart = ChartFactory.createBarChart3D(

“Java图书销量统计”, //图表标题

“Java图书”, //横轴标题

“销量(本)”, //纵轴标题

createDataSet(), //数据集合

PlotOrientation.VERTICAL, //图表方向

true , //是否显示图例标识

false , //是否显示tooltips

false ); //是否支持超链接

return chart;

}

}

第3步:在xml文件已注册的JfreeChart提供的Servlet类DisplayChart

<?xml version=”1.0″ encoding=”UTF-8″?>

<web-app version=”2.5″

xmlns=”#34;

xmlns:xsi=”#34;

xsi:schemaLocation=”

#34;>

<servlet>

<description>JFreeChart</description>

<servlet-name>DisplayChart</servlet-name>

<servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>DisplayChart</servlet-name>

<url-pattern>/DisplayChart</url-pattern>

</servlet-mapping>

</web-app>

第4步:编写index.jsp输出图表

<%@ page language=”java” contentType=”text/html” pageEncoding=”GBK”%>

<%@ page import=”org.jfree.chart.servlet.ServletUtilities,com.test.ChartUtil”%>

<!DOCTYPE HTML>

<html>

<head>

<title>Java图书销量统计</title>

</head>

<body>

<%

String fileName = ServletUtilities.saveChartAsJPEG(ChartUtil.createChart(),450,300,session);

String graphURL = request.getContextPath() + “/DisplayChart?filename=” + fileName;

%>

<img src=”<%=graphURL%>” border=”1″>

</body>

</html>

第5步:部署运行输入,结果如下:

使用JFreeChart制作图表详细总结(一)

三、图表相关属相设置

为了使生成的图表美观、大方需要对绘图区、坐标轴等进行设置

public class ChartUtil {

/**

* 创建数据集合

* @return CategoryDataset对象

*/

public static CategoryDataset createDataSet() {

//实例化DefaultCategoryDataset对象

DefaultCategoryDataset dataSet = new DefaultCategoryDataset();

//添加第一季度数据

dataSet.addValue(6000, “第一季度”, “Java SE类”);

dataSet.addValue(3000, “第一季度”, “Java ME类”);

dataSet.addValue(12000, “第一季度”, “Java EE类”);

//添加第二季度数据

dataSet.addValue(8000, “第二季度”, “Java SE类”);

dataSet.addValue(4000, “第二季度”, “Java ME类”);

dataSet.addValue(6000, “第二季度”, “Java EE类”);

//添加第三季度数据

dataSet.addValue(5000, “第三季度”, “Java SE类”);

dataSet.addValue(4000, “第三季度”, “Java ME类”);

dataSet.addValue(8000, “第三季度”, “Java EE类”);

//添加第四季度数据

dataSet.addValue(8000, “第四季度”, “Java SE类”);

dataSet.addValue(2000, “第四季度”, “Java ME类”);

dataSet.addValue(9000, “第四季度”, “Java EE类”);

return dataSet;

}

/**

* 创建JFreeChart对象

* @return JFreeChart对象

*/

public static JFreeChart createChart() {

//通过ChartFactory创建JFreeChart

JFreeChart chart = ChartFactory.createBarChart3D(

“Java图书销量统计”, //图表标题

“Java图书”, //横轴标题

“销量(本)”, //纵轴标题

createDataSet(), //数据集合

PlotOrientation.VERTICAL, //图表方向

true , //是否显示图例标识

false , //是否显示tooltips

false ); //是否支持超链接

//背景图片

Image image = null ;

try {

//创建背景图片

image = ImageIO.read(ChartUtil. class .getResource(“test.jpg”));

} catch (IOException e) {

e.printStackTrace();

}

//设置标题字体

chart.getTitle().setFont( new Font(“隶书”,Font.BOLD,25));

//设置图例类别字体

chart.getLegend().setItemFont( new Font(“微软雅黑”,Font.PLAIN,12));

chart.setBorderVisible( true ); //设置显示边框

//实例化TextTitle对象

TextTitle subTitle = new TextTitle(“2012年Java类图书全国销量统计(Java SE、Java ME、Java EE)”);

//设置居中显示

subTitle.setVerticalAlignment(VerticalAlignment.BOTTOM);

chart.addSubtitle(subTitle); //添加子标题

//获取绘图区对象

CategoryPlot plot = chart.getCategoryPlot();

plot.setForegroundAlpha(0.8F); //设置绘图区前景色透明度

plot.setBackgroundAlpha(0.5F); //设置绘图区背景色透明度

plot.setBackgroundImage(image); //设置绘图区背景图片

//获取坐标轴对象

CategoryAxis categoryAxis = plot.getDomainAxis();

//设置坐标轴标题字体

categoryAxis.setLabelFont( new Font(“微软雅黑”,Font.PLAIN,12));

//设置坐标轴标尺值字体

categoryAxis.setTickLabelFont( new Font(“微软雅黑”,Font.PLAIN,12));

//设置坐标轴标题旋转角度

categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);

//获取数据轴对象

ValueAxis valueAxis = plot.getRangeAxis();

//设置数据轴字体

valueAxis.setLabelFont( new Font(“微软雅黑”,Font.PLAIN,12));

//获取图片渲染对象

BarRenderer3D renderer = new BarRenderer3D();

renderer.setItemMargin(0.32); //设置柱子间的间距

plot.setRenderer(renderer); //设置图片渲染对象

return chart;

}

}

使用JFreeChart制作图表详细总结(一)

《大数据和人工智能交流》的宗旨

1、将大数据和人工智能的专业数学:概率数理统计、线性代数、决策论、优化论、博弈论等数学模型变得通俗易懂。

2、将大数据和人工智能的专业涉及到的数据结构和算法:分类、聚类 、回归算法、概率等算法变得通俗易懂。

3、最新的高科技动态:数据采集方面的智能传感器技术;医疗大数据智能决策分析;物联网智慧城市等等。

根据初学者需要会有C语言、Java语言、Python语言、Scala函数式等目前主流计算机语言。

根据读者的需要有和人工智能相关的计算机科学与技术、电子技术、芯片技术等基础学科通俗易懂的文章。

文章来源:智云一二三科技

文章标题:使用JFreeChart制作图表详细总结(一)

文章地址:https://www.zhihuclub.com/195931.shtml

关于作者: 智云科技

热门文章

网站地图