2D-Grafik JFreeChart mehrere Y-Achsen

TheBohne

Aktives Mitglied
Hallo,

Ich habe bei JFreeChart das Problem, dass die Werte sich nur nach der linken Y-Achse richten. Heißt ich habe 2 Graphen die jeweils eine eigene Einheit haben (Eigene Y-Achse). Jedoch orientieren sich alle Graphen nach der linken Y-Achse.
upload_2016-6-22_10-53-52.png

Hier der Code zu dem kleinen Beispiel:
Java:
package Test;

public class Test {

   public Test() {

     Diagramm diagramm = new Diagramm();

     diagramm.addWertObjekt(
         new WertObjekt(System.currentTimeMillis()/* Wert fuer y Achse */, "TestName",
             "TestVariable1" /*
                      * beide Namen ergeben zusammen einen
                      * eindeutigen Namen
                      */, "m1" /* Masseinheit */,
             1/* Wert auf Y-Achse */));
     diagramm.addWertObjekt(new WertObjekt(System.currentTimeMillis(), "TestName", "TestVariable2", "m2", 100));
   }

   public static void main(String[] args) {
     new Test();
   }
}

Java:
package Test;

import java.awt.Font;
import java.util.HashMap;

import javax.swing.JFrame;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYDataItem;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

public final class Diagramm extends JFrame {

   private HashMap<String, XYSeriesCollection> yAchsen = new HashMap<>();
   private HashMap<String, XYSeries> graphen = new HashMap<>();

   private XYPlot plot;

   public Diagramm() {

     clear();
     this.setVisible(true);
   }

   private void createSwingContent() {
     DateAxis zeitAchse = new DateAxis();
     this.plot.setDomainAxis(zeitAchse);

     JFreeChart chart = new JFreeChart(null, null, plot, false);

     plot.setNoDataMessage("Keine Daten vorhanden");
     plot.setNoDataMessageFont(new Font("SansSerif", Font.BOLD, 22));
     final ChartPanel chartPanel = new ChartPanel(chart);
     chartPanel.setMouseZoomable(true, false);
     chartPanel.setVisible(true);
     this.add(chartPanel);
     this.setVisible(true);
   }

   public void clear() {
     this.yAchsen = new HashMap<>();
     this.graphen = new HashMap<>();
     this.plot = new XYPlot();
     createSwingContent();
   }

   public synchronized void addWertObjekt(WertObjekt wertObjekt) {
     XYSeriesCollection yAchse = this.yAchsen.get(wertObjekt.getMasseinheit());
     if (yAchse == null) {
       yAchse = new XYSeriesCollection();
       XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
       NumberAxis numberAxis = new NumberAxis(wertObjekt.getMasseinheit());

       this.plot.setRangeAxis(this.yAchsen.size(), numberAxis);
       this.plot.setRenderer(this.yAchsen.size(), renderer);
       this.plot.setDataset(this.yAchsen.size(), yAchse);

       this.yAchsen.put(wertObjekt.getMasseinheit(), yAchse);

     }

     XYSeries graph = this.graphen.get(wertObjekt.getEindeutigerName());
     if (graph == null) {
       graph = new XYSeries(wertObjekt.getEindeutigerName());
       yAchse.addSeries(graph);
       this.graphen.put(wertObjekt.getEindeutigerName(), graph);

     }

     graph.add(new XYDataItem(wertObjekt.getZeitStempel().getTime(), wertObjekt.getWert()));
   }

}

Java:
package Test;

import java.text.SimpleDateFormat;
import java.util.Date;

public class WertObjekt {

   public static final String DATUMFORMAT = "yyyy.MM.dd_HH-mm-ss.SSS";

   protected String spsName;
   protected String variablenName;
   protected String masseinheit;
   protected double wert;
   protected Date zeitStempel;
   protected String formatiertesDatum;

   private String eindeutigerName;

   public WertObjekt(long zeitStempel, String spsName, String variablenName, String masseinheit, double wert) {
     this(new Date(zeitStempel), spsName, variablenName, masseinheit, wert);
   }

   public WertObjekt(Date zeitStempel, String spsName, String variablenName, String masseinheit, double wert) {
     this.zeitStempel = zeitStempel;
     this.spsName = spsName;
     this.variablenName = variablenName;
     this.eindeutigerName = this.spsName + "." + this.variablenName;
     this.masseinheit = masseinheit;
     this.wert = wert;
     this.formatiertesDatum = new SimpleDateFormat(DATUMFORMAT).format(zeitStempel);

   }

   public Date getZeitStempel() {
     return this.zeitStempel;
   }

   public String getSpsName() {
     return this.spsName;
   }

   public String getVariablenName() {
     return this.variablenName;
   }

   public String getMasseinheit() {
     return this.masseinheit;
   }

   public double getWert() {
     return this.wert;
   }

   public String getFormatiertesDatum() {
     return this.formatiertesDatum;
   }

   public String parseToString() {
     StringBuffer buffer = new StringBuffer();
     buffer.append(this.formatiertesDatum);
     buffer.append("|");
     buffer.append(this.spsName);
     buffer.append("|");
     buffer.append(this.variablenName);
     buffer.append("|");
     buffer.append(this.masseinheit);
     buffer.append("|");
     buffer.append(this.getWert());
     return buffer.toString();
   }

   public String getEindeutigerName() {
     return eindeutigerName;
   }

}

Wie schaffe ich es nun, dass jeder Graph sich auch nach seiner Y-Achse ausrichtet?

Danke schon mal für eure Hilfe.

Gruß Bohne
 
Zuletzt bearbeitet von einem Moderator:

Harry Kane

Top Contributor
Hallo,
ich finde dein denglish und teilweise auch deine Variablenbezeichnung (XYSeriesCollection yAchse, dabei ist XYSeriesCollection ein dataset und keine Achse, XYSeries graph, dabei ist graph nach meinem Verständnis etwas "grafisches" und kein Objekt mit Daten) etwas verwirrend.
Wenn ich es recht überblicke, fehlt vermutlich nur ein
Java:
this.plot.mapDatasetToRangeAxis(this.yAchsen.size(), this.yAchsen.size())
am Ende des ersten if-Blockes deiner addWertObjekt-Methode.
 

TheBohne

Aktives Mitglied
Danke hat geklappt. Sollte den Code wirklich noch mal komplett auf englisch umschreiben.
Eventuell auch noch einmal über die Namen gedanken machen :D
Trotzdem noch mal vielen Dank.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J JFreeChart - mehrere Y-Achsen AWT, Swing, JavaFX & SWT 2
C JFreeChart X-Achse Werte skalieren, begrenzen, zoomen AWT, Swing, JavaFX & SWT 5
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
C JFreeChart x-Achse mit absteigenden Werten AWT, Swing, JavaFX & SWT 1
K JFreeChart nicht ohne BarChartDemo startklar? AWT, Swing, JavaFX & SWT 5
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 Swing JFreechart X-Achse Tick auslesen AWT, Swing, JavaFX & SWT 13
M Swing JFreechart zoom x-achse neue Werte AWT, Swing, JavaFX & SWT 4
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
D JFreeChart range der Y Achse verändern. 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: nur jeden n-ten Wert auf der X-Achse anzeigen AWT, Swing, JavaFX & SWT 5
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
A JFreeChart: 2 X-Achsen für ein Dataset AWT, Swing, JavaFX & SWT 2
T JFreeChart export Problem AWT, Swing, JavaFX & SWT 4
S JFreeChart Achse immer sichtbar AWT, Swing, JavaFX & SWT 2
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
T Swing Mehrere Ausgaben in JTextArea AWT, Swing, JavaFX & SWT 2
H Mehrere Panels auf JFrame AWT, Swing, JavaFX & SWT 8
S Mehrere Tabellen Zellen gleichzeitig färben AWT, Swing, JavaFX & SWT 5
Apfelbaum2005 Swing JFrame mehrere JPanels mit unterschiedlichen Formen hinzufügen AWT, Swing, JavaFX & SWT 1
K JavaFX unterschiedliche (mehrere Fenster) in seperater Main Methode AWT, Swing, JavaFX & SWT 26
I Scene Builder - mehrere Seiten AWT, Swing, JavaFX & SWT 6
P Swing Mehrere JLabels mit ImageIcon in JPanel lesen AWT, Swing, JavaFX & SWT 1
schoel27 Mehrere JButtons sollen das gleiche Event auslösen AWT, Swing, JavaFX & SWT 2
Z GUI Forms - Mehrere Fenster in einem Projekt AWT, Swing, JavaFX & SWT 18
M mehrere jTextField untereinander AWT, Swing, JavaFX & SWT 1
N Bilder auf Button einfügen und mehrmals ändern (ein Button, mehrere ActionListener) AWT, Swing, JavaFX & SWT 2
B Swing Sudoku: Laden / Speichern von Zahlen aus/in mehrere JTextFields aus/in eine(r) Textdatei AWT, Swing, JavaFX & SWT 9
M JavaFX JavaFX in mehrere Controller AWT, Swing, JavaFX & SWT 21

Ähnliche Java Themen

Neue Themen


Oben