2

我有一些用于构建一系列集群的逻辑。到目前为止,为了表示图上每个点所属的集群,我使用了一系列颜色,其中属于同一集群的点具有相同的颜色。

除此之外,我还想显示每个集群的中心,因为这将帮助我了解集群构建算法的执行情况。为此,我正在通过使用XPointerAnnotation类在图表上写一些文本。这样做的问题是,我认为在点上放置文本会导致情节混乱(考虑到很可能会有数百个点)。

我想画线向外,从中心点到它的集群的每个成员。我面临的问题是我似乎无法找到正确的方法或方法来做到这一点。

我已经设法找到它的来源XYLineAndShapeRenderer尝试将其用作指南,但我仍然没有在情节上绘制任何自定义线。我试图覆盖drawPrimaryLine,drawPrimaryLineAsPathdrawSecondaryPass方法,但无济于事。

我用来渲染线条的代码如下:

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()仅在drawSeriesLineAsPathis时调用true,例如setDrawSeriesLineAsPath(true)

于 2012-09-05T00:24:15.483 回答