【问题标题】:how to make only one data set to be plotted with lines using JFreeChart?如何使用 JFreeChart 只用线条绘制一个数据集?
【发布时间】:2016-04-03 06:23:03
【问题描述】:

我创建了一个绘制两个数据集的图表。 我试图将其中一个绘制为点,另一个绘制为线。 但它不工作。这是图表的图片:

这是我生成图表的代码:

private ChartPanel createChartPanel() {
        JFreeChart chart = ChartFactory.createScatterPlot(
            "", "Longitude [deg]", "Latitude [deg]", createSampleData(),
            PlotOrientation.VERTICAL, true, true, false);
        XYPlot xyPlot = (XYPlot) chart.getPlot();
        XYLineAndShapeRenderer render = new XYLineAndShapeRenderer(true, true);
            xyPlot.setRenderer(0, render);

            XYLineAndShapeRenderer render2 = new XYLineAndShapeRenderer(false, true);
            xyPlot.setRenderer(1, render2);
        return new ChartPanel(chart){
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(768, 576);
            }
        };
    }

    private XYDataset createSampleData() {
        XYSeriesCollection dataset = new XYSeriesCollection();
            XYSeries Line_end_points = new XYSeries("Line end points");
            Line_end_points.add(new XYDataItem(startP.getX(), startP.getY()));
            Line_end_points.add(new XYDataItem(endP.getX(), endP.getY()));
            dataset.addSeries(Line_end_points);
        dataset.addSeries(pnts);       
        return dataset;
    }

如您所见,我正在创建两个不同的渲染器,但两个数据集都绘制为线条。我错过了什么?任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 至少需要两个数据集,每个渲染器一个;请编辑您的问题以包含一个minimal reproducible example,以显示您修改后的方法。

标签: java dataset jfreechart scatter-plot


【解决方案1】:

解决了我的问题。修改ChartPanel()方法中的部分代码:

private ChartPanel createChartPanel() {
        JFreeChart chart = ChartFactory.createScatterPlot(
            "", "Longitude [deg]", "Latitude [deg]", createSampleData(),
            PlotOrientation.VERTICAL, true, true, false);
        XYPlot xyPlot = (XYPlot) chart.getPlot();
            XYLineAndShapeRenderer render = new XYLineAndShapeRenderer();
            render.setSeriesLinesVisible(0, true);
            render.setSeriesShapesVisible(0, true);
            render.setSeriesLinesVisible(1, false);
            render.setSeriesShapesVisible(1, true);
            xyPlot.setRenderer(render);
        return new ChartPanel(chart){
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(768, 576);
            }
        };
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    相关资源
    最近更新 更多