4

デュアルx軸(またはy軸ですが、時系列データセットであるため、デュアルx軸に焦点を当てています)の時系列チャートを作成できるかどうかを尋ねたいと思います。1分または1日で測定が行われた2つのデータファイルがあります。その結果、1つのx軸を持つことができません。したがって、1つの解決策は、一方のデータファイルをもう一方の形式に変換するか、2つの異なるx軸を使用することです。2番目の解決策は実行可能ですか?

JFreeChartDualAxisDemoを見つけました

しかし、それは私が望むものではありません。

助けてくれてありがとう!!!

編集:

次のコードがあり、特定のx軸に属する2つのデータセットを使用して時系列チャートを作成しようとしています(ご覧のとおり、2つのx軸を作成しました)。このコードを実行しようとしましたが、作成されるグラフが正しくなく、実際にはx軸とy軸しかありません。誰かがどこに問題があるのか​​教えてもらえますか?

int year1 = 2004;
int year2 = 2005;
int year3 = 2006;
int year4 = 2007;

int month1 = 1;
int month2 = 5;
int month3 = 8;
int month4 = 12;

int day1 = 3;
int day2 = 10;
int day3 = 15;
int day4 = 30;


TimeSeries ts= new TimeSeries("Metrisi", Day.class);
ts.add(new Day(day1, month1, year1), 100);
ts.add(new Day(day2, month2, year2), 150);
ts.add(new Day(day3, month3, year3), 250);
ts.add(new Day(day4, month4, year4), 275);

TimeSeriesCollection dataset = new TimeSeriesCollection();
dataset.addSeries(ts);


int year1_2 = 2004;
int year2_2 = 2005;
int year3_2 = 2006;
int year4_2 = 2007;

int month1_2 = 2;
int month2_2 = 7;
int month3_2 = 9;
int month4_2 = 11;

int day1_2 = 23;
int day2_2 = 14;
int day3_2 = 19;
int day4_2 = 22;


TimeSeries ts2= new TimeSeries("Metrisi", Day.class);
ts.add(new Day(day1_2, month1_2, year1_2), 100);
ts.add(new Day(day2_2, month2_2, year2_2), 150);
ts.add(new Day(day3_2, month3_2, year3_2), 250);
ts.add(new Day(day4_2, month4_2, year4_2), 275);

TimeSeriesCollection dataset2 = new TimeSeriesCollection();
dataset.addSeries(ts2);


JFreeChart chart = ChartFactory.createTimeSeriesChart(
"Measurement",
"Date",
"Measurement",
dataset,
true,
true,
false);

final XYPlot plot = chart.getXYPlot();

plot.setBackgroundPaint(Color.lightGray);
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
plot.setDomainCrosshairVisible(true);
plot.setRangeCrosshairVisible(false);




final DateAxis axis2 = new DateAxis("Secondary");
//xAxis2.setAutoRangeIncludesZero(false);
//plot.setDomainAxis(1, axis );
plot.setRangeAxis(1, axis2);
plot.setDataset(1, dataset2);
plot.mapDatasetToRangeAxis(1, 1);

 final XYItemRenderer renderer = plot.getRenderer();
 renderer.setToolTipGenerator(StandardXYToolTipGenerator.getTimeSeriesInstance());
if (renderer instanceof StandardXYItemRenderer) {
    final StandardXYItemRenderer rr = (StandardXYItemRenderer) renderer;
    //rr.setPlotShapes(true);

    rr.setShapesFilled(true);
    //renderer.setSeriesStroke(0, new BasicStroke(2.0f));
    //renderer.setSeriesStroke(1, new BasicStroke(2.0f));
   }

final StandardXYItemRenderer renderer2 = new StandardXYItemRenderer();
renderer2.setSeriesPaint(0, Color.black);
//renderer2.setPlotShapes(true);
renderer.setToolTipGenerator(StandardXYToolTipGenerator.getTimeSeriesInstance());
plot.setRenderer(1, renderer2);

final DateAxis axis = (DateAxis) plot.getDomainAxis();

これが私がやろうとしていることです。ご覧のとおり、x軸は2つありますが、データセットは1つだけであり、それが問題です。次のコードを使用して、画像に示されている例を実行しました。

    final XYPlot plot = chart.getXYPlot();

    plot.setBackgroundPaint(Color.lightGray);
    plot.setDomainGridlinePaint(Color.white);
    plot.setRangeGridlinePaint(Color.white);
    plot.setDomainCrosshairVisible(true);
    plot.setRangeCrosshairVisible(false);


    final XYItemRenderer renderer = plot.getRenderer();
    if (renderer instanceof StandardXYItemRenderer) {
        final StandardXYItemRenderer rr = (StandardXYItemRenderer) renderer;
        //rr.setPlotShapes(true);
        rr.setShapesFilled(true);
        renderer.setSeriesStroke(0, new BasicStroke(2.0f));
        renderer.setSeriesStroke(1, new BasicStroke(2.0f));
       }

    final DateAxis axis = (DateAxis) plot.getDomainAxis();

    final DateAxis xAxis2 = (DateAxis) plot.getDomainAxis();
    plot.setDomainAxis(1, xAxis2 );
    plot.mapDatasetToDomainAxis(1, 1);

欲しい出力例

4

2 に答える 2

5

はい、セカンダリ X (ドメイン) 軸を追加できます。リンクしたデモにセカンダリ ドメイン軸を追加するには、次のコードを追加します。

final NumberAxis xAxis2 = new NumberAxis("Secondary X Axis");
plot.setDomainAxis(1, xAxis2 );
plot.mapDatasetToDomainAxis(1, 1);

Plot ( plot)への参照を取得した後、コンストラクターに

これにより、次のように両方のデータセットを表示できます。

ここに画像の説明を入力

于 2012-11-26T09:28:25.377 に答える
0

私が得る前に投稿したコードでは、このようなものです

ここに画像の説明を入力

于 2012-11-27T07:21:01.173 に答える