2

一連のクラスターを構築するために使用しているロジックがあります。これまでのところ、グラフ上の各点が属するクラスターを示すために、一連の色を使用しています。ここで、同じクラスターに属する点は同じ色です。

それに加えて、クラスター構築アルゴリズムがどのように実行されるかを確認するのに役立つため、各クラスターの中心も表示したいと思います。現時点では、これを行うために、XPointerAnnotationクラスを使用してグラフにテキストを書いています。これに関する問題は、ポイントの上にテキストを配置すると、プロットが乱雑になる可能性があることです (ポイントが数百になる可能性が高いことを考えると)。

中心点からクラスターの各メンバーまで、外側に向かって線を引くことを考えました。私が直面している問題は、それを行う正しい方法または方法を見つけることができないことです。

ソースを見つけてXYLineAndShapeRendererガイドとして使用しようとしましたが、プロットにカスタム線が描画されません。drawPrimaryLinedrawPrimaryLineAsPathおよびdrawSecondaryPassメソッドをオーバーライドしようとしましたが、役に立ちませんでした。

線をレンダリングするために使用しているコードは次のとおりです。

int x1 = (int) dataset.getXValue(series, 0);
int y1 = (int) dataset.getYValue(series, 0);

int x2 = (int) dataset.getXValue(series, item);
int y2 = (int) dataset.getYValue(series, item);

g2.drawLine(x1, y1, x2, y2);
System.out.println(String.format("Drawing %d  %d  %d  %d %s", x1, y1, x2, y2, g2.getColor()));

State s = (State) state;
if (item == s.getLastItemIndex()) {
    // draw path
    drawFirstPassShape(g2, pass, series, item, s.seriesPath);
}

print ステートメントは適切な座標と適切な色を出力するため、追加しているグラフィックスがレンダリングされていないように見えます。superコードが実行される前後の両方で を呼び出してみましたが、どちらも役に立ちませんでした。

任意の指示をいただければ幸いです。ありがとう。

4

1 に答える 1

2

投稿されたコードを詳しく見ると、 から取得したxy値はデータ座標datasetの点を表します。このようなポイントをレンダリングする前に、 を基準としたグラフィックス座標に変換する必要があります。例として、は対応する軸メソッド を使用して、データ値をグラフィックス座標に変換します。dataAreadrawPrimaryLineAsPath()valueToJava2D()

double transX1 = domainAxis.valueToJava2D(x1, dataArea, xAxisLocation);
double transY1 = rangeAxis.valueToJava2D(y1, dataArea, yAxisLocation);

補遺: このメソッドは、が の場合にのみdrawPrimaryLineAsPath()呼び出されます。drawItem()drawSeriesLineAsPathtruesetDrawSeriesLineAsPath(true)

于 2012-09-05T00:24:15.483 に答える