JFreeChart - Linienstärke einstellen

Status
Nicht offen für weitere Antworten.

LukeVlbg

Aktives Mitglied
Ich würde gerne die Linienstärke in meinem Chart ändern. Nomalerweise ist dies mit
Code:
plot.getRenderer().setSeriesStroke(0, new BasicStroke(3));
möglich, aber dies gilt meines Wissen nur wenn es sich um einen "XYLineAndShapeRenderer" handelt.

In meinem Beispiel verwende ich ein Balken und zwei Linine Diagramme parallel, da kann ich diesen Renderer nicht einbinden.

Hier mein Code:
Java:
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.block.BlockBorder;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.DatasetRenderingOrder;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.renderer.category.StandardBarPainter;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;


public class LineBarOverlaid extends ApplicationFrame {
	
	/**
	 * Serial version UID
	 */
	private static final long serialVersionUID = 1L;

	public LineBarOverlaid(final String title) {
		super(title);
		
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();

		dataset.addValue(90, "Rückmeldungen", "Di, 2009-07-21");
		dataset.addValue(75, "Rückmeldungen", "Mi, 2009-07-22");
		dataset.addValue(74, "Rückmeldungen", "Do, 2009-07-23");
		dataset.addValue(0, "Rückmeldungen", "Fr, 2009-07-24");
		dataset.addValue(0, "Rückmeldungen", "Sa, 2009-07-25");
		dataset.addValue(0, "Rückmeldungen", "So, 2009-07-26");
		dataset.addValue(3, "Rückmeldungen", "Mo, 2009-07-27");
		dataset.addValue(5, "Rückmeldungen", "Di, 2009-07-28");
		dataset.addValue(0, "Rückmeldungen", "Mi, 2009-07-29");
		dataset.addValue(0, "Rückmeldungen", "Do, 2009-07-30");
		dataset.addValue(0, "Rückmeldungen", "Fr, 2009-07-31");
		dataset.addValue(0, "Rückmeldungen", "Sa, 2009-08-01");
		dataset.addValue(0, "Rückmeldungen", "So, 2009-08-02");
		dataset.addValue(0, "Rückmeldungen", "Mo, 2009-08-03");
		dataset.addValue(0, "Rückmeldungen", "Di, 2009-08-04");
		dataset.addValue(0, "Rückmeldungen", "Mi, 2009-08-05");
		dataset.addValue(0, "Rückmeldungen", "Do, 2009-08-06");
		dataset.addValue(0, "Rückmeldungen", "Fr, 2009-08-07");
		dataset.addValue(0, "Rückmeldungen", "Sa, 2009-08-08");
		dataset.addValue(0, "Rückmeldungen", "So, 2009-08-09");
		dataset.addValue(38, "Rückmeldungen", "Mo, 2009-08-10");
		
		final BarRenderer renderer = new BarRenderer();
		renderer.setMaximumBarWidth(0.01);
		renderer.setItemLabelsVisible(true);
		renderer.setSeriesPaint(0, new Color(0, 141, 188));
		renderer.setDrawBarOutline(true);
		
		final CategoryPlot plot = new CategoryPlot();
		plot.setDataset(dataset);
		plot.setRenderer(renderer);
		
		renderer.setBarPainter(new StandardBarPainter());
		renderer.setShadowVisible(false);
		
		plot.setDomainAxis(new CategoryAxis("Datum"));
		plot.setRangeAxis(new NumberAxis("Stunden"));
		
		plot.setOrientation(PlotOrientation.VERTICAL);
		plot.setRangeGridlinesVisible(false);
		plot.setDomainGridlinesVisible(false);
		plot.setOutlineVisible(false);	
		
		DefaultCategoryDataset dataset2 = new DefaultCategoryDataset();
		dataset2.addValue(28, "Durchschnitt", "Di, 2009-07-21");
		dataset2.addValue(28, "Durchschnitt", "Mi, 2009-07-22");
		dataset2.addValue(28, "Durchschnitt", "Do, 2009-07-23");
		dataset2.addValue(28, "Durchschnitt", "Fr, 2009-07-24");
		dataset2.addValue(28, "Durchschnitt", "Sa, 2009-07-25");
		dataset2.addValue(28, "Durchschnitt", "So, 2009-07-26");
		dataset2.addValue(28, "Durchschnitt", "Mo, 2009-07-27");
		dataset2.addValue(28, "Durchschnitt", "Di, 2009-07-28");
		dataset2.addValue(28, "Durchschnitt", "Mi, 2009-07-29");
		dataset2.addValue(28, "Durchschnitt", "Do, 2009-07-30");
		dataset2.addValue(28, "Durchschnitt", "Fr, 2009-07-31");
		dataset2.addValue(28, "Durchschnitt", "Sa, 2009-08-01");
		dataset2.addValue(28, "Durchschnitt", "So, 2009-08-02");
		dataset2.addValue(28, "Durchschnitt", "Mo, 2009-08-03");
		dataset2.addValue(28, "Durchschnitt", "Di, 2009-08-04");
		dataset2.addValue(28, "Durchschnitt", "Mi, 2009-08-05");
		dataset2.addValue(28, "Durchschnitt", "Do, 2009-08-06");
		dataset2.addValue(28, "Durchschnitt", "Fr, 2009-08-07");
		dataset2.addValue(28, "Durchschnitt", "Sa, 2009-08-08");
		dataset2.addValue(28, "Durchschnitt", "So, 2009-08-09");
		dataset2.addValue(28, "Durchschnitt", "Mo, 2009-08-10");

		DefaultCategoryDataset dataset3 = new DefaultCategoryDataset();
		dataset3.addValue(60, "Plankapazität", "Di, 2009-07-21");
		dataset3.addValue(60, "Plankapazität", "Mi, 2009-07-22");
		dataset3.addValue(60, "Plankapazität", "Do, 2009-07-23");
		dataset3.addValue(60, "Plankapazität", "Fr, 2009-07-24");
		dataset3.addValue(0, "Plankapazität", "Sa, 2009-07-25");
		dataset3.addValue(0, "Plankapazität", "So, 2009-07-26");
		dataset3.addValue(60, "Plankapazität", "Mo, 2009-07-27");
		dataset3.addValue(60, "Plankapazität", "Di, 2009-07-28");
		dataset3.addValue(60, "Plankapazität", "Mi, 2009-07-29");
		dataset3.addValue(60, "Plankapazität", "Do, 2009-07-30");
		dataset3.addValue(60, "Plankapazität", "Fr, 2009-07-31");
		dataset3.addValue(0, "Plankapazität", "Sa, 2009-08-01");
		dataset3.addValue(0, "Plankapazität", "So, 2009-08-02");
		dataset3.addValue(60, "Plankapazität", "Mo, 2009-08-03");
		dataset3.addValue(60, "Plankapazität", "Di, 2009-08-04");
		dataset3.addValue(60, "Plankapazität", "Mi, 2009-08-05");
		dataset3.addValue(60, "Plankapazität", "Do, 2009-08-06");
		dataset3.addValue(60, "Plankapazität", "Fr, 2009-08-07");
		dataset3.addValue(0, "Plankapazität", "Sa, 2009-08-08");
		dataset3.addValue(0, "Plankapazität", "So, 2009-08-09");
		dataset3.addValue(60, "Plankapazität", "Mo, 2009-08-10");

		
		final LineAndShapeRenderer renderer2 = new LineAndShapeRenderer();
		
		renderer2.setSeriesPaint(1, Color.green);
		renderer2.setShapesVisible(false);
		plot.setDataset(1, dataset2);
		plot.setRenderer(1, renderer2);
//		plot.getRenderer().setSeriesStroke(2, new BasicStroke(1.5F));
//		renderer2.setSeriesStroke(1, new BasicStroke(3));


        plot.setDataset(2, dataset3);
        final LineAndShapeRenderer renderer3 = new LineAndShapeRenderer();
        plot.setRenderer(2, renderer3);
        renderer3.setShapesVisible(false);
        
        plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);
        
        plot.getDomainAxis().setCategoryLabelPositions(CategoryLabelPositions.UP_90);
        plot.getRangeAxis().setRange(0, 100);
        
        final JFreeChart chart = new JFreeChart("", new Font("Tahoma", Font.BOLD, 12), plot, true);
        chart.setTitle("Titel");
        chart.getLegend().setFrame(BlockBorder.NONE);

        final ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new Dimension(1000, 450));
        setContentPane(chartPanel);
        chartPanel.setRangeZoomable(false);
        chart.setBackgroundPaint(Color.WHITE);
        
	}
	
	public static void main(String args[]) {
		
		final LineBarOverlaid overlaid = new LineBarOverlaid("Line- and Barchart overlaid");
		overlaid.pack();
		RefineryUtilities.centerFrameOnScreen(overlaid);
		overlaid.setVisible(true);
	}
}
 
plot.getRenderer() ist der BarRenderer, da macht ein Stroke wenig Sinn,
um welche Linie geht es?

und du kannst doch bei jedem Renderer setSeriesStroke aufruferen, selbst beim BarRenderer ohne Sinn,
die beiden auskommentierten Befehle 133+134 gehen auch,
jeder Renderer bzw. jedes der drei DataSets hat aber hier nur eine Serie, ein SerienIndex > 0 macht da derzeit wieder wenig Sinn

> renderer2.setSeriesPaint(1, Color.green);
genauso, mit 0 statt 1 wird die Chart grüner


> dies gilt meines Wissen nur wenn es sich um einen "XYLineAndShapeRenderer" handelt

wer bringt dich auf solche Ideen, letztes mal haben wir doch alles in Detail für ganz normale LineAndShapeRenderer besprochen,
du willst wohl dass ich gar nicht mehr antworte..
 
Zuletzt bearbeitet von einem Moderator:
Im Prinzip geht es um beide Linien. Das mit dem Index hab ich zuerst nicht geschnallt. Aber nachdem du´s Beschrieben hast, ist es eigentlich ganz logisch. Dachte der Index wäre bezogen auf das Dataset.
Aber stimmt das mit dem Renderer hatten wir letzens schon mal. Wollte wohl noch nicht ganz in meinen Kopf rein.

du willst wohl dass ich gar nicht mehr antworte..
Ganz im Gegenteil - ich bin immer froh eine kompetente, verständliche Antwort zu bekommen.
Bin dir sehr dankbar dafür 🙂
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.

Zurück
Oben