我有一些逻辑用于构建一系列集群。到目前为止,为了表示图上每个点所属的聚类,我使用了一系列颜色,其中属于同一聚类的点具有相同的颜色。
除此之外,我还希望显示每个群集的中心,因为这将帮助我了解我的群集构建算法的执行情况。为了做到这一点,我通过使用XPointerAnnotation
类在图表上写了一些文本。问题在于我认为在点之上添加文本会导致杂乱的情节(考虑到很可能会有数百个点)。
我想过画线从中心点到其群集的每个成员向外。我面临的问题是,我似乎无法找到正确的方法或方法。
我设法找到source的XYLineAndShapeRenderer
,并尝试将其用作指南,但我仍然没有在绘图上绘制自定义线条。我试图覆盖drawPrimaryLine
,drawPrimaryLineAsPath
和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
,但也没有用。
任何指示都将不胜感激。 感谢。
答案 0 :(得分:2)
仔细查看发布的代码,从dataset
获取的 xy 值代表 data 坐标中的一个点。在可以渲染这样的点之前,必须将其转换为相对于dataArea
的图形坐标。例如,drawPrimaryLineAsPath()
使用相应的轴方法valueToJava2D()
将数据值转换为图形坐标。
double transX1 = domainAxis.valueToJava2D(x1, dataArea, xAxisLocation);
double transY1 = rangeAxis.valueToJava2D(y1, dataArea, yAxisLocation);
附录:drawPrimaryLineAsPath()
方法仅在drawSeriesLineAsPath
为true
时从drawItem()
调用,例如setDrawSeriesLineAsPath(true)
。