我试图在JavaFX应用程序中使用JFreeChart的Polar Chart。到目前为止,我已经能够创建图表并让它绘制数据。
我现在正试图将角度刻度标签设置为显示-90度到+90而不是0到360.
首先,我创建了一个我需要的角度和值的XYDataSet。然后我创建一个JFreeChart,从中获取绘图,设置各种属性,然后使用ChartViewer显示它。如下所示。
XYDataSet data = createDataSet();
final JFreeChart chart = ChartFactory.createPolarChart("myTitle",dataSet,false,false,false);
final PolarPlot plot = (PolarPlot) chart.getPlot();
plot.setAngleOffset(0);
plot.setCounterClockwise(true);
final DefaultPolarItemRenderer renderer = (DefaultPolarItemRenderer) plot.getRenderer();
renderer.setShapesVisible(false);
renderer.setConnectFirstAndLastPoint(false);
ChartViewer viewer = new ChartViewer(chart);
然后我可以将此查看器作为子项添加到要显示的JavaFX窗格中。
经过一些在线研究后,我找到了一种方法,用下面的方法覆盖极坐标图的刻度标签;
final PolarPlot plot = new PolarPlot() {
@Override
protected List refreshAngleTicks(){
List ticks = new ArrayList();
ticks.add(new NumberTick(-90, "-90", TextAnchor.TOP_LEFT, TextAnchor.TOP_LEFT, 0));
ticks.add(new NumberTick(-60, "-60", TextAnchor.TOP_LEFT, TextAnchor.TOP_LEFT, 0));
ticks.add(new NumberTick(-30, "-30", TextAnchor.TOP_LEFT, TextAnchor.TOP_LEFT, 0));
ticks.add(new NumberTick(ZERO, "0", TextAnchor.TOP_LEFT, TextAnchor.TOP_LEFT, 0));
ticks.add(new NumberTick(30, "30", TextAnchor.TOP_LEFT, TextAnchor.TOP_LEFT, 0));
ticks.add(new NumberTick(60, "60", TextAnchor.TOP_LEFT, TextAnchor.TOP_LEFT, 0));
ticks.add(new NumberTick(90, "90", TextAnchor.TOP_LEFT, TextAnchor.TOP_LEFT, 0));
return ticks;
}
};
当我没有创建新的PolarPlot时,有没有办法可以使用它,而是从chart.getPlot()方法获取它?
如果您需要任何进一步的信息,请询问。
作为旁注,如果有一种简单的方法可以移除极地图的整个左侧(即具有D形而不是整圆形,请告诉我。不是很关键,但是当我们'关于这个话题,我以为我会把它丢进去!)
先谢谢。
达伦。
答案 0 :(得分:2)
感谢trashgod指向类似question的指针,我能解决这个问题。
基本上我现在创建一个轴,小心导入org.jfree.chart.axis.ValueAxis
和org.jfree.chart.axis.NumberAxis
,而不是JavaFX,并手动创建渲染器和PolarPlot
,而不是使用{{ 1}}方法,如下所示。这允许我在创建ChartFactory.createPolarChart()
时覆盖refreshAngleTicks()
方法。
PolarPlot
然后,我可以使用与之前相同的ValueAxis ax = new NumberAxis();
ax.setTickLabelsVisible(false);
DefaultPolarItemRenderer renderer = new DefaultPolarItemRenderer();
PolarPlot plot = new PolarPlot(dataset, ax, renderer){
@Override
protected List refreshAngleTicks(){
List ticks = new ArrayList();
ticks.add(new NumberTick(-90, "-90", TextAnchor.TOP_LEFT, TextAnchor.TOP_LEFT, 0));
.....etc....
return ticks;
}
};
plot.setAngleOffset(0);
plot.setCounterClockwise(true);
renderer.setShapesVisible(false);
JFreeChart chart = new JFreeChart("my title", JFreeChart.DEFAULT_TITLE_FONT, plot, false);
来显示此图表。
希望这可以帮助处于类似情况的其他人!