XYPlot colors

A discussion forum for JFreeChart (a 2D chart library for the Java platform).
Locked
ssaraceni
Posts: 14
Joined: Wed Apr 02, 2008 4:37 pm

XYPlot colors

Post by ssaraceni » Thu Apr 24, 2008 3:56 pm

Hi, I've created an XYPlot with 5 XYSeries for the dataset. I need to set a specific color to every one, I use

DeviationRenderer renderer = new DeviationRenderer(true, false);
renderer.setSeriesFillPaint(0, Color.red);
renderer.setSeriesFillPaint(1, new Color(255,170,140));
renderer.setSeriesFillPaint(2, new Color(255,170,140));
renderer.setSeriesFillPaint(3, Color.green);
renderer.setSeriesFillPaint(4, new Color(255,100,100));

but the doesn't work, the color into graph are wrong.
Simone

RichardWest
Posts: 844
Joined: Fri Oct 13, 2006 9:29 pm
Location: Sunnyvale, CA

Re: XYPlot colors

Post by RichardWest » Thu Apr 24, 2008 5:16 pm

ssaraceni wrote:but the doesn't work, the color into graph are wrong.
Have you assigned the renderer to the plot?
Richard West
Design Engineer II
Advanced Micro Devices
Sunnyvale, CA

ssaraceni
Posts: 14
Joined: Wed Apr 02, 2008 4:37 pm

Post by ssaraceni » Mon Apr 28, 2008 7:10 am

yes, with:

XYPlot plot = (XYPlot) chart.getPlot();
plot.setRenderer(renderer);


the dataset is:

XYSeries seriesProgram = new XYSeries("program");
XYSeries approxProgramP = new XYSeries("programP");
XYSeries approxProgramN = new XYSeries("programN");
XYSeries realSeries=new XYSeries("real");

XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(seriesProgram);
dataset.addSeries(approxProgramP);
dataset.addSeries(approxProgramN);
dataset.addSeries(realSeries);
JFreeChart chart = ChartFactory.createXYLineChart("","SEC","BAR",dataset,
PlotOrientation.VERTICAL,false,true,false);

I add values to the series in a second moment.

Thanks.
Simone

david.gilbert
JFreeChart Project Leader
Posts: 11734
Joined: Fri Mar 14, 2003 10:29 am
antibot: No, of course not.
Contact:

Post by david.gilbert » Mon Apr 28, 2008 10:14 am

You should post a small self-contained demo showing the problem. Otherwise, we have to make guesses about what you might have done wrong. Richard spotted the most likely problem - that you maybe hadn't assigned the renderer to the plot. Since you say you *have* done that, the problem becomes more mysterious. Post a demo.
David Gilbert
JFreeChart Project Leader

:idea: Read my blog
:idea: Support JFree via the Github sponsorship program

ssaraceni
Posts: 14
Joined: Wed Apr 02, 2008 4:37 pm

Post by ssaraceni » Mon Apr 28, 2008 1:11 pm

I create this demo:

import java.awt.Color;

import javax.swing.JPanel;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.DeviationRenderer;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

public class DemoGraph extends ApplicationFrame{

private XYSeries seriesProgram = new XYSeries("program");
private XYSeries approxProgramP = new XYSeries("programP");
private XYSeries approxProgramN = new XYSeries("programN");
private XYSeries realSeries=new XYSeries("real");

public DemoGraph(String title){
super(title);
setContentPane(createDemoPanel());
}

public JPanel createDemoPanel() {
JFreeChart chart = createChart();
return new ChartPanel(chart);
}

private JFreeChart createChart() {
XYSeriesCollection dataset = new XYSeriesCollection();
seriesProgram.add(0,0);
seriesProgram.add(5,5);
seriesProgram.add(10,10);
approxProgramP.add(0,1);
approxProgramP.add(5,6);
approxProgramP.add(10,11);
approxProgramN.add(0,-1);
approxProgramN.add(5,4);
approxProgramN.add(10,9);
realSeries.add(0,0.5);
realSeries.add(5,5.4);
realSeries.add(10,9.3);
dataset.addSeries(seriesProgram);
dataset.addSeries(approxProgramP);
dataset.addSeries(approxProgramN);
dataset.addSeries(realSeries);

JFreeChart chart = ChartFactory.createXYLineChart("","SEC","BAR",dataset,
PlotOrientation.VERTICAL,false,true,false);

XYPlot plot = (XYPlot) chart.getPlot();
plot.setBackgroundPaint(Color.lightGray);
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
DeviationRenderer renderer = new DeviationRenderer(true, false);
renderer.setSeriesFillPaint(0, Color.red);
renderer.setSeriesFillPaint(1, new Color(255,170,140));
renderer.setSeriesFillPaint(2, new Color(255,170,140));
renderer.setSeriesFillPaint(3, Color.green);
plot.setRenderer(renderer);
plot.setDomainCrosshairVisible(true);
plot.setRangeCrosshairVisible(true);
NumberAxis yAxis = (NumberAxis) plot.getRangeAxis();
yAxis.setAutoRangeIncludesZero(false);

return chart;
}

public static void main(String[] args) {
DemoGraph demo=new DemoGraph("Plot color");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
}

and the result is:

seriesProgram -> yellow
approxProgramP -> green
approxProgramN -> blue
realSeries -> red
Simone

david.gilbert
JFreeChart Project Leader
Posts: 11734
Joined: Fri Mar 14, 2003 10:29 am
antibot: No, of course not.
Contact:

Post by david.gilbert » Mon Apr 28, 2008 1:27 pm

Thanks for the demo code. You should do two things:

(1) Use setSeriesPaint() instead of setSeriesFillPaint();

(2) Ask yourself why you are using DeviationRenderer instead of XYLineAndShapeRenderer.
David Gilbert
JFreeChart Project Leader

:idea: Read my blog
:idea: Support JFree via the Github sponsorship program

ssaraceni
Posts: 14
Joined: Wed Apr 02, 2008 4:37 pm

Post by ssaraceni » Mon Apr 28, 2008 4:21 pm

Thank you so much. Now it works fine. The DeviationRender used in the demo example is from a previous example, now i use an XYLineAndShapeRenderer.
Simone

Locked