jfreechart 折线图

来源:互联网 发布:射频信号测试软件 编辑:程序博客网 时间:2024/06/05 03:31

第一次上岗工作,头一个任务:用JFreeChart做折线图。网上搜了好多资料,但对于我这个新手来说好像总显得那么深奥,经过两天的整理测试,稍微弄出了点思路,自己记录下,附上我的例子:

 

我的程序:

public class bloodSugarChart {

 

       public bloodSugarChart() {

              this.createChart();

       }

 

// 获得数据集 (这里的数据是为了测试我随便写的一个自动生成数据的例子)

       public DefaultCategoryDataset createDataset() {

 

              DefaultCategoryDataset linedataset = new DefaultCategoryDataset();

       // 曲线名称

              String series = "血糖值";  // series指的就是报表里的那条数据线

                              //因此 对数据线的相关设置就需要联系到serise

                              //比如说setSeriesPaint 设置数据线的颜色

 

       // 横轴名称(列名称) 

              String[] time = new String[15];

              String[] timeValue = { "6-1日", "6-2日", "6-3日", "6-4日", "6-5日", "6-6日",

                            "6-7日", "6-8日", "6-9日", "6-10日", "6-11日", "6-12日", "6-13日",

                            "6-14日", "6-15日" };

              for (int i = 0; i < 15; i++) {

                     time[i] = timeValue[i];

              }

      //随机添加数据值

              for (int i = 0; i < 15; i++) {

                     java.util.Random r = new java.util.Random();

                     linedataset.addValue(i + i * 9.34 + r.nextLong() % 100,  //值

series,  //哪条数据线

                                              time[i]); // 对应的横轴

              }

 

              return linedataset;

       }

      

// 生成图标对象JFreeChart

/*

*整个大的框架属于JFreeChart

*坐标轴里的属于 Plot 其常用子类有:CategoryPlotMultiplePiePlotPiePlot , XYPlot

*

***

*/

       public void createChart() {

 

              try {

                     //定义图标对象

                     JFreeChart chart = ChartFactory.createLineChart(null,// 报表题目,字符串类型

                                   "采集时间", // 横轴

                                   "血糖值", // 纵轴

                                   this.createDataset(), // 获得数据集

                                   PlotOrientation.VERTICAL, // 图标方向垂直

                                   true, // 显示图例

                                   false, // 不用生成工具

                                   false // 不用生成URL地址

                                   );

//整个大的框架属于chart  可以设置chart的背景颜色

 

                     // 生成图形

                     CategoryPlot plot = chart.getCategoryPlot();

                     // 图像属性部分

                     plot.setBackgroundPaint(Color.white);

plot.setDomainGridlinesVisible(true);  //设置背景网格线是否可见

plot.setDomainGridlinePaint(Color.BLACK); //设置背景网格线颜色

plot.setRangeGridlinePaint(Color.GRAY);

                     plot.setNoDataMessage("没有数据");//没有数据时显示的文字说明。 

                     // 数据轴属性部分

                     NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();

                     rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

                     rangeAxis.setAutoRangeIncludesZero(true); //自动生成

                     rangeAxis.setUpperMargin(0.20);

                     rangeAxis.setLabelAngle(Math.PI / 2.0); 

                     rangeAxis.setAutoRange(false);

                     // 数据渲染部分 主要是对折线做操作

                     LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot

                                   .getRenderer();

                     renderer.setBaseItemLabelsVisible(true);

                     renderer.setSeriesPaint(0, Color.black);    //设置折线的颜色

                  renderer.setBaseShapesFilled(true);

                     renderer.setBaseItemLabelsVisible(true);     

                     renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(

                                   ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));

                     renderer

                                   .setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());  

/*

*这里的StandardCategoryItemLabelGenerator()我想强调下:当时这个地*方被搅得头很晕,Standard**ItemLabelGenerator是通用的 因为我创建*的是CategoryPlot   所以很多设置都是Category相关

*而XYPlot  对应的则是 : StandardXYItemLabelGenerator

*/

//对于编程人员  这种根据一种类型方法联想到其他类型相似方法的思

//想是必须有的吧!目前只能慢慢培养了。。

                     renderer.setBaseItemLabelFont(new Font("Dialog", 1, 14));  //设置提示折点数据形状

                     plot.setRenderer(renderer);

                     //区域渲染部分

                     double lowpress = 4.5; 

               double uperpress = 8;   //设定正常血糖值的范围

               IntervalMarker inter = new IntervalMarker(lowpress, uperpress);  

               inter.setLabelOffsetType(LengthAdjustmentType.EXPAND); //  范围调整——扩张

               inter.setPaint(Color.LIGHT_GRAY);// 域顏色  

           

               inter.setLabelFont(new Font("SansSerif", 41, 14));  

               inter.setLabelPaint(Color.RED);  

               inter.setLabel("正常血糖值范围");    //设定区域说明文字

             plot.addRangeMarker(inter,Layer.BACKGROUND);  //添加mark到图形  BACKGROUND使得数据折线在区域的前端

 

                     // 创建文件输出流

                     File fos_jpg = new File("E://bloodSugarChart.jpg ");

                     // 输出到哪个输出流

                     ChartUtilities.saveChartAsJPEG(fos_jpg, chart, // 统计图表对象

                                   700, // 宽

                                   500 // 高

                                   );

 

              } catch (IOException e) {

                     e.printStackTrace();

              }

       }

 

//测试类

       public static void main(String[] args) {

              bloodSugarChart my = new bloodSugarChart();

       }

 

}

效果图如下:

 

 

0 0