目前,PolarChart将所有坐标与创建多边形的线连接起来。我只是想用点来绘制每个点,而不是将它们连接在一起。这可能吗?
我尝试使用translateValueThetaRadiusToJava2D()
和Graphics2D绘制圆圈,但它非常笨重和做作。
欢迎任何建议!
答案 0 :(得分:7)
因此DefaultPolarItemRenderer
接收所有极点,将极点转换为常规Java2D坐标,使用这些点生成Polygon
然后绘制它。这是我如何绘制点而不是多边形:
public class MyDefaultPolarItemRenderer extends DefaultPolarItemRenderer {
@Override
public void drawSeries(java.awt.Graphics2D g2, java.awt.geom.Rectangle2D dataArea, PlotRenderingInfo info, PolarPlot plot, XYDataset dataset, int seriesIndex) {
int numPoints = dataset.getItemCount(seriesIndex);
for (int i = 0; i < numPoints; i++) {
double theta = dataset.getXValue(seriesIndex, i);
double radius = dataset.getYValue(seriesIndex, i);
Point p = plot.translateValueThetaRadiusToJava2D(theta, radius,
dataArea);
Ellipse2D el = new Ellipse2D.Double(p.x, p.y, 5, 5);
g2.fill(el);
g2.draw(el);
}
}
}
然后在其他地方实例化这个类:
MyDefaultPolarItemRenderer dpir = new MyDefaultPolarItemRenderer();
dpir.setPlot(plot);
plot.setRenderer(dpir);
答案 1 :(得分:2)
这个有点困难。给定PolarPlot
,您可以获取其AbstractRenderer
并设置形状。例如,
PolarPlot plot = (PolarPlot) chart.getPlot();
AbstractRenderer ar = (AbstractRenderer) plot.getRenderer();
ar.setSeriesShape(0, ShapeUtilities.createDiamond(5), true);
钻石将出现在图例中,但DefaultPolarItemRenderer
既不会渲染形状,也不会提供线条控制。您必须扩展默认渲染器并覆盖drawSeries()
。 XYLineAndShapeRenderer
是学习的好榜样;你可以在TimeSeriesChartDemo1
中看到它是如何使用的。
如果这是 terra incognita 给你,我建议The JFreeChart Developer Guide †。
† 免责声明:与Object Refinery Limited无关;我是一个满意的客户和非常小的贡献者。
答案 2 :(得分:1)
这是一个很好的讨论,如果你想让函数拿起用户分配给系列的颜色
添加...
Color c =(Color)this.lookupSeriesPaint(seriesIndex);
g2.setColor(c);
之前...
g.draw(e1);
还有其他功能...使用代码完成功能查看哪些其他功能可用于系列渲染,名称从lookupSeries........(int seriesindex)
开始
答案 3 :(得分:1)