1

jspおよびサーブレット内でjfreeChart APIを使用して折れ線グラフを作成しました。

以下はサーブレットのコードです

// Get the output stream from the response object:
OutputStream out = response.getOutputStream();

// Set the HTTP Response Type:
response.setContentType("image/png");

XYSeries series = new XYSeries("Average Weight1233");
series.add(1.48, 20.0);
series.add(1.52, 25.0);
series.add(2.02, 50.0);
series.add(2.05, 65.0);
series.add(3.30, 2);
series.add(3.52, 50);
XYDataset xyDataset = new XYSeriesCollection(series);

// Create chart:
JFreeChart chart
= ChartFactory.createXYLineChart("XYLine Chart using JFreeChart",
                                 "Age", "Weight",xyDataset,
                                 PlotOrientation.VERTICAL,
                                 true, true, false);

// Write the data to the output stream:
ChartUtilities.writeChartAsPNG(out, chart, 400, 300);

追加した値から水平方向の数字を自動的に作成しますが、XYSeriesその値を手動で設定したいです。

出来ますか?どのように?

4

1 に答える 1

-1

よくわかりませんが、例があります。ある日、時間に基づいて水平方向の数字を作成する必要がありました。次に、このクラスを作成しました:

public class TimeAxis {

    public static TickUnitSource createTimeTickUnits() {
        TickUnits units = new TickUnits();
        TimeFormat format = new TimeFormat();
        units.add(new NumberTickUnit(1, format, 2));
        units.add(new NumberTickUnit(2, format, 2));
        units.add(new NumberTickUnit(5, format, 5));
        units.add(new NumberTickUnit(10, format, 2));
        units.add(new NumberTickUnit(20, format, 2));
        units.add(new NumberTickUnit(60, format, 5));
        units.add(new NumberTickUnit(120, format, 2));
        units.add(new NumberTickUnit(240, format, 2));
        units.add(new NumberTickUnit(540, format, 5));
        units.add(new NumberTickUnit(1080, format, 2));
        units.add(new NumberTickUnit(2160, format, 2));
        units.add(new NumberTickUnit(5400, format, 5));
        units.add(new NumberTickUnit(10800, format, 2));
        units.add(new NumberTickUnit(21600, format, 2));
        units.add(new NumberTickUnit(54000, format, 5));
        units.add(new NumberTickUnit(108000, format, 2));
        units.add(new NumberTickUnit(216000, format, 2));
        units.add(new NumberTickUnit(540000, format, 5));
        units.add(new NumberTickUnit(1080000, format, 2));
        units.add(new NumberTickUnit(2160000, format, 2));
        units.add(new NumberTickUnit(5400000, format, 5));
        units.add(new NumberTickUnit(10800000, format, 2));
        units.add(new NumberTickUnit(21600000, format, 2));
        units.add(new NumberTickUnit(54000000, format, 5));
        units.add(new NumberTickUnit(108000000, format, 2));
        units.add(new NumberTickUnit(216000000, format, 2));
        units.add(new NumberTickUnit(540000000, format, 5));
        units.add(new NumberTickUnit(1080000000, format, 2));
        units.add(new NumberTickUnit(2160000000.0, format, 2));
        units.add(new NumberTickUnit(5400000000.0, format, 5));
        units.add(new NumberTickUnit(10800000000.0, format, 2));
        return units;
    }
}

次に、「TimeFormat」を操作するクラスを作成しました。

public class TimeFormat extends NumberFormat {

    @Override
    public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos) {
        StringBuffer myReturn = new StringBuffer();
        //here I have the source to transform time in seconds in that format: 12h25m35s
        return myReturn;
    }

    @Override
    public StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition pos) {
        return new StringBuffer();
    }

    @Override
    public Number parse(String source, ParsePosition parsePosition) {
        return 0;
    }
}

最後に、次のプロパティを設定します。

ValueAxis domainAxis = plot.getDomainAxis();
domainAxis.setStandardTickUnits(TimeAxis.createTimeTickUnits()); //Here sets the horizontal numbers

垂直方向の数値を設定するには:

NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(TimeAxis.createTimeTickUnits());

お役に立てば幸いです

于 2012-05-23T12:51:29.400 に答える