# Suche Beispiele jFreeChart



## Guest (21. Mrz 2005)

hallo!

kann die beispiele aus http://jfree.org/jfreechart/samples.php in jfreechart-1.0.0-pre2.zip 
nicht finden bzw. finde ich nur 3 im ordner 'demo'.

gibt es vllt. auch mehr beispiele (im netzt) als auf der seite angeboten werden?

über google war jedenfalls nichts zu finden bzw. kostet das was. existieren da code-beispiele?

danke für antwort,


----------



## DP (21. Mrz 2005)

von jfree gibt es ein tutorial für 30us$ - lohnt sich imho.


----------



## Guest (21. Mrz 2005)

hm... leider wenig geld 

sollte schon 'free' sein.


----------



## meez (21. Mrz 2005)

Hier eine Klasse für ein PieChart ohne jegliche Beschriftung..(Hab ich mal gemacht, weiss aber nicht mehr genau wofür.. :bahnhof:  )



```
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;
public class ColorPieChart extends PiePlot {
	private List numbers = new ArrayList();
	private List colors = new ArrayList();
	public void add(Color color, int number) {
		colors.add(color);
		numbers.add(new Integer(number));
	}
	public BufferedImage makeChart(int x, int y) {
		DefaultPieDataset set = new DefaultPieDataset();
		Color color;
		Integer number;
		for (int n = 0; n < colors.size(); n++) {
			number = (Integer) numbers.get(n);
			color = (Color) colors.get(n);
			set.setValue(color.toString(), number);
			setSectionPaint(n, color);
		}
		setDataset(set);
		setOutlineStroke(null);
		setBackgroundPaint(new Color(255, 255, 255));
		setOutlinePaint(null);
		setLabelGenerator(null);
		JFreeChart chart = new JFreeChart(this);
		return chart.createBufferedImage(x, y);
	}
}
```

Einfach für jedes "Tortenstück" add() Aufrufen, und am Schluss makeChart();


----------



## knopper (21. Mrz 2005)

Du kannst die  alte Version(freechart 0.9.21 nehmen, Im Demo Verzeichniss stehen noch java Code Beispiele )
einfach googlen


----------



## abollm (21. Mrz 2005)

Anonymous hat gesagt.:
			
		

> hallo!
> 
> kann die beispiele aus http://jfree.org/jfreechart/samples.php in jfreechart-1.0.0-pre2.zip
> nicht finden bzw. finde ich nur 3 im ordner 'demo'.
> ...



Du hast nicht richtig gesucht, denn es gibt haufenweise Beispiele im Netz. Da ich gerade auch mit jFreeChart herumexperimentiere, hier ein lauffähiges Beispiel (JVM 1.5, jFreeChart 1.0.0-pre2):

```
package chart;

import java.awt.*;
import javax.swing.*;

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.*;

public class MyBarChart extends JFrame {
	public MyBarChart() {
		super("MyBarChart");
		CategoryDataset dataset = createDataset();
		JFreeChart chart = createChart(dataset);
		chart = customizeChart(chart);
		ChartPanel chartPanel = new ChartPanel(chart);
		chartPanel.setPreferredSize(new Dimension(1000, 540));
		
		getContentPane().add(chartPanel);

		pack();
		setLocationRelativeTo(null);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

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

	private CategoryDataset createDataset() {
		// Zeilen (X-Achse) ...
		String series1 = "Umsatz Abt. A";
		String series2 = "Umsatz Abt. B";
		String series3 = "Umsatz Abt. C";

		// Spalten (X-Achse) ...
		String category1 = "Typ 1";
		String category2 = "Typ 2";
		String category3 = "Typ 3";
		String category4 = "Typ 4";
		String category5 = "Typ 5";

		// Erzeuge Datensätze...
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();

		dataset.addValue(1.5, series1, category1);
		dataset.addValue(4.2, series1, category2);
		dataset.addValue(3.0, series1, category3);
		dataset.addValue(5.0, series1, category4);
		dataset.addValue(5.0, series1, category5);

		dataset.addValue(5.5, series2, category1);
		dataset.addValue(7.8, series2, category2);
		dataset.addValue(6.0, series2, category3);
		dataset.addValue(8.0, series2, category4);
		dataset.addValue(4.0, series2, category5);

		dataset.addValue(4.0, series3, category1);
		dataset.addValue(3.0, series3, category2);
		dataset.addValue(2.0, series3, category3);
		dataset.addValue(3.0, series3, category4);
		dataset.addValue(6.0, series3, category5);

		return dataset;
	}

	private JFreeChart createChart(final CategoryDataset dataset) {
		JFreeChart chart = ChartFactory.createBarChart("Demo Bar Chart", // Titel Diagramm
				"Kategorie", // Label Achse Diagrammbeschriftung label
				"Wert", // Bereich Achse Label
				dataset, // Daten
				PlotOrientation.VERTICAL, // orientation
				true, // Legende vorhanden?
				true, // Tooltips?
				false // URLs?
				);
		return chart;
	}

	private JFreeChart customizeChart(final JFreeChart chart) {
		return chart;
	}
}
```


----------



## Gast (21. Mrz 2005)

@knopper

hm... ok. geladen doch finde dort aber gar keine 'demos'

wo befindet sich der ordner 'demo'?

@meez

liniendiagramm für 2 kurven wäre nicht schlecht  

@all

das diagramm sollte bestehen aus:

- eine x-achse (zeit)
- 1 oder 2 y-achsen je nachdem ob ich 1 oder 2 werte bekomme.

wäre sehr angetan, wenn sich jemand melden könnte.

.


----------



## Gast (21. Mrz 2005)

ups, gast darf nicht editieren.

@knopper

demo´s gefunden (version jfreechart-0.9.16.zip).

@all

schau mir diese mal an. vllt. komme ich damit schon zurecht 

.


----------



## DP (21. Mrz 2005)

Gast hat gesagt.:
			
		

> - 1 oder 2 y-achsen je nachdem ob ich 1 oder 2 werte bekomme.



nicht pers. gemeint, aber in welcher baumschule hast du denn deinen abschluss gemacht?




			
				Gast hat gesagt.:
			
		

> ups, gast darf nicht editieren.



dagegen gibt es ein einfaches mittel: REGISTRIERUNG


----------



## meez (21. Mrz 2005)

Gast hat gesagt.:
			
		

> @meez
> liniendiagramm für 2 kurven wäre nicht schlecht




Hehe...du hast Glück...


```
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

public class XYChart {
	private XYSeriesCollection dataset = new XYSeriesCollection();
	private String chartname, xaxisname, yaxisname;
	public void setNames(String chartName, String XaxisName, String YaxisName) {
		chartname = chartName;
		xaxisname = XaxisName;
		yaxisname = YaxisName;	
	}
	public void addXY(String serieName, double x, double y) {
		XYSeries serie = null;
		f: for (int n = 0; n < dataset.getSeriesCount(); n++) {
			if (dataset.getSeriesName(n).equals(serieName)) {
				serie = dataset.getSeries(n);
				dataset.removeSeries(n);				
				break f;
			}
		}
		if (serie == null) serie = new XYSeries(serieName);
		serie.add(x, y);
		dataset.addSeries(serie);
	}
	public BufferedImage makeChart(int x, int y) {
		JFreeChart chart = ChartFactory
				.createXYLineChart(chartname, xaxisname, yaxisname, dataset,
						PlotOrientation.VERTICAL, true, true, false);
		chart.setAntiAlias(true);
		chart.setBorderVisible(true);
		return chart.createBufferedImage(x, y);
	}
}
```


----------



## Gast (21. Mrz 2005)

@DP

naja, 2 verschiedene messungen in einem diagramm:

messung 1 --> y-achse (%)
messung 2 --> y-achse (°C)

zeit --> x-achse für beie messungen gleich.

manchmal bekomme ich für die messung aber nicht 2 werte, dann sollte nur eine y-achse (°C) genutzt werden. vllt. habe ich mich einfach 'undeutlich' ausgedrückt, sry!

@all

danke für die hilfe... das diagramm macht sich 

.


----------



## Gast (22. Mrz 2005)

so, hier mal ein stück code:


```
public JFreeChart createTemperatureChart() {

    XYDataset dataset = this.createDatasetTemperature();

    // create the chart...
    JFreeChart chart = ChartFactory.createXYLineChart(
            " ", // chart title
            "Time [SECONDS]", // x axis label
            "Temperature [DEGREE]", // y axis label
            dataset, // data
            PlotOrientation.VERTICAL,
            false, // include legend
            true, // tooltips
            false // urls
                       );

    // NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...
    chart.setBackgroundPaint(Color.white);

    // get a reference to the plot for further customisation...
    XYPlot plot = chart.getXYPlot();
    plot.setBackgroundPaint(Color.lightGray);
    plot.setDomainGridlinePaint(Color.white);
    plot.setRangeGridlinePaint(Color.white);

    // change the auto tick unit selection to integer units only...
    NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
    rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
    rangeAxis.setAutoRangeIncludesZero(false);

    // OPTIONAL CUSTOMISATION COMPLETED.

    return chart;
}
```

fragen:

kann man die farbe der linie ändern? wie?
wozu dient der BufferedImage?
ist der code für das diagramm so optimal oder gibt es noch verbesserungen?

danke für eure hilfe.

.


----------



## Gast (22. Mrz 2005)

ah, hab es. man muss nur einen renderer erzeugen:


```
XYItemRenderer renderer = plot.getRenderer();
renderer.setPaint(Color.GREEN);
```

.


----------

