margin not honoured using LineAndShape renderer.

A discussion forum for JFreeChart (a 2D chart library for the Java platform).
Locked
vijay
Posts: 13
Joined: Thu Nov 17, 2005 3:20 pm
Location: India

margin not honoured using LineAndShape renderer.

Post by vijay » Fri Nov 25, 2005 3:26 pm

I have a overlaid chart where with category data set. All data sets are rendered by LineAndShape renderer. Setting the lowerMargin and upperMargin to zero is not honoured. I have modified the OverLaidBarcharDemo1 to reflect the requirement. The change being, instead of a bar renderer for the first data set it uses LineAndShapeRenderer for the first data set.

When i set the lowerMargin and upperMargin to zero - I expected that the graph would start from zero - looks like the 0.5% lowerMargin and 0.5% UpperMargin still seems to stick with it.

Code: Select all

 


import java.awt.Dimension;
import javax.swing.JPanel;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.*;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.*;
import org.jfree.chart.renderer.category.*;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

public class OverlaidBarChartDemo1 extends ApplicationFrame
{

 public OverlaidBarChartDemo1(String s)
 {
     super(s);
     JPanel jpanel = createDemoPanel();
     jpanel.setPreferredSize(new Dimension(500, 270));
     setContentPane(jpanel);
 }

 public static JFreeChart createChart()
 {
	 // SET UP THE BAR GRAPH
     DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
     defaultcategorydataset.addValue(1.0D, "S1", "Category 1");
     defaultcategorydataset.addValue(4D, "S1", "Category 2");
     defaultcategorydataset.addValue(3D, "S1", "Category 3");
     defaultcategorydataset.addValue(5D, "S1", "Category 4");
     defaultcategorydataset.addValue(5D, "S1", "Category 5");
     defaultcategorydataset.addValue(7D, "S1", "Category 6");
     defaultcategorydataset.addValue(7D, "S1", "Category 7");     
     defaultcategorydataset.addValue(8D, "S1", "Category 8");
     
     defaultcategorydataset.addValue(5D, "S2", "Category 1");
     defaultcategorydataset.addValue(7D, "S2", "Category 2");
     defaultcategorydataset.addValue(6D, "S2", "Category 3");
     defaultcategorydataset.addValue(8D, "S2", "Category 4");
     defaultcategorydataset.addValue(4D, "S2", "Category 5");
     defaultcategorydataset.addValue(4D, "S2", "Category 6");
     defaultcategorydataset.addValue(2D, "S2", "Category 7");
     defaultcategorydataset.addValue(1.0D, "S2", "Category 8");
     
     StandardCategoryItemLabelGenerator standardcategoryitemlabelgenerator = new StandardCategoryItemLabelGenerator();
//     BarRenderer barrenderer = new BarRenderer();     
//     barrenderer.setItemLabelGenerator(standardcategoryitemlabelgenerator);
//     barrenderer.setItemLabelsVisible(true);
     
     LineAndShapeRenderer renderer = new LineAndShapeRenderer();
     renderer.setItemLabelGenerator(standardcategoryitemlabelgenerator);
     renderer.setItemLabelsVisible(true);
     
     CategoryPlot categoryplot = new CategoryPlot();
     categoryplot.setDataset(defaultcategorydataset);
     
     //categoryplot.setRenderer(barrenderer);
     categoryplot.setRenderer(renderer);
     
     categoryplot.setDomainAxis(new CategoryAxis("Category"));
     categoryplot.setRangeAxis(new NumberAxis("Value"));
     categoryplot.setOrientation(PlotOrientation.VERTICAL);
     categoryplot.setRangeGridlinesVisible(true);
     categoryplot.setDomainGridlinesVisible(true);
     
     DefaultCategoryDataset defaultcategorydataset1 = new DefaultCategoryDataset();
     defaultcategorydataset1.addValue(9D, "T1", "Category 1");
     defaultcategorydataset1.addValue(7D, "T1", "Category 2");
     defaultcategorydataset1.addValue(2D, "T1", "Category 3");
     defaultcategorydataset1.addValue(6D, "T1", "Category 4");
     defaultcategorydataset1.addValue(6D, "T1", "Category 5");
     defaultcategorydataset1.addValue(9D, "T1", "Category 6");
     defaultcategorydataset1.addValue(5D, "T1", "Category 7");
     defaultcategorydataset1.addValue(4D, "T1", "Category 8");
     LineAndShapeRenderer lineandshaperenderer = new LineAndShapeRenderer();
     categoryplot.setDataset(1, defaultcategorydataset1);
     categoryplot.setRenderer(1, lineandshaperenderer);
     NumberAxis numberaxis = new NumberAxis("Axis 2");
     categoryplot.setRangeAxis(1, numberaxis);
     
     DefaultCategoryDataset defaultcategorydataset2 = new DefaultCategoryDataset();
     defaultcategorydataset2.addValue(94D, "R1", "Category 1");
     defaultcategorydataset2.addValue(75D, "R1", "Category 2");
     defaultcategorydataset2.addValue(22D, "R1", "Category 3");
     defaultcategorydataset2.addValue(74D, "R1", "Category 4");
     defaultcategorydataset2.addValue(83D, "R1", "Category 5");
     defaultcategorydataset2.addValue(9D, "R1", "Category 6");
     defaultcategorydataset2.addValue(23D, "R1", "Category 7");
     defaultcategorydataset2.addValue(98D, "R1", "Category 8");          
     categoryplot.setDataset(2, defaultcategorydataset2);
     LineAndShapeRenderer lineandshaperenderer1 = new LineAndShapeRenderer();
     categoryplot.setRenderer(2, lineandshaperenderer1);
     categoryplot.mapDatasetToRangeAxis(2, 1);
     categoryplot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);
     categoryplot.getDomainAxis().setCategoryLabelPositions(CategoryLabelPositions.UP_45);

     // WE DON'T NEED THE MARGIN - PADDING - FIX !!
     categoryplot.getDomainAxis().setLowerMargin(0);
     categoryplot.getDomainAxis().setUpperMargin(0);

     JFreeChart jfreechart = new JFreeChart(categoryplot);
     jfreechart.setTitle("Overlaid Bar Chart");
     return jfreechart;
 }

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

 public static void main(String args[])
 {
     OverlaidBarChartDemo1 overlaidbarchartdemo1 = new OverlaidBarChartDemo1("Overlaid Bar Chart Demo");
     overlaidbarchartdemo1.pack();
     RefineryUtilities.centerFrameOnScreen(overlaidbarchartdemo1);
     overlaidbarchartdemo1.setVisible(true);
 }
}


My requirement is not to have any lower and upper margin. Is this a expected behaviour or am i doing something wrong.

The margin setting is honoured when the renderer is BarRenderer for the first data set.

EDIT : I am using JFreeChart 1.0.0-rc1 J2SDK 1.5.0_05

Thanks,
Vijay

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 » Fri Nov 25, 2005 4:46 pm

I think this is due to the shapes being placed in the center of each category, so the gaps you see at each end of the chart are half a category each. Bars, on the other hand, fill the whole category space. I don't know a good way to resolve this (perhaps an option on the axis to only show half a category for the first and last categories would do the trick).
David Gilbert
JFreeChart Project Leader

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

Locked