本帖最后由 java2000_net 于 2008-08-04 21:12:25 编辑

解决方案 »

  1.   

    应该可以在NumberAxis属性中设置
      

  2.   

    [align=center]
    折线图,有个地方可以设置的。好久没弄过这个了,找了下以前的代码,就一个生成时序图的例子了,要睡觉了,懒得找了
    你可以把我的例子改下,一样,时序图其实就折线图,只不过横坐标刻度是时间而已,你可以把刻度设置为年就可以了public class CopyOfDataToPictrueServiceImp1 implements DataToPictrueService {
         /**
     * 创建JFreeChart TimeXY Chart(折线图)
     */
    public static void main(String[] args) {

        
    Long time1 = new java.util.GregorianCalendar().getTimeInMillis();
    //创建XYDataset对象(准备数据)
    XYDataset dataset = createXYDataset();
    //根据Dataset 生成JFreeChart对象,以及做相应的设置
    JFreeChart freeChart = createChart(dataset,"监测点日电压曲线图","时间","电压百分比");
    //将JFreeChart对象输出到文件,Servlet输出流等
    saveAsFile(freeChart, "D:\\lineXY.png", 700,800);
    System.out.println("生成完毕");
    Long time2 = new java.util.GregorianCalendar().getTimeInMillis();
    System.out.println("生成所需的时间:" + (time2 - time1));
    }
             // 保存为文件
    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, 500, 300);
    // 保存为JPEG
    //  ChartUtilities.writeChartAsJPEG(out, chart, 500, 400);
    out.flush();
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    if (out != null) {
    try {
    out.close();
    } catch (IOException e) {
    // do nothing
    }
    }
    }
    }
           // 根据XYDataset创建JFreeChart对象
    public static JFreeChart createChart(XYDataset dataset,
    String titleName,String XName,String YName) {
    // 创建JFreeChart对象:ChartFactory.createXYLineChart
    JFreeChart jfreechart = ChartFactory.createXYLineChart(
    titleName, // 标题
    XName, // categoryAxisLabel (category轴,横轴,X轴标签)
    YName, // valueAxisLabel(value轴,纵轴,Y轴的标签)
    dataset, // XYDataset对象(准备数据)
    PlotOrientation.VERTICAL,   //直方图的方向 PlotOrientation.HORIZONTAL//水平方向
    true, //定义图表是否包含图例
    true, //定义图表是否包含提示
    true);  //定义图表是否包含URL

    jfreechart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
    jfreechart.setBorderVisible(false); 

    // jfreechart.setDrawBarOutline(false); 
    // 使用CategoryPlot设置各种参数。
    XYPlot plot = (XYPlot) jfreechart.getPlot();
    plot.setBackgroundPaint(Color.BLACK);
    // 背景色 透明度
    plot.setBackgroundAlpha(0.1f);
    // 前景色 透明度
    plot.setForegroundAlpha(0.5f);
    // 其它设置可以参考XYPlot类

    Font labelFont = new Font("宋体", Font.TRUETYPE_FONT, 12); 
    NumberAxis numAxis = (NumberAxis)plot.getRangeAxis();
    NumberFormat nf =NumberFormat.getPercentInstance();
    numAxis.setNumberFormatOverride(nf);//设置y轴以百分比方式显示
    numAxis.setTickUnit(new  NumberTickUnit(0.05)); //0.5为一个间隔单位  
    numAxis.setLabelFont(labelFont);
    numAxis.setLowerMargin(0.0D);// 数据轴下(左)边距
    numAxis.setUpperMargin(0.0D);// 数据轴上(右)边距


        numAxis.setAutoRangeIncludesZero(false);
        numAxis.setAutoRangeStickyZero(true);
            
        numAxis.setLowerBound(-0.20D);//数据轴上的显示最小值
        numAxis.setUpperBound(0.20D);//数据轴上的显示最大值    plot.setRangeGridlinePaint(Color.BLACK);//纵坐标格线颜色
        plot.setDomainGridlinePaint(Color.BLACK);//横坐标格线颜色
        plot.setBackgroundPaint(new Color(255, 255, 204)); 
    DateAxis  dateaxis = new DateAxis();
    dateaxis.setAutoTickUnitSelection(false);//数据轴的数据标签是否自动确定
    SimpleDateFormat format = new SimpleDateFormat("HH时mm分"); //你的刻度是年该这里的显示格式
    dateaxis.setDateFormatOverride(format);//设置x
    dateaxis.setTickUnit(new DateTickUnit(DateTickUnit.MINUTE,48));//此处x轴单位间隔为48min   你可以把DateTickUnit设置成年即可,后面跟具体的多少年为刻度
    dateaxis.setLabelFont(labelFont);
    dateaxis.setLowerMargin(0.0D);// 数据轴下(左)边距
    dateaxis.setUpperMargin(0.0D);// 数据轴上(右)边距

           dateaxis.setTickLabelsVisible(true);

    plot.setDomainAxis(dateaxis);

    plot.setAxisOffset(new RectangleInsets(5D, 0D, 0D, 30D));

    XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
            renderer.setShapesVisible(true);  //设置曲线是否显示数据点
            renderer.setBaseItemLabelsVisible(true);//设置项标签显示
            renderer.setBaseToolTipGenerator(new XYToolTipGenerator(){ public String generateToolTip(XYDataset dataset, int series,
    int item) {
    // TODO Auto-generated method stub
    return "["+dataset.getXValue(series, item) + "]" + 
      dataset.getYValue(series, item);
    }
            
            });
            plot.setRenderer(renderer);
    return jfreechart;
    }
            /**
     * 创建XYDataset对象
     * 
     */
    private static XYDataset createXYDataset() {


    TimeSeriesCollection tsc = new TimeSeriesCollection();


    TimeSeries timeSeries1  = new TimeSeries("a",Minute.class);
    TimeSeries timeSeries2  = new TimeSeries("b",Minute.class);
    timeSeries1.addOrUpdate(new Minute(1, 0, 1, 1, 2006), -0.02);
    timeSeries1.addOrUpdate(new Minute(10, 0, 1, 1, 2006), -0.05);
    timeSeries1.addOrUpdate(new Minute(20, 0, 1, 1, 2006), 0.01);
    timeSeries1.addOrUpdate(new Minute(30, 0, 1, 1, 2006), 0.12);
    timeSeries1.addOrUpdate(new Minute(40, 0, 1, 1, 2006), 0.17);
    timeSeries1.addOrUpdate(new Minute(10, 1, 1, 1, 2006), -0.12);
    timeSeries1.addOrUpdate(new Minute(30, 1, 1, 1, 2006), -0.10);
    timeSeries1.addOrUpdate(new Minute(50, 1, 1, 1, 2006), 0.02);
    timeSeries1.addOrUpdate(new Minute(60, 1, 1, 1, 2006), 0.10);
    timeSeries1.addOrUpdate(new Minute(1, 2, 1, 1, 2006), -0.02);
    timeSeries1.addOrUpdate(new Minute(10, 2, 1, 1, 2006), -0.05);
    timeSeries1.addOrUpdate(new Minute(20, 2, 1, 1, 2006), 0.01);
    timeSeries1.addOrUpdate(new Minute(30, 2, 1, 1, 2006), 0.12);
    timeSeries1.addOrUpdate(new Minute(40, 2, 1, 1, 2006), 0.17);
    timeSeries1.addOrUpdate(new Minute(10, 2, 1, 1, 2006), -0.12);
    timeSeries1.addOrUpdate(new Minute(30, 3, 1, 1, 2006), -0.10);
    timeSeries1.addOrUpdate(new Minute(50, 3, 1, 1, 2006), 0.02);
    timeSeries1.addOrUpdate(new Minute(60, 3, 1, 1, 2006), 0.10);
    timeSeries1.addOrUpdate(new Minute(1, 4, 1, 1, 2006), -0.02);
    timeSeries1.addOrUpdate(new Minute(10, 4, 1, 1, 2006), -0.05);
    timeSeries1.addOrUpdate(new Minute(20, 4, 1, 1, 2006), 0.01);
    timeSeries1.addOrUpdate(new Minute(30, 4, 1, 1, 2006), 0.12);
    timeSeries1.addOrUpdate(new Minute(40, 5, 1, 1, 2006), 0.17);
    timeSeries1.addOrUpdate(new Minute(10, 5, 1, 1, 2006), -0.12);
    timeSeries1.addOrUpdate(new Minute(30, 5, 1, 1, 2006), -0.10);
    timeSeries1.addOrUpdate(new Minute(50, 5, 1, 1, 2006), 0.02);
    timeSeries1.addOrUpdate(new Minute(60, 5, 1, 1, 2006), 0.10);

    timeSeries2.addOrUpdate(new Minute(0, 6, 1, 2, 2006), 100);
    timeSeries2.addOrUpdate(new Minute(40, 6, 1, 2, 2006), 500);
    timeSeries2.addOrUpdate(new Minute(50, 6, 1, 2, 2006), 300);
    timeSeries2.addOrUpdate(new Minute(30, 6, 1, 2, 2006), 800);

    tsc.addSeries(timeSeries1);
    // tsc.addSeries(timeSeries2);


    tsc.setDomainIsPointsInTime(true); 
    return tsc;


    }}[/align]