3

私は2セットのデータを持っています

int[] x1 = {1,2,3,4,5,6,7,8,9,10};
int[] y1 = {1,2,3,5,6,8,9,10,14,11};

int[] x2 = {1,2,3,4,5,6,7,8,9,10};
int[] y2 = {0,2,3,5,0,8,9,8,14,11};

int[] z2 = {1,2,3,1,2,3,1,2,3,1};

x1,y1としてプロットしてから、線なしで同じプロットに散布図としてXYLineChartプロットしたいと思います。x2,y2

の値に応じて、各散布点をxy,y2異なる色にする必要もあります。z2 (1=Color.red, 2=Color.green, 3=Color.blue)

これどうやってするの?

これまでのところ、私は持っています:

JPanel panel_1 = new JPanel();
panel_1.setLayout(new BorderLayout(0, 0));
XYSeriesCollection dataset = new XYSeriesCollection();
XYSeries series1 = new XYSeries("series1");
for(int i=0; i<x1.length; i++){
    series1.add(x1[i],y1[i]);
}
dataset.add(series1);
JFreeChart chart = ChartFactory.createXYLineChart("Title", "x", "y", dataset, PlotOrientation.VERTICAL, false, false, false);
ChartPanel cp = new ChartPanel(chart);
panel_1.add(cp, BorderLayout.CENTER);

これにより、折れ線グラフがソートされます。x2,y2ここで、行き詰まった場所である (上記の色を使用して)散布図をコーディングする必要があります。

4

1 に答える 1

8

createXYLineChart() メソッドは、XYLineAndShapeRendererを使用するチャートを作成します。プロットからレンダラーを取得し、XYLineAndShapeRenderer にキャストします。次に、メソッドsetSeriesLinesVisible()およびsetSeriesShapesVisible()を呼び出して、シリーズごとに、データ項目の形状や線を描画するかどうかを制御できます。そうすれば、単一のレンダラーとデータセットを使用できるため、作業が簡単になります。

別のデータ値に応じて色を変更するという要件には、もう少し作業が必要です。XYLineAndShapeRenderer クラスをサブクラス化し、getItemPaint(int, int)メソッドをオーバーライドする必要があります。ここでは、データ項目に必要な任意の色を返すことができます。デフォルトの実装では、シリーズ インデックスを調べて、シリーズの色を返します。アイテム インデックスも確認する必要があります。次に、Z 値のテーブルでルックアップを行い、返す色を決定します。

于 2013-10-22T06:08:05.333 に答える