在JavaFX应用程序中设置JFreeChart极坐标图的角度刻度标签

时间:2018-01-19 06:50:54

标签: javafx-8 jfreechart

我试图在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形而不是整圆形,请告诉我。不是很关键,但是当我们'关于这个话题,我以为我会把它丢进去!)

先谢谢。

达伦。

1 个答案:

答案 0 :(得分:2)

感谢trashgod指向类似question的指针,我能解决这个问题。

基本上我现在创建一个轴,小心导入org.jfree.chart.axis.ValueAxisorg.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); 来显示此图表。

希望这可以帮助处于类似情况的其他人!