Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hi!

Ich weiß nicht ob das hier hin passt, aber ich benutze den CeWolf in Verbindung mit Java.

Kennt sich jemand damit aus?

Ich habe ein Balkendiagramm und möchte gerne dynamisch Farben für die einzelnen Abschnitte vergeben, deren Werte sich wiederholen können und somit dann auch die gleiche Farbe haben sollen.

Ist das irgendwie möglich?

Gruß

Geschrieben

Schau dir den Code an...du musst den CustomRenderer verwenden.

Grafisch sieht das Diagramm so aus:

- Balkendiagramm

- Y-Achse: Anzahl der Stimmen

- X-Achse: Antwort

also :

100

.

.

60

.

.

20

0

# ja nein vielleicht

Jeder Balken hat ne andere Farbe. Welche kannst du bestimmen. Ist im Code ersichtlich.

CeWolf erzeugt ja auch ne Instanz von nem JFreeChart, von demher funktioniert das damit auch.



	private JFreeChart createChart(final CategoryDataset dataset, String title,

			String antworten) {


		final JFreeChart chart = ChartFactory.createBarChart(title, // chart

				// title

				antworten, // domain axis label

				"Stimmen", // range axis label

				dataset, // data

				PlotOrientation.VERTICAL, // the plot orientation

				false, // include legend

				true, false);


		chart.setBackgroundPaint(Color.lightGray);


		// get a reference to the plot for further customisation...

		final CategoryPlot plot = chart.getCategoryPlot();

		plot.setNoDataMessage("NO DATA!");


		final CategoryItemRenderer renderer = new CustomRenderer(new Paint[] {

				Color.red, Color.blue, Color.green, Color.yellow, Color.orange,

				Color.cyan, Color.magenta, Color.blue });

		//        renderer.setLabelGenerator(new StandardCategoryLabelGenerator());

		renderer.setItemLabelsVisible(true);

		final ItemLabelPosition p = new ItemLabelPosition(

				ItemLabelAnchor.CENTER, TextAnchor.CENTER, TextAnchor.CENTER,

				45.0);

		renderer.setPositiveItemLabelPosition(p);

		plot.setRenderer(renderer);


		// change the margin at the top of the range axis...

		final ValueAxis rangeAxis = plot.getRangeAxis();

		rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

		rangeAxis.setLowerMargin(0.15);

		rangeAxis.setUpperMargin(0.15);


		CategoryAxis caxis = plot.getDomainAxis();

		Font font = caxis.getLabelFont();

		caxis.setLabelFont(new Font(font.getName(), font.getStyle(), 20));

		return chart;


	}


	private CategoryDataset createDataset(String[] cats, int[] data) {

		final int[][] data2 = new int[][] { data };

		return createCategoryDataset("Series ", cats, data2);

	}


	public static CategoryDataset createCategoryDataset(String rowKeyPrefix,

			String[] columnPrefixes, int[][] data) {


		DefaultCategoryDataset result = new DefaultCategoryDataset();

		for (int r = 0; r < data.length; r++) {

			String rowKey = rowKeyPrefix + (r + 1);

			for (int c = 0; c < data[r].length; c++) {

				result.addValue(new Double(data[r][c]), rowKey,

						columnPrefixes[c]);

			}

		}

		return result;


	}

}


class CustomRenderer extends BarRenderer {


	/** The colors. */

	private Paint[] colors;


	/**

	 * Creates a new renderer.

	 * 

	 * @param colors

	 *            the colors.

	 */

	public CustomRenderer(final Paint[] colors) {

		this.colors = colors;

	}


	/**

	 * Returns the paint for an item. Overrides the default behaviour inherited

	 * from AbstractSeriesRenderer.

	 * 

	 * @param row

	 *            the series.

	 * @param column

	 *            the category.

	 * 

	 * @return The item color.

	 */

	public Paint getItemPaint(final int row, final int column) {

		return this.colors[column % this.colors.length];

	}

}

  • 1 Monat später...
Geschrieben

Ich habe erneut ein Problem mit dem Cewolf.

Ich möchte in einem Balken einer Einheit "1" eine feste breite zuordnen. Geht das?

Zur erklärung ich kann mir die Anzeige für einen Tag, 7 Tage oder 28 Tage ausgeben lassen, dabei dehnen sich die Balken immer über das komplette Chart aus.

Ich möchte jetzt, dass ein Tag immer gleich breit ist. Also, dass das Diagramm für einen Tag nicht so breit ist wie das für 7 oder 28 Tage.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...