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.
Hier der Code zu dem kleinen Beispiel:
Wie schaffe ich es nun, dass jeder Graph sich auch nach seiner Y-Achse ausrichtet?
Danke schon mal für eure Hilfe.
Gruß Bohne
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.
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: