java如何将数据库中的数据统计后用jfreechart显示出来(要具体代码)
展开全部
其实挺简单的,注意我写的注释!
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="org.jfree.chart.JFreeChart,org.jfree.chart.ChartUtilities,
org.jfree.chart.ChartFactory,
org.jfree.chart.plot.PlotOrientation,
org.jfree.data.category.DefaultCategoryDataset"%> //上面是需要添加的头文件
<html>
<body>
<%
String dataName[]=new String[]{"0-30岁","30-50岁","50-70岁","70岁以上"};//显示数据系列
int dataValueCount[]={4,5,4,6};//数据系列对应的值
//以上两行可以从数据库里去取值,用循环写入数组
//------创建数据集,并设置值------
DefaultCategoryDataset categoryDataset = newDefaultCategoryDataset();//这个表示柱状图
for(int i=0;i<dataName.length;i++)
categoryDataset.addValue(dataValueCount[i],dataName[i],dataName[i]);//循环写入数据集
String titleString="用户年龄阶段分布统计图";//图的标题
JFreeChart chart = ChartFactory.createBarChart(titleString,"用户年龄阶段","数量",
categoryDataset,PlotOrientation.VERTICAL,true,true,false);//chart就是欲创建的图表
ChartUtilities.writeChartAsJPEG(response.getOutputStream(),chart,500,300);//这行的意思是输出成一个JPEG形式的文件显示
%>
</body>
</html>
其实后面还有很多参数的,比如颜色,柱子的标题等等,太多属性了,这个你查看一下JFREECHART的文档就行了,比如下面这样,很容易吧。
Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);
/*
* VALUE_TEXT_ANTIALIAS_OFF表示将文字的抗锯齿关闭,
* 使用的关闭抗锯齿后,字体尽量选择12到14号的宋体字,这样文字最清晰好看
*/
// chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
chart.setTextAntiAlias(false);
chart.setBackgroundPaint(Color.white);
// create plot
CategoryPlot plot = chart.getCategoryPlot();
// 设置横虚线可见
plot.setRangeGridlinesVisible(true);
// 虚线色彩
plot.setRangeGridlinePaint(Color.gray);
// 数据轴精度
NumberAxis vn = (NumberAxis) plot.getRangeAxis();
// vn.setAutoRangeIncludesZero(true);
DecimalFormat df = new DecimalFormat("#0.00");
vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式
// x轴设置
CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setLabelFont(labelFont);// 轴标题
domainAxis.setTickLabelFont(labelFont);// 轴数值
属性比较多,不可能全贴出来,也不必全用,设置一些实用的属性即可。
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="org.jfree.chart.JFreeChart,org.jfree.chart.ChartUtilities,
org.jfree.chart.ChartFactory,
org.jfree.chart.plot.PlotOrientation,
org.jfree.data.category.DefaultCategoryDataset"%> //上面是需要添加的头文件
<html>
<body>
<%
String dataName[]=new String[]{"0-30岁","30-50岁","50-70岁","70岁以上"};//显示数据系列
int dataValueCount[]={4,5,4,6};//数据系列对应的值
//以上两行可以从数据库里去取值,用循环写入数组
//------创建数据集,并设置值------
DefaultCategoryDataset categoryDataset = newDefaultCategoryDataset();//这个表示柱状图
for(int i=0;i<dataName.length;i++)
categoryDataset.addValue(dataValueCount[i],dataName[i],dataName[i]);//循环写入数据集
String titleString="用户年龄阶段分布统计图";//图的标题
JFreeChart chart = ChartFactory.createBarChart(titleString,"用户年龄阶段","数量",
categoryDataset,PlotOrientation.VERTICAL,true,true,false);//chart就是欲创建的图表
ChartUtilities.writeChartAsJPEG(response.getOutputStream(),chart,500,300);//这行的意思是输出成一个JPEG形式的文件显示
%>
</body>
</html>
其实后面还有很多参数的,比如颜色,柱子的标题等等,太多属性了,这个你查看一下JFREECHART的文档就行了,比如下面这样,很容易吧。
Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);
/*
* VALUE_TEXT_ANTIALIAS_OFF表示将文字的抗锯齿关闭,
* 使用的关闭抗锯齿后,字体尽量选择12到14号的宋体字,这样文字最清晰好看
*/
// chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
chart.setTextAntiAlias(false);
chart.setBackgroundPaint(Color.white);
// create plot
CategoryPlot plot = chart.getCategoryPlot();
// 设置横虚线可见
plot.setRangeGridlinesVisible(true);
// 虚线色彩
plot.setRangeGridlinePaint(Color.gray);
// 数据轴精度
NumberAxis vn = (NumberAxis) plot.getRangeAxis();
// vn.setAutoRangeIncludesZero(true);
DecimalFormat df = new DecimalFormat("#0.00");
vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式
// x轴设置
CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setLabelFont(labelFont);// 轴标题
domainAxis.setTickLabelFont(labelFont);// 轴数值
属性比较多,不可能全贴出来,也不必全用,设置一些实用的属性即可。
更多追问追答
追问
用的不是JSP,请问要怎么处理,主要是如何处理数据(要是可以改变的那种数据)。
//以上两行可以从数据库里去取值,用循环写入数组
你的这句话能不能具体点呀,最好有具体的代码,呵呵
追答
首先,非JSP的当然可以,头文件改成import xxxx,里面的HTML标签去掉就行了,至于数据库取值很容易啊,本来是填值的,现在直接从数据库里循环读出就行了。
String sql= "select * from cpdls "; //sql语句
rs=DBconnect.executeQuery(sql); //连接
TimeSeries timeseries = new TimeSeries( "最大值 ",Day.class);
TimeSeries timeseries1 = new TimeSeries( "平均值 ",Day.class);
//从数据库中取值,数据和时间
try{
while(rs.next()) //遍历
{
String y0=rs.getString( "MAX ");
String y1=rs.getString( "MEAN ");
Float f0=Float.parseFloat(y0);
Float f1=Float.parseFloat(y1);
String s=rs.getString( "DATETIME "); //把各种值取出来并转换类型
//从yyyyMMddHHmm时间格式的char中取出年月日设为int值
int x=Integer.parseInt(s.substring(0,4));
int y=Integer.parseInt(s.substring(5,7));
int z=Integer.parseInt(s.substring(8,10));
timeseries.add(new Day(z,y,x),f0);
timeseries1.add(new Day(z,y,x),f1);
}
}
catch(Exception e){System.out.print( "error ");}
---------------以下是关键,写在JFREECHART创建图表中-------------
TimeSeriesCollection dataset = new TimeSeriesCollection();//新建数据集
dataset.addSeries(timeseries); //把前面从数据库里取出的内容放到数据集中
dataset.addSeries(timeseries1); //同上
实际上这样就可以了,要改颜色、字体什么的按照文档里的就行。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询