Home » Archived » BIRT » Stacked bar chart
Stacked bar chart [message #259715] |
Mon, 29 October 2007 02:22  |
Eclipse User |
|
|
|
I've extended the birt.chart.examples.api.data.autobinding example to
include several more rows of data and create a stacked bar chart. The
chart only uses the first two rows of data even though I have checked the
other rows being created. Has anyone used the data row expression
evaluator adapter?
|
|
| |
Re: Stacked bar chart [message #259871 is a reply to message #259720] |
Mon, 29 October 2007 23:27   |
Eclipse User |
|
|
|
This is the extended code. Thanks for any suggestions.
private static final Chart createSimpleChart() {
ChartWithAxes cwaBar = ChartWithAxesImpl.create();
cwaBar.setType("Bar Chart"); //$NON-NLS-1$
cwaBar.setSubType("Stacked"); //$NON-NLS-1$
// X-Axis
Axis xAxisPrimary = cwaBar.getPrimaryBaseAxes()[0];
xAxisPrimary.setType(AxisType.TEXT_LITERAL);
xAxisPrimary.getOrigin().setType(IntersectionType.VALUE_LITE RAL);
xAxisPrimary.getTitle().setVisible(true);
// Y-Axis
Axis yAxisPrimary = cwaBar.getPrimaryOrthogonalAxis(xAxisPrimary);
yAxisPrimary.getMajorGrid().setTickStyle(TickStyle.LEFT_LITE RAL);
yAxisPrimary.setType(AxisType.LINEAR_LITERAL);
yAxisPrimary.getTitle().setVisible(true);
// X-Series
Series seCategory = SeriesImpl.create();
Query query = QueryImpl.create("Items");//$NON-NLS-1$
seCategory.getDataDefinition().add(query);
SeriesDefinition sdX = SeriesDefinitionImpl.create();
xAxisPrimary.getSeriesDefinitions().add(sdX);
sdX.getSeries().add(seCategory);
// Y-Series
BarSeries bs1 = (BarSeries) BarSeriesImpl.create();
Query query1 = QueryImpl.create("Amounts1");//$NON-NLS-1$
bs1.getDataDefinition().add(query1);
bs1.getLabel().setVisible(true);
bs1.setVisible(true);
// Y-Series
BarSeries bs2 = (BarSeries) BarSeriesImpl.create();
Query query2 = QueryImpl.create("Amounts2");//$NON-NLS-1$
bs2.getDataDefinition().add(query2);
bs2.getLabel().setVisible(true);
bs2.setStacked(true);
// Y-Series
BarSeries bs3 = (BarSeries) BarSeriesImpl.create();
Query query3 = QueryImpl.create("Amounts3");//$NON-NLS-1$
bs3.getDataDefinition().add(query3);
bs3.getLabel().setVisible(true);
bs3.setStacked(true);
SeriesDefinition sdY = SeriesDefinitionImpl.create();
yAxisPrimary.getSeriesDefinitions().add(sdY);
sdY.getSeries().add(bs1);
sdY.getSeries().add(bs2);
sdY.getSeries().add(bs3);
return cwaBar;
}
public void paintControl(PaintEvent e) {
this.idr.setProperty(IDeviceRenderer.GRAPHICS_CONTEXT, e.gc);
Composite co = (Composite) e.getSource();
Rectangle re = co.getClientArea();
Bounds bo = BoundsImpl.create(0, 0, re.width, re.height);
bo.scale(72d / this.idr.getDisplayServer().getDpiResolution());
RunTimeContext context = new RunTimeContext();
context.setULocale(ULocale.getDefault());
String[] set = { "Items", "Amounts1", "Amounts2", "Amounts3" };
Object[][] data = { { "A", "B", "C" },
{ new Integer(5), new Integer(7), new Integer(3) },
{ new Integer(7), new Integer(2), new Integer(5) },
{ new Integer(3), new Integer(4), new Integer(1) } };
this.dree = new DataRowExpressionEvaluator(set, data);
Generator gr = Generator.instance();
try {
gr.bindData(this.dree, this.cm, context);
gr.render(this.idr, gr.build(this.idr.getDisplayServer(), this.cm,
bo, null, context, null));
} catch (ChartException ce) {
ce.printStackTrace();
}
}
|
|
|
Re: Stacked bar chart [message #259924 is a reply to message #259871] |
Tue, 30 October 2007 06:01   |
Eclipse User |
|
|
|
This looks fine, can you also post the DataRowExpressionEvaluator code?
Thanks,
David
"Chery McNamara" <cheryl.mcnamara@csiro.au> wrote in message
news:f92dd632523c6b4b650c0f79a1276cd6$1@www.eclipse.org...
> This is the extended code. Thanks for any suggestions.
>
> private static final Chart createSimpleChart() {
> ChartWithAxes cwaBar = ChartWithAxesImpl.create();
> cwaBar.setType("Bar Chart"); //$NON-NLS-1$
> cwaBar.setSubType("Stacked"); //$NON-NLS-1$
>
> // X-Axis
> Axis xAxisPrimary = cwaBar.getPrimaryBaseAxes()[0];
> xAxisPrimary.setType(AxisType.TEXT_LITERAL);
> xAxisPrimary.getOrigin().setType(IntersectionType.VALUE_LITE RAL);
> xAxisPrimary.getTitle().setVisible(true);
>
> // Y-Axis
> Axis yAxisPrimary = cwaBar.getPrimaryOrthogonalAxis(xAxisPrimary);
> yAxisPrimary.getMajorGrid().setTickStyle(TickStyle.LEFT_LITE RAL);
> yAxisPrimary.setType(AxisType.LINEAR_LITERAL);
> yAxisPrimary.getTitle().setVisible(true);
>
> // X-Series
> Series seCategory = SeriesImpl.create();
> Query query = QueryImpl.create("Items");//$NON-NLS-1$
> seCategory.getDataDefinition().add(query);
>
> SeriesDefinition sdX = SeriesDefinitionImpl.create();
> xAxisPrimary.getSeriesDefinitions().add(sdX);
> sdX.getSeries().add(seCategory);
>
> // Y-Series
> BarSeries bs1 = (BarSeries) BarSeriesImpl.create();
> Query query1 = QueryImpl.create("Amounts1");//$NON-NLS-1$
> bs1.getDataDefinition().add(query1);
> bs1.getLabel().setVisible(true);
> bs1.setVisible(true);
>
> // Y-Series
> BarSeries bs2 = (BarSeries) BarSeriesImpl.create();
> Query query2 = QueryImpl.create("Amounts2");//$NON-NLS-1$
> bs2.getDataDefinition().add(query2);
> bs2.getLabel().setVisible(true);
> bs2.setStacked(true);
>
> // Y-Series
> BarSeries bs3 = (BarSeries) BarSeriesImpl.create();
> Query query3 = QueryImpl.create("Amounts3");//$NON-NLS-1$
> bs3.getDataDefinition().add(query3);
> bs3.getLabel().setVisible(true);
> bs3.setStacked(true);
>
> SeriesDefinition sdY = SeriesDefinitionImpl.create();
> yAxisPrimary.getSeriesDefinitions().add(sdY);
> sdY.getSeries().add(bs1);
> sdY.getSeries().add(bs2);
> sdY.getSeries().add(bs3);
>
> return cwaBar;
> }
>
> public void paintControl(PaintEvent e) {
> this.idr.setProperty(IDeviceRenderer.GRAPHICS_CONTEXT, e.gc);
> Composite co = (Composite) e.getSource();
> Rectangle re = co.getClientArea();
> Bounds bo = BoundsImpl.create(0, 0, re.width, re.height);
> bo.scale(72d / this.idr.getDisplayServer().getDpiResolution());
>
> RunTimeContext context = new RunTimeContext();
> context.setULocale(ULocale.getDefault());
>
> String[] set = { "Items", "Amounts1", "Amounts2", "Amounts3" };
> Object[][] data = { { "A", "B", "C" },
> { new Integer(5), new Integer(7), new Integer(3) },
> { new Integer(7), new Integer(2), new Integer(5) },
> { new Integer(3), new Integer(4), new Integer(1) } };
>
> this.dree = new DataRowExpressionEvaluator(set, data);
> Generator gr = Generator.instance();
> try {
> gr.bindData(this.dree, this.cm, context);
> gr.render(this.idr, gr.build(this.idr.getDisplayServer(), this.cm,
> bo, null, context, null));
> } catch (ChartException ce) {
> ce.printStackTrace();
> }
> }
>
>
>
|
|
| | | | | |
Re: Stacked bar chart [message #260599 is a reply to message #260311] |
Mon, 05 November 2007 08:07  |
Eclipse User |
|
|
|
Here is an updated code that will show a different color for each series,
you have to set a different palette for each of the seriesDefinition:
SeriesDefinition sdY = SeriesDefinitionImpl.create();
yAxisPrimary.getSeriesDefinitions().add(sdY);
sdY.getSeries().add(bs1);
sdY.setSeriesPalette( PaletteImpl.create( ColorDefinitionImpl.create(
255,255,0 ) ) );
SeriesDefinition sdY2 = SeriesDefinitionImpl.create();
yAxisPrimary.getSeriesDefinitions().add(sdY2);
sdY2.getSeries().add(bs2);
sdY2.setSeriesPalette( PaletteImpl.create( ColorDefinitionImpl.create(
255,0,255 ) ) );
SeriesDefinition sdY3 = SeriesDefinitionImpl.create();
yAxisPrimary.getSeriesDefinitions().add(sdY3);
sdY3.getSeries().add(bs3);
sdY3.setSeriesPalette( PaletteImpl.create( ColorDefinitionImpl.create(
0,255,0 ) ) );
If you really want to use a single seriesdefinition, you will need to use
the bindData() method, and define a grouping on the y series to
automatically generate runtime series. In that case, you will need to define
only one palette with multiple colors.
Thanks,
David
"Chery McNamara" <cheryl.mcnamara@csiro.au> wrote in message
news:66eafd2afdcbb23b3632393940fdfe41$1@www.eclipse.org...
> The solution you have suggested is the work around I am already using. It
> does stack correctly but doesn
|
|
|
Goto Forum:
Current Time: Wed May 14 07:49:57 EDT 2025
Powered by FUDForum. Page generated in 0.04265 seconds
|