在GRAL中绘制多个图

时间:2015-04-02 05:09:03

标签: java swing graph plot

我目前正在使用库GRAL来绘制线条和数据。由于某些原因,我在同一XY图上绘制多条线图时遇到问题。这是我的代码:

import java.awt.Color;
import javax.swing.JFrame;
import de.erichseifert.gral.data.DataTable;
import de.erichseifert.gral.plots.XYPlot;
import de.erichseifert.gral.plots.lines.DefaultLineRenderer2D;
import de.erichseifert.gral.plots.lines.LineRenderer;
import de.erichseifert.gral.plots.points.PointRenderer;
import de.erichseifert.gral.ui.InteractivePanel;

public class GraphTest extends JFrame {
    public GraphTest(double x1, double y1) {

        //SETS DEFAULTS FOR JFRAME
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(600, 400);

        //CREATES A DATA TABLE AND RUNS A LOOP TO INCREMENTALLY PLOT OUT POINTS OF A SINE CURVE ON THE STEP .25
        DataTable data = new DataTable(Double.class, Double.class);
        for (double x = -5.0; x <= 5.0; x+=0.25) {
            double y = 5.0*Math.sin(x);
            data.add(x, y);
        }

        //PLOT OUT DATA AND SET XYPLOT IN JFRAME, THEN CONNECT LINES AND CHANGE COLORS
        XYPlot plot = new XYPlot(data);
        getContentPane().add(new InteractivePanel(plot));
        LineRenderer lines = new DefaultLineRenderer2D();
        plot.setLineRenderer(data, lines);
        Color color = new Color(0.0f, 0.3f, 1.0f);
        plot.getPointRenderer(data).setColor(color);
        plot.getLineRenderer(data).setColor(color);

        //PLOT OUT A POINT (4,5) ON THE SAME GRAPH AS THE SINE GRAPH
        DataTable data2 = new DataTable(Double.class, Double.class);
        data2.add(x1, y1);
        XYPlot plot2 = new XYPlot(data2);
        //getContentPane().add(new InteractivePanel(plot2));
        //plot2.setLineRenderer(data2, lines);
        //plot2.getPointRenderer(data2).setColor(color);
        //plot2.getLineRenderer(data2).setColor(color);
    }

    public static void main(double x1, double y1) {
        GraphTest frame = new GraphTest(x1, y1);
        frame.setVisible(true);
    }
}

该程序运行良好,但我取消注释以下行,使其在同一图上绘制两个图:

    //getContentPane().add(new InteractivePanel(plot2));
    //plot2.setLineRenderer(data2, lines);
    //plot2.getPointRenderer(data2).setColor(color);
    //plot2.getLineRenderer(data2).setColor(color);

JFrame只是空白,程序似乎冻结了。我是图书馆GRAL的初学者(我今天刚开始使用它),所以请原谅我缺乏专业知识。此外,仅供参考,此代码通过同一个包中的命令运行,但另一个类使用以下代码:

GraphTest.main(4,5);

问题是我真的不确定如何在同一个XY图上绘制两个图(正弦曲线和一个点)。最后,这是当前代码运行时的图像:

enter image description here

1 个答案:

答案 0 :(得分:1)

这是一个老问题,但这是我如何解决同样的问题:

在创建XY绘图的部分,只需添加更多数据源。

XYPlot plot = new XYPlot(data);

XYPlot plot = new XYPlot(data, moreData);

确保单独设置两个数据点的样式。