使用jfreechart统计数据,生成折线图(坐标x,y值大小可以自己设置)
2013-12-01 15:48
716 查看
需求:一个目录下包含多个txt文件,每个txt文件每行保存一个数据,根据每个txt文件的数据生成一个折线图,y轴为每行的数据,x轴表示第几行。
a.先下载依赖的jar包:jfreechart-1.0.17.jar,jcommon-1.0.21.jar 。
b.创建新的java工程时,依赖这2个jar包。
c.相关jfreechart介绍:
org.jfree.chart.ChartFactory :得到各种类型chart的工厂类
本例中使用createXYLineChart,原型如下:
Creates a line chart (based on an
with default settings.
Parameters:
实现如下:
GetData.java 处理数据
LineChart.java
生成的图,如下:
a.先下载依赖的jar包:jfreechart-1.0.17.jar,jcommon-1.0.21.jar 。
b.创建新的java工程时,依赖这2个jar包。
c.相关jfreechart介绍:
org.jfree.chart.ChartFactory :得到各种类型chart的工厂类
本例中使用createXYLineChart,原型如下:
public static JFreeChart createXYLineChart(java.lang.String title, java.lang.String xAxisLabel, java.lang.String yAxisLabel, XYDataset dataset, PlotOrientation orientation, boolean legend, boolean tooltips, boolean urls)
Creates a line chart (based on an
XYDataset)
with default settings.
Parameters:
title- the chart title (
nullpermitted).
xAxisLabel- a label for the X-axis (
nullpermitted).
yAxisLabel- a label for the Y-axis (
nullpermitted).
dataset- the dataset for the chart (
nullpermitted).
orientation- the plot orientation (horizontal or vertical) (
nullNOT permitted).
legend- a flag specifying whether or not a legend is required.
tooltips- configure chart to generate tool tips?
urls- configure chart to generate URLs?Returns:The chart.
实现如下:
GetData.java 处理数据
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class GetData { //从一个txt文件中读取数据 public static List writeToData(String path) { File file = new File(path); List list = new ArrayList(); try { BufferedReader bw = new BufferedReader(new FileReader(file)); String line = null; //先存入list集合中 while((line = bw.readLine()) != null){ list.add(line); } bw.close(); } catch (IOException e) { e.printStackTrace(); } return list; } //求数组元素的平均值 public static double average(double table[]) { double sum=0.0; for (int i=0;i<table.length;i++) { sum += table[i]; } return sum / table.length; } }
LineChart.java
import java.awt.Font; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; 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.NumberAxis; import org.jfree.chart.axis.ValueAxis; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.XYPlot; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; public class LineChart { // 保存为图像文件 public static void saveAsFile(JFreeChart chart, String outputPath, int weight, int height) { FileOutputStream out = null; try { File outFile = new File(outputPath); if (!outFile.getParentFile().exists()) { outFile.getParentFile().mkdirs(); } out = new FileOutputStream(outputPath); // 保存为PNG ChartUtilities.writeChartAsPNG(out, chart, weight, height); //保存为JPEG //ChartUtilities.writeChartAsJPEG(out, chart, weight, height); out.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (out != null) { try { out.close(); } catch (IOException e) { // do nothing } } } } //接口名 static String interfaceName; public static XYSeriesCollection createDataSet(String fileName) { //要处理的txt文件的路径 String path = "e:\\interfaceTest\\gz\\" + fileName; //获取接口名 String result = path.substring(0,path.length()-4); interfaceName = result.substring(20, result.length()); //获取数据,放到数组中 List list = GetData.writeToData(path); double[] nums = new double[list.size()]; for(int k=0; k < list.size(); k++){ String s = (String) list.get(k); nums[k] = Double.parseDouble(s); } double ave = GetData.average(nums); System.out.println("ave: " + ave); XYSeriesCollection seriesCollection = new XYSeriesCollection(); XYSeries series1 = new XYSeries(interfaceName + "接口,平均响应时间:" + ave + "ms"); for(int i=0; i < list.size(); i++){ series1.add(i, nums[i]); } seriesCollection.addSeries(series1); return seriesCollection; } public static void createLineChart(String fileName) { JFreeChart chart = ChartFactory.createXYLineChart("响应时间统计", //图表标题 "接口调用次数", //X轴标题 "响应时间(毫秒)", //Y轴标题 createDataSet(fileName), //绘图数据集 PlotOrientation.VERTICAL, //绘制方向 true, //显示图例 true, //采用标准生成器 false); //是否生成超链接 //ChartFrame frame=new ChartFrame("接口响应时间统计",chart); //设置标题字体 chart.getTitle().setFont(new Font("宋体", Font.BOLD, 15)); chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 15)); // 设置图例类别字体 //获取图表区域对象 XYPlot plot = (XYPlot) chart.getPlot(); ValueAxis domainAxis=plot.getDomainAxis(); domainAxis.setTickLabelFont(new Font("黑体", Font.BOLD, 15)); /*------设置X轴坐标上的文字-----------*/ domainAxis.setTickLabelFont(new Font("黑体", Font.PLAIN, 11)); /*------设置X轴的标题文字------------*/ domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12)); NumberAxis numberaxis = (NumberAxis) plot.getRangeAxis(); /*------设置Y轴坐标上的文字-----------*/ numberaxis.setTickLabelFont(new Font("黑体", Font.PLAIN, 12)); /*------设置Y轴的标题文字------------*/ numberaxis.setLabelFont(new Font("宋体", Font.PLAIN, 12)); //终端显示 //frame.pack(); //frame.setVisible(true); System.out.println(interfaceName); //保存图像的大小 int weight = 800; int height = 600; //存放图像的目录 String outputPath = "e:\\interfaceTest\\imgs\\" + interfaceName + ".png"; //String outputPath = "d:\\interface\\imgs\\" + interfaceName + ".png"; LineChart.saveAsFile(chart, outputPath, weight, height); } public static void main(String[] args) { //存放.txt的目录 File file = new File("e:\\interfaceTest\\gz\\"); if(file.isDirectory()) { File[] files = file.listFiles(); for(File myFile:files) { if(myFile.isFile()) { createLineChart(myFile.getName()); } } } } }
生成的图,如下:
相关文章推荐
- easysize的使用方法 (实现控件大小位置随界面变化而有相应的变化,这个变化可以自己设置)
- 【甘道夫】Hadoop2.2.0环境使用Sqoop-1.4.4将Oracle11g数据导入HBase0.96,并自己主动生成组合行键
- eclipse+Java2WSDL+WSDL2Java 2012-12-06 12:32:43| 分类: j2ee |报道|字体大小 认购 一、eclipse如何使用低axis生成wsdl 可以使用
- 使用该JavaBean可以将数据在JSP页面中以表格的形式显示出来,并具有动态排序、动态生成查询、自动分页功能
- 使用python抓取婚恋网用户数据并用决策树生成自己择偶观
- 文件映射mmap简单设置文件大小(lseek (ftruncate可以设置文件大小))__使用mmap即文件映射实现文件的快速复制代码
- 使用java实现各种数据统计图(柱形图,饼图,折线图)
- Windows 下使用 Chrome 翻墙的详细设置(转载无心之旅)经自己测试完全可以
- PHP 使用Echarts生成数据统计报表的实现代码
- JFreeChart 实现各种数据统计图(柱形图,饼状图,折线图)
- TreeSet集合存放自定义类型的对象,可以使用比较器,实现Comparable接口自己设置排序方式
- JFreechart 制作柱状图、饼图、折线图、仪表图等统计图的使用方法
- JFreeChart(使用一):生成折线图
- ★实验 8-1 1. 创建一个守候进程。并为自己创建独立的日志文件。 2. 每隔 1s 向日志文件中写入如下信息: a) 未使用的内存大小(MemFree) 可以从/proc/meminf
- 设置窗体可以使用鼠标拖动大小 通过
- TestNG如何修改运行结果(通过使用监听器和报表器,可以很轻松的生成自己的TestNG报表)
- 使用JFreeChart生成带交互功能的统计图例
- 由计算机产生0-9之间的随机整数,用户输入猜测的数据,统计用户猜测的次数。产生随机数可以使用Math.rangom()静态方法,该方法返回正的double类型浮点数位于(0.0 1.0】间。
- 定义一个“点”(Point)类用来表示三维空间中的点(有三个坐标)。要求如下: (1)可以生成具有特定坐标的点对象。 (2)提供可以设置三个坐标的方法。 (3)提供可以计算该“点”距原点距离平方的方法。 (4)编写主类程序验证。
- 使用jfreeChart生成柱状图,折线图,饼图等