JFreeChart X-Achse Werte skalieren, begrenzen, zoomen

Chefselber

Mitglied
Hallo Gemeinde,

nach langer Suche komme ich einfach nicht weiter,
ich habe einen Graphen angelegt mit mehreren Y-Achsen.
Ich lese die Daten aus einer Datenbank aus.
Aber wie kann ich die x-Achse skalieren?

Anhand, der vielen Datenpunkte kann er sie hier nicht darstellen.
Wie kann ich es realisieren nur jede halbe Stunde oder ganze Stunde eine Anzeige zu visualisieren? (01:00:00, 02:00:00 usw.)


Das hier sind Werte eines ganzen Tages, im 20s Takt.

2023-05-15 20_38_10-Window.png
folgender Code:
Java:
public class Graphen extends ApplicationFrame 
{

    final JDBCCategoryDataset dataset;
 
    public Graphen(final String title)
    {
        super(title);

        final String chartTitel = "PV Daten";
        dataset = Verbinden_thread_Datenbank.DatenAbfrage();

        

        final JFreeChart chart = ChartFactory.createLineChart("PV Daten", "Uhrzeit","Batteriespannung", dataset,PlotOrientation.VERTICAL,true,true,false);
        
              

        final CategoryPlot plot = chart.getCategoryPlot();
  
        // 2.Achse
        final NumberAxis axis2 = new NumberAxis("Temperatur Kessel");
        plot.setRangeAxis(1,axis2);
        plot.setDataset(1,Verbinden_thread_Datenbank.DatenAbfrage2());
        plot.mapDatasetToRangeAxis(1, 1);

        // 3. Achse

        final NumberAxis axis3 = new NumberAxis("Batteriekapazität");
        plot.setRangeAxis(2,axis3);
        plot.setDataset(2,Verbinden_thread_Datenbank.DatenAbfrage3());
        plot.mapDatasetToRangeAxis(2, 2);




    

    //    final CategoryAxis axis = (CategoryAxis) plot.getDomainAxis();
    //  axis.setCategoryLabelPositions(CategoryLabelPositions.UP_90);

    
     //   Stroke stroke = new BasicStroke(3.0f);     
        
  ///      renderer.setSeriesOutlineStroke(1, stroke);


      //   axis.setCategoryLabelPositions(CategoryLabelPositions.DOWN_90);
    //     axis.setMaximumCategoryLabelLines(5);
   //     axis.setPlot(plot);
        final ChartPanel panel = new ChartPanel(chart);
    
        panel.setPreferredSize(new java.awt.Dimension(1200,500));
        panel.setRangeZoomable(true);
        panel.setDomainZoomable(true);
      
   setContentPane(panel);
/*

CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setCategoryLabelPositions(
    CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 2.0));
*/
}


}


Vielleicht weiss jemand Rat.

Danke.
 

Robert Zenz

Top Contributor
Ich habe jetzt gerade nichts konkretes griffbereit, aber was du suchst nennt sich Tick auf der DomainAxis, oder zumindest die Label dazu.
 

Chefselber

Mitglied
Ticks gibts in der CategoryAxis Klasse nicht.

Ich wäre hier auf der Spur:
Wenn das überhaupt zielführend ist?

Java:
 final NumberAxis axis0 = new NumberAxis("Uhrzeit");
         axis0.setRange(range);
        plot.setRangeAxis(0, axis0);

aber wie könnte ich der Range eine Zeit von 00:00:00 - 23:59:00 hinzufügen?
Will ja einen double Wert...
 

Chefselber

Mitglied
Die Skalierung mit der X-Achse funktioniert jetzt.
Benutze jetzt ResultSet und nicht mehr JDBCCategoryPlot.
Jetzt funktioniert es wenigstens mit der richtigen X-Achsen Bezeichnung,
aber leider nicht mehr eine 2. y-Achse für die Temperatur zum darstellen! :(
"plot.setDataset" will ja einen XYDataset als Übergabe und ich habe keine Ahnung wie ich den aus der TimeseriesCollection (TSC) bekomme.

In der TimeSeriesCollection stecken für die 2. TimeSeries genau dieselben Uhrzeitwerte.
2023-05-25 21_47_39-Window.png
Hier die Graphen Klasse

Java:
 public Graphen(final String title)
    {
        super(title);

        final String chartTitel = "PV Daten";
        resultSet = Verbinden_thread_Datenbank.DatenAbfrage3();
        TimeSeriesCollection TSC = new TimeSeriesCollection();
 ////    XYSeriesCollection XYSC = new XYSeriesCollection();
      
        TimeSeries s = Batterieleistung(resultSet);
        TSC.addSeries(s);
        TemperaturKesselResultSet = Verbinden_thread_Datenbank.DatenAbfrage2();
        
        TimeSeries s2 = TemperaturKessel(resultSet);
        TSC.addSeries(s2);
//// 2. TimeSeries???? mit gleicher X-Achse


        final JFreeChart chart = ChartFactory.createTimeSeriesChart("PV Daten", "Uhrzeit","Batterieleistung", TSC);   ///new TimeSeriesCollection(s)

        SimpleDateFormat f = new SimpleDateFormat("HH:mm:ss");
        f.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));

        XYPlot plot = (XYPlot) chart.getPlot();
        XYLineAndShapeRenderer r = (XYLineAndShapeRenderer) plot.getRenderer();
      
        final NumberAxis axis3 = new NumberAxis("Temperatur Kessel");
        plot.setRangeAxis(2,axis3);
     // plot.setDataset(2,s2);
        r.setDefaultShapesVisible(true);
        DateAxis domain = (DateAxis) plot.getDomainAxis();
        domain.setDateFormatOverride(f);
        domain.setVerticalTickLabels(true);

Hier eine Methode für die TimeSeries:

Code:
private TimeSeries Batterieleistung(ResultSet resultSet1)
{
     TimeSeries series = new TimeSeries("Batterieleistung");
     SimpleDateFormat f = new SimpleDateFormat("HH:mm:ss");
    
    
     try {
           int Spalten = resultSet1.getMetaData().getColumnCount();
           System.out.println("Spalten: " + Spalten);
      
           for(int i=1 ; i<=Spalten; i++)   {     
                System.out.print( resultSet1.getMetaData().getColumnLabel(i));
      
           }
           System.out.println();
           System.out.println("-------------------------------------------------------------");
          
           String[] daten= new String[2];
          
           String doppelt=null;

           while (resultSet1.next())
           {
               for(int j=1 ; j<=Spalten; j++)
               {
                   daten[j-1] = resultSet1.getString(j);
                   System.out.print( resultSet1.getString(j) + " ");
                  
               }
           System.out.println(" ");
           if (daten[0].equals(doppelt))
           {
                 System.out.println("DOPPELT");
            
           }
           else
           {
               series.add(new Second(f.parse(daten[0])), Double.parseDouble(daten[1]));
           }
           doppelt = daten[0];
          
           }
     } catch (Exception e) {
          e.printStackTrace();
    }
     return series;
}

Hier die Methode zum Abholen der Datenbankdaten:

Code:
public static ResultSet DatenAbfrage2()
{

     String Befehl = "SELECT uhrzeit, temperaturkessel FROM pvdaten WHERE (uhrzeit BETWEEN '00:00:00' AND '23:55:00') AND          datum='20230524'";     // datum BETWEEN '20230508 AND '20230509'";

     ResultSet rs = null;
     Statement stat;
     try {
          stat = con.createStatement();
          rs = stat.executeQuery(Befehl);
        
     } catch (Exception e) {
      
     }
 
     return rs;
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Swing JFreechart zoom x-achse neue Werte AWT, Swing, JavaFX & SWT 4
C JFreeChart x-Achse mit absteigenden Werten AWT, Swing, JavaFX & SWT 1
M Swing JFreechart X-Achse Tick auslesen AWT, Swing, JavaFX & SWT 13
D JFreeChart range der Y Achse verändern. AWT, Swing, JavaFX & SWT 1
R JFreeChart: nur jeden n-ten Wert auf der X-Achse anzeigen AWT, Swing, JavaFX & SWT 5
S JFreeChart Achse immer sichtbar AWT, Swing, JavaFX & SWT 2
H JFreeChart BarDiagramm Balken der gleichen Serie unterschiedliche Farbe zuordnen AWT, Swing, JavaFX & SWT 2
H JFreeChart - DemoDataSetFactory Probleme AWT, Swing, JavaFX & SWT 1
H JFreeChart Charts überlagern AWT, Swing, JavaFX & SWT 2
K JFreeChart nicht ohne BarChartDemo startklar? AWT, Swing, JavaFX & SWT 5
T 2D-Grafik JFreeChart mehrere Y-Achsen AWT, Swing, JavaFX & SWT 2
D Swing JFreeChart Crosshair Label - setPreferredSize oder ähnliches, aber wo ? AWT, Swing, JavaFX & SWT 1
N jFreeChart einzelne Punkte anwählen und Formatieren AWT, Swing, JavaFX & SWT 0
B JFreeChart Gantt Höhe Tasks AWT, Swing, JavaFX & SWT 1
V JFreeChart: Tooltip auf Knopfdruck anzeigen AWT, Swing, JavaFX & SWT 2
V JFreechart: In Linechart Linien einzeichnen und Bereiche färben AWT, Swing, JavaFX & SWT 4
M In JFreeChart Geraden erzeugen AWT, Swing, JavaFX & SWT 11
M JFreechart Zoom out AWT, Swing, JavaFX & SWT 2
M JFreeChart neu zeichnen sich Wenn Jtable sich ändert AWT, Swing, JavaFX & SWT 5
Z Diagramm mit jfreechart quadratisch erstellen AWT, Swing, JavaFX & SWT 1
G JFreeChart - SetSeriesColor Problem AWT, Swing, JavaFX & SWT 3
K 2D-Grafik JFreeChart plot.setBackgroundImage() AWT, Swing, JavaFX & SWT 1
K 2D-Grafik JFreeChart DateAxis AWT, Swing, JavaFX & SWT 9
T Event Handling JFreeChart Update AWT, Swing, JavaFX & SWT 2
A JFreeChart BarChart invertierte anzeige oder werte bereich von-bis AWT, Swing, JavaFX & SWT 4
Farbtopf Live update JFreeChart AWT, Swing, JavaFX & SWT 3
H Swing JfreeChart aktualisieren - mit daten aus thread AWT, Swing, JavaFX & SWT 3
D JFreeChart - aktuelle code beispiele AWT, Swing, JavaFX & SWT 11
M JFreeChart in ein File schreiben (bzw. JFrame in ein File Schreiben) AWT, Swing, JavaFX & SWT 2
A JFreeChart in GUI AWT, Swing, JavaFX & SWT 3
E JFreeChart: Timeseries-Chart und Area-Chart "überlappen" lassen AWT, Swing, JavaFX & SWT 6
B JFreeChart-Erweiterungen AWT, Swing, JavaFX & SWT 4
E JFreeChart in einer dynamischen Aufzeichnung neue Serien hinzufügen? AWT, Swing, JavaFX & SWT 7
I XML - JFreeChart AWT, Swing, JavaFX & SWT 15
N Dynamische JFreechart updated UI nicht AWT, Swing, JavaFX & SWT 5
S JFreeChart - Schriftgröße der Legende AWT, Swing, JavaFX & SWT 2
O Swing JFreechart subtitle formatieren AWT, Swing, JavaFX & SWT 3
N JFreeChart: Plot soll mit skalieren AWT, Swing, JavaFX & SWT 5
R JFreeChart Plots AWT, Swing, JavaFX & SWT 6
J JFreechart spezielles Balkendiagramm AWT, Swing, JavaFX & SWT 2
R JFreeChart aktualisieren wenn sich die Ausgangsdaten ändern AWT, Swing, JavaFX & SWT 8
T JFreeChart Linine einzeichnen AWT, Swing, JavaFX & SWT 2
M JFreeChart Ausrichtung der Balken AWT, Swing, JavaFX & SWT 2
R jFreeChart in eine NetBeans Projekt integrieren AWT, Swing, JavaFX & SWT 24
D JFreeChart Breite (width) ändern AWT, Swing, JavaFX & SWT 6
A Swing JFreeChart, Gantt, Schichtplan AWT, Swing, JavaFX & SWT 3
R JFreeChart Skalierung zur Laufzeit ändern AWT, Swing, JavaFX & SWT 7
F Wie lade ich eine CategoryDataset aus XML ins JFreeChart? AWT, Swing, JavaFX & SWT 9
J JFreeChart - mehrere Y-Achsen AWT, Swing, JavaFX & SWT 2
A JFreeChart: 2 X-Achsen für ein Dataset AWT, Swing, JavaFX & SWT 2
T JFreeChart export Problem AWT, Swing, JavaFX & SWT 4
D JFreechart maximalangezeigter Wertebereich AWT, Swing, JavaFX & SWT 3
B AWT [JFreeChart] malt nicht so wie ich will :-( AWT, Swing, JavaFX & SWT 2
B JFreeChart Balkendiagramm ActionEvent AWT, Swing, JavaFX & SWT 2
L Labels sichtbar - JFreeChart AWT, Swing, JavaFX & SWT 5
A Schachbrettartiges Diagramm mit JFreeChart AWT, Swing, JavaFX & SWT 4
E JFreeChart AWT, Swing, JavaFX & SWT 2
L Gantt Chart - JFreeChart AWT, Swing, JavaFX & SWT 5
K JFreeChart im JScrollPane ausblenden AWT, Swing, JavaFX & SWT 2
L JFreeChart Labelrotation AWT, Swing, JavaFX & SWT 2
L JFreeChart Farbe von Balken AWT, Swing, JavaFX & SWT 5
L JFreeChart Balkenanordnung AWT, Swing, JavaFX & SWT 10
L JFreeChart Achsenskalierung AWT, Swing, JavaFX & SWT 4
L JFreeChart - Dataset befüllen AWT, Swing, JavaFX & SWT 2
L JFreeChart - Line Shapes AWT, Swing, JavaFX & SWT 15
N JFreeChart - Basics AWT, Swing, JavaFX & SWT 2
L NullPointerException JFreeChart AWT, Swing, JavaFX & SWT 10
L JFreeChart - Legende vertikal AWT, Swing, JavaFX & SWT 5
L JFreeChart - Linienstärke einstellen AWT, Swing, JavaFX & SWT 2
L JFreeChart Einstellungen AWT, Swing, JavaFX & SWT 22
L JFreeChart - Gitterfarbe schwarz AWT, Swing, JavaFX & SWT 4
L JFreeChart StackedBar + Line-Chart kombinieren AWT, Swing, JavaFX & SWT 4
L JFreeChart - Performance bei PNG-Erstellung AWT, Swing, JavaFX & SWT 5
L JFreeChart - Legende beliebig positionieren AWT, Swing, JavaFX & SWT 16
G JFreechart Balken einfärben AWT, Swing, JavaFX & SWT 6
F Probleme mit NumberAxis bei JFreeChart AWT, Swing, JavaFX & SWT 5
G jfreechart (Diagramm speichern mit ein vorgegebenen Namen) AWT, Swing, JavaFX & SWT 6
S JFreeChart neu zeichnen sich das Datenset geändert hat. AWT, Swing, JavaFX & SWT 4
K JFreeChart Eigentschaften des Charts ändern AWT, Swing, JavaFX & SWT 8
G JFreeChart und das updaten AWT, Swing, JavaFX & SWT 7
G Ausser Jfreechart, Chart Programme? AWT, Swing, JavaFX & SWT 11
S Dimensionen JFreeChart AWT, Swing, JavaFX & SWT 5
S JFreeChart Stufendiagramm AWT, Swing, JavaFX & SWT 2
H Problem beim zeichen eines TimeSeriesChart mit jfreechart AWT, Swing, JavaFX & SWT 5
K JFreeChart: Platz zwischen Balken AWT, Swing, JavaFX & SWT 3
M JFreeChart Handbuch? AWT, Swing, JavaFX & SWT 8
P JFreeChart - TimeSeriesDiagram AWT, Swing, JavaFX & SWT 2
B JavaFX LineChart mit Date-x-Achse AWT, Swing, JavaFX & SWT 1
B JavaFX Bild um die eigene Achse drehen lassen AWT, Swing, JavaFX & SWT 0
H JavaFX LineChart y-Achse invertieren AWT, Swing, JavaFX & SWT 2
S JavaFX Drehen um eigene Achse AWT, Swing, JavaFX & SWT 2
G Swing resizeable aber nur y-Achse nur wie? AWT, Swing, JavaFX & SWT 5
T Processing: Bild auf X-Achse bewegen AWT, Swing, JavaFX & SWT 4
R JPanel - zeichnen in skalierten Bereich - Linie (X-Achse) nicht sichtbar AWT, Swing, JavaFX & SWT 11
D ObservableList Werte hinzufügen AWT, Swing, JavaFX & SWT 7
missy72 JavaFX TableView / TableColumn / ObservableList / zwei Werte in einer Zelle AWT, Swing, JavaFX & SWT 2
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9
P Adressbuch Werte speichern AWT, Swing, JavaFX & SWT 21
Blender3D Falsche Werte mit Java Toolkit Screensize AWT, Swing, JavaFX & SWT 4
B JavaFX JavaFX TableView PropertyValueFactory für Werte aus HashMap AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben