XML - JFreeChart

internet

Top Contributor
Hallo zusammen,
Ich befasse mich derzeit mit JFreeChart:
Ich habe eine XML – Datei, die ich einlesen möchte -> funktioniert auch.
Jedoch muss ich nun noch definieren was auf der X und Y – Achse stehen soll.
Nun möchte ich durch einen XPath Ausdruck nur bestimmte Datensätze anzeigen lassen.
Insgesamt sollen als Ergebnis 8 Datensätze geliefert.
Wie kann ich das machen?
Hier mein bisheriger Code:

Java:
import java.awt.Color;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.xml.DatasetReader;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

public class JfreeChartTest extends ApplicationFrame {

    public JfreeChartTest(final String title) {
    	super(title);
    	
    	
        // create a dataset...
        CategoryDataset dataset = null;
        final URL url = getClass().getResource("file.xml");
       
        try {
            final InputStream in = url.openStream();
            dataset = DatasetReader.readCategoryDatasetFromXML(in);
        }
        catch (IOException ioe) {
            System.out.println(ioe.getMessage());
        }
        
        // create the chart...
        final JFreeChart chart = ChartFactory.createBarChart(
            "Bar Chart",  // chart title
            "Domain", 
            "Range",
            dataset,      // data
            PlotOrientation.VERTICAL,
            true,         // include legend
            true,
            false
        );
        // set the background color for the chart...
        chart.setBackgroundPaint(Color.yellow);
        
        // add the chart to a panel...
        final ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
        setContentPane(chartPanel);
    }
 
    public static void main(final String[] args) {
        final JfreeChartTest demo = new JfreeChartTest("XML Bar Chart Demo");
        demo.pack();
        RefineryUtilities.centerFrameOnScreen(demo);
        demo.setVisible(true);
    }
  }
 
Zuletzt bearbeitet:
S

SlaterB

Gast
mit 300 Postings verwendest du keine Java-Tags?

dein Programm enthält rein gar nichts zur XML-Datei und XPath, dabei scheint das ein viel größerer Teil deiner Frage zu sein,
auf JFreeChart kannst du vorerst komplett verzichten, lies das XML ein wie auch immer und sammle die Werte in einer Liste
oder gib sie mit System.out.println() aus,

dazu hast du jetzt also absolut nichts, nicht mal die XML-Datei, man weiß nur dass du 8 Datensätze haben willst,
ist das ein Ansatz?
-> was aber nicht heißen soll dass du nur mehr von der Aufgabe und vielleicht noch das XML postest,
was hast du an XPath-Code & co?

edit:
ok, es gibt ja tatsächlich doch
> dataset = DatasetReader.readCategoryDatasetFromXML(in);
hmm, was steht denn im dataset drin, schon nach Auslesen/ Ändern geschaut?
 

internet

Top Contributor
Das geht doch mit Sicherheit einfacher ??
Man muss doch die Datasets definieren, also bestimmen was auf der X bzw. Y Koordinate liegt.
Um nur bestimmte Datensätze anzuzeigen, verwende ich XPath.
 

Final_Striker

Top Contributor
Im Dataset befinden sich die Werte die in den Digrammen angezeigt werden. Wenn du nicht alle Werte brauchst kannst du diese ja einfach wieder aus dem Dataset entfernen, dann tauche diesem nicht mehr in dem Digramm auf.
 

internet

Top Contributor
Du meinst:
Durch folgenden Code bekomme ich alle Werte:
final InputStream in = url.openStream();
dataset = DatasetReader.readCategoryDatasetFromXML(in);

Durch einen XPath – Ausdruck schränke ich ja die Werte ein. Also ich will nur alle Städte ausgeben, die eine Einwohnerzahl zwischen 2 und 5 Millionen haben.
Das heißt ich brauche ja eine XPath – Abfrage ?
Aber generell muss ich ja noch angeben, was auf der X und Y – Achse stehen soll ?

Das ist das Problem, das ich habe. Ein Diagramm gibt es mir aus, jedoch mit keinen Linien.
 

Final_Striker

Top Contributor
Java:
DatasetReader.readCategoryDatasetFromXML(in);

Ich hab den DatasetReader noch nie verwendet, kann mir auch nicht vorstellen, dass er auf deiner XML Datei das von dir gewünschte Dataset zusammenstellt.

Würde dir empfehlen die XML-Datei selbst zu parsen und das Dataset manuell zusammenzubauen.
Ist auch nicht so schwer. Dann kannst du auch XPath verwenden.
 

internet

Top Contributor
Ok, ich habe das ganze nun bearbeitet.
Nun bekomme ich auch die Knoten, also das Ergebnis der XPath - Abfrage.
Wie kann ich jetzt aber noch die Einwohnerzahl auf die Y - Achse machen und der Ländername auf die X - Achse?

Hier der Code:

Java:
import java.awt.Color;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.*;
import javax.xml.xpath.*;
import javax.xml.parsers.*;
import java.io.IOException;
import org.xml.sax.SAXException;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.xml.DatasetReader;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

/**
 * A simple demonstration application showing how to create a bar chart using
 * data from an XML data file.
 * 
 */
public class JfreeChartTest extends ApplicationFrame {

	public JfreeChartTest(final String title)
			throws ParserConfigurationException, SAXException, IOException,
			XPathExpressionException {
		super(title);

		// ---- Parse XML file ----
		DocumentBuilder db = DocumentBuilderFactory.newInstance()
				.newDocumentBuilder();
		Document doc = db.parse(getClass().getResourceAsStream(
				"mondial-europe.xml"));

		// ---- Get the root element ----
		System.out.println("Root " + doc.getDocumentElement().getNodeName());

		// ---- Get list of nodes to given MainButton ----
		NodeList population = doc.getElementsByTagName("population");
		System.out.println("Population " + population);

		XPath xpath = XPathFactory.newInstance().newXPath();

		// XPath Query for showing all nodes value
		XPathExpression expr = xpath
				.compile("/mondial/country[population > '2000000' and population < '5000000']");

		// Create Dataset
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
	
		Object result = expr.evaluate(doc, XPathConstants.NODESET);
		NodeList nodes = (NodeList) result;
		for (int i = 0; i < nodes.getLength(); i++) {
			System.out.println(nodes.item(i).getNodeValue());
		}
		
		// create the chart...
		final JFreeChart chart = ChartFactory.createBarChart("Bar Chart", // chart
																			// title
				"Domain", "Range", dataset, // data
				PlotOrientation.VERTICAL, true, // include legend
				true, false);
		// set the background color for the chart...
		chart.setBackgroundPaint(Color.yellow);

		// add the chart to a panel...
		final ChartPanel chartPanel = new ChartPanel(chart);
		chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
		setContentPane(chartPanel);
	}

	public static void main(final String[] args)
			throws ParserConfigurationException, SAXException, IOException,
			XPathExpressionException {
		final JfreeChartTest demo = new JfreeChartTest("XML Bar Chart Demo");
		demo.pack();
		RefineryUtilities.centerFrameOnScreen(demo);
		demo.setVisible(true);
	}
}
 
S

SlaterB

Gast
statt
> System.out.println(nodes.item(i).getNodeValue())
in der Schleife musst du die aktuellen Daten eben eintragen,
was beim dataset aufzurufen ist sollte aus den Beispielen klar sein, oder ausprobieren,

> nodes.item(i).getNodeValue()
klingt auch noch nicht ganz nach zwei separaten Werten (Ländername, Einwohnerzahl), was exakt erhälst du als Ausgabe?
aber auch das sollte sich über Methoden einzeln abfragen lassen oder notfalls den String auftrennen

alles Arbeit, nicht nur fragen, in letzter Zeit mein Lieblingssatz ;)
 

internet

Top Contributor
statt
> nodes.item(i).getNodeValue()
klingt auch noch nicht ganz nach zwei separaten Werten (Ländername, Einwohnerzahl), was exakt erhälst du als Ausgabe?
aber auch das sollte sich über Methoden einzeln abfragen lassen oder notfalls den String auftrennen

alles Arbeit, nicht nur fragen, in letzter Zeit mein Lieblingssatz ;)

Ich bekomme der Ländername, als auch die Einwohnerzahl.
Wie schaffe ich dies zu trennen?
Also nur der Ländername und nur die Einwohnerzahl.

Falls das geht, denke ich weiß ich wie es geht.
 
S

SlaterB

Gast
> Falls das geht, denke ich weiß ich wie es geht.
fehlt da ein 'nicht'? ich persönlich kann nur alle Varianten meines vorherigen Postings wiederholen,
Methoden suchen oder String parsen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
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 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
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
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
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

Ähnliche Java Themen

Neue Themen


Oben