Почему JFreeCharts правильно соединяет точки в моем графике xy-line? - PullRequest
1 голос
/ 13 мая 2010

Каждая буква A, T, G, C представляет направление для построения графика. В частности, «A» означает движение вправо, «T» - движение вниз, «C» - движение вверх и «G» - движение влево Когда апплет читает A, T, C, он правильно строит график. Однако, когда я строю график G, график испортился. Когда я ввожу «ACACACA», график похож на восходящую лестницу. Когда я ввожу «gtgtgt», график должен выглядеть как лестница, но вместо этого он выглядит как молния.

import java.applet.Applet;
import java.awt.Button;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Scanner;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

public class If_Graph extends Applet implements ActionListener {

    Panel panel;
    TextArea textarea, outputArea;
    Button move;
    String thetext;
    Scanner reader = new Scanner(System.in);
    String thetext2;
    int size, p, q;
    int x, y;

    public void init() {

        setSize(500, 500); //set size of applet

        panel = new Panel();
        add(panel);
        setVisible(true);
        textarea = new TextArea(10, 20);
        add(textarea);

        move = new Button("Graph");
        move.addActionListener(this);
        add(move);
    }

    public void actionPerformed(ActionEvent e) {
        XYSeries series = new XYSeries("DNA Walk");

        x = 0;
        y = 0;
        series.add(x, y);

        if (e.getSource() == move) {
            thetext = textarea.getText(); //the text is the DNA bases pasted
            thetext = thetext.replaceAll(" ", ""); //removes spaces
            thetext2 = "";

            for (int i = 0; i < thetext.length(); i++) {
                char a = thetext.charAt(i);

                switch (a) {
                    case 'A': //moves right
                        x += 1;
                        y += 0;
                        series.add(x, y);
                        break;
                    case 'a':
                        x += 1;
                        y += 0;
                        series.add(x, y);
                        break;
                    case 'C': //moves up
                        x += 0;
                        y += 1;
                        series.add(x, y);
                        break;
                    case 'c':
                        x += 0;
                        y += 1;
                        System.out.println(x + "," + y);
                        series.add(x, y);
                        break;
                    case 'G': //move left
                        x -= 1;
                        y += 0;
                        series.add(x, y);
                        System.out.println("G is: " + x + "," + y);
                        break;
                    case 'g':
                        x -= 1;
                        y += 0;
                        System.out.println("g is: " + x + "," + y);
                        series.add(x, y);
                        break;
                    case 'T': //move down
                        x += 0;
                        y -= 1;
                        series.add(x, y);
                        System.out.println("T is: " + x + "," + y);
                        break;
                    case 't':
                        x += 0;
                        y -= 1;
                        series.add(x, y);
                        System.out.println("t is: " + x + "," + y);
                        break;
                    default: // series.add(0,0);
                        break;
                }
            }
            XYDataset xyDataset = new XYSeriesCollection(series);
            JFreeChart chart = ChartFactory.createXYLineChart(
                "DNA Random Walk", "", "", xyDataset,
                PlotOrientation.VERTICAL, true, true, false);
            ChartFrame frame1 = new ChartFrame("DNA Random Walk", chart);
            frame1.setVisible(true);
            frame1.setSize(300, 300);
            outputArea.setText(thetext2);
        }
    }
}

1 Ответ

0 голосов
/ 13 мая 2010

Обратите внимание, что XYSeries позволяет «И сортировку, и дубликаты по умолчанию можно изменить в конструкторе». Итак, попробуйте это:

XYSeries series = new XYSeries("DNA Walk", false, true);

альтернативный текст http://i43.tinypic.com/16ab03p.png

Кроме того, рассмотрим этот вариант формы оператора switch:

switch (a) {
    case 'A': case 'a': //moves right
        x += 1;
        y += 0;
        series.add(x, y);
        System.out.println("A is: " + x + "," + y);
        break;
    case 'C': case 'c': //moves up
    ...
...