2016-03-29 6 views
0

Ich habe einen Code geschrieben, der Koordinaten auf einen Zeichnungsbereich (JPanel) darstellt. hier ist mein Code-Klasse:Wie füge ich eine Skala oder Achse einem Streudiagramm hinzu?

class POSCanvas extends JPanel { 
    private XYSeries pnts = new XYSeries("Position"); 

    public POSCanvas() { 
     final ChartPanel chartPanel = createDemoPanel(); 
     this.add(chartPanel, BorderLayout.CENTER); 
    } 

    private void update(double xnew, double ynew) { 
     pnts.add(new XYDataItem(xnew, ynew)); 
    } 

    private ChartPanel createDemoPanel() { 
     JFreeChart jfreechart = ChartFactory.createScatterPlot(
      "", "X", "Y", createSampleData(), 
      PlotOrientation.VERTICAL, true, true, false); 
     XYPlot xyPlot = (XYPlot) jfreechart.getPlot(); 
     XYItemRenderer renderer = xyPlot.getRenderer(); 
     NumberAxis domain = (NumberAxis) xyPlot.getDomainAxis(); 
     int minX = (int)pnts.getMinX(); int maxX = (int)pnts.getMaxX(); 
     if (minX < maxX){domain.setRange(minX, maxX);} 
     domain.setTickUnit(new NumberTickUnit(1)); 
     NumberAxis range = (NumberAxis) xyPlot.getRangeAxis(); 
     range.setTickUnit(new NumberTickUnit(1)); 
     return new ChartPanel(jfreechart){ 
      @Override 
      public Dimension getPreferredSize() { 
       return new Dimension(640, 480); 
      } 
     }; 
    } 

    private XYDataset createSampleData() { 
     XYSeriesCollection xySeriesCollection = new XYSeriesCollection(); 
     xySeriesCollection.addSeries(pnts); 
     return xySeriesCollection; 
    } 
} 

Das Problem ist, dass ich nicht den Bereich für die X-Achse hinzuzufügen, können zu sein scheinen. Hier ist die Ausgabe: enter image description here

Ich verwende die domain.setRange() Methode, aber es funktioniert nicht. Irgendeine Idee, wie man es repariert? Jede Hilfe würde geschätzt werden; Danke.

Antwort

2

ChartFactory.createScatterPlot() Versuchen, die „verwendet eine XYPlot Instanz als die Handlung, mit einem NumberAxi s für die Domain-Achse, ein NumberAxis als der Bereichsachse und ein XYLineAndShapeRenderer als Renderer.“ Mehrere vollständige Beispiele werden gezeigt here, und die Fabrik source ist in der Verteilung enthalten.

image

+0

Ich habe zu JFreechart gewechselt. Es erstellt die Y-Achse, erstellt aber nicht die X-Achse. irgendeine Idee warum ist das? –

+1

Was passiert, wenn Sie 'Domäne' nicht ändern? A [mcve] würde das Testen erleichtern. –

+0

Es [sieht] (http://stackoverflow.com/q/36287510/230513) wie Sie es funktionierte; Sie können [Ihre eigene Frage beantworten] (http://meta.stackoverflow.com/q/17463/163188), oder Sie können diese Antwort akzeptieren, indem Sie auf das [leere Häkchen] klicken (http: //meta.stackoverflow. com/a/5235/163188) auf der linken Seite. – trashgod