cho Posted August 19, 2006 Share Posted August 19, 2006 Iam trying to create a line graph with 2 Y axis. Is it possible to do thru iReports? Can some one post the .jrxml how to achieve this? Link to comment Share on other sites More sharing options...
bklawans Posted August 19, 2006 Share Posted August 19, 2006 Right now JasperReports doesn't have built in support for dual-axis charts - you have to write some custom code in a scriplet to get one. Funny - this is the fourth time somebody asked me about this this week, and the average was about 4x a year up until now. I'm working on some charting enhancements so I'll take a look at adding a second y axis, potentially with a seperate type of chart too. -Barry Link to comment Share on other sites More sharing options...
bklawans Posted August 21, 2006 Share Posted August 21, 2006 I spent some time playing around with this over the weekend and have most of it working. I need to do some clean up around plot options, and add the ability to label each axis. The hard part is done though, so I'll clean it up soon and get it in a future build. size=270]http://www.jasperforge.org/components/com_joomlaboard/uploaded/images/img_0_10_8.jpg -Barry Link to comment Share on other sites More sharing options...
cho Posted August 23, 2006 Author Share Posted August 23, 2006 Thanks for the reply. We were trying to plot the dual Y axis graph writing a scriptlet. We successfully created dual Y axis, but we need to loop thru the data set to plot the Y values in the graph. Can you post the code how to loop thru the dataset and plot the graph using scriptlets? Attached is the sample report we need to generate. -For each ID the graph needs to be generated in new page based on the IDs data. -The X-Axis Category names need to be modified based on user parameter. For EX: If user selects day the X_axis values are 2/1,2/1.. If parameter is Quarter , the X_axis values are June2006, July2006...Right now, this is String data type in our report. Post edited by: cho, at: 2006/08/22 20:22 [file name=quarter.doc size=76288]http://www.jasperforge.org/components/com_joomlaboard/uploaded/files/quarter.doc[/file]Post edited by: cho, at: 2006/08/22 20:23 Link to comment Share on other sites More sharing options...
cho Posted August 23, 2006 Author Share Posted August 23, 2006 //scriptlet.java import java.awt.Color;import java.awt.Font; import net.sf.jasperreports.engine.JRDefaultScriptlet;import net.sf.jasperreports.engine.JRScriptletException;import net.sf.jasperreports.renderers.JCommonDrawableRenderer; import org.jfree.chart.ChartFactory;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.AxisLocation;import org.jfree.chart.axis.NumberAxis;import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.renderer.category.LineAndShapeRenderer;import org.jfree.chart.title.TextTitle;import org.jfree.data.category.DefaultCategoryDataset;import org.jfree.ui.HorizontalAlignment;import org.jfree.ui.RectangleEdge; public class retail_cvr_by_loc3Scriptlet extends it.businesslogic.ireport.IReportScriptlet { /** Creates a new instance of JRIreportDefaultScriptlet */public retail_cvr_by_loc3Scriptlet() { } /** Begin EVENT_AFTER_COLUMN_INIT This line is generated by iReport. Don't modify or move please! */public void afterColumnInit() throws JRScriptletException{ super.beforeColumnInit();}/** End EVENT_AFTER_COLUMN_INIT This line is generated by iReport. Don't modify or move please! *//** Begin EVENT_AFTER_DETAIL_EVAL This line is generated by iReport. Don't modify or move please! */public void afterDetailEval() throws JRScriptletException{ super.afterDetailEval();}/** End EVENT_AFTER_DETAIL_EVAL This line is generated by iReport. Don't modify or move please! *//** Begin EVENT_AFTER_GROUP_INIT This line is generated by iReport. Don't modify or move please! */public void afterGroupInit(String groupName) throws JRScriptletException{ //super.afterGroupInit(groupName); DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue((java.math.BigDecimal)getFieldValue("TRAFFIC"), "Traffic", (java.lang.String)getFieldValue("GRAPH_X_AXIS")); // create the chart...JFreeChart chart = ChartFactory.createLineChart( "Java Standard Class Library", // chart title (java.lang.String)getParameterValue("p_period"), // domain axis label "Traffic", // range axis label dataset, // data PlotOrientation.VERTICAL, // orientation false, // include legend true, // tooltips false // urls); chart.addSubtitle(new TextTitle("Number of Classes By Release"));TextTitle source = new TextTitle("Source: Java In A Nutshell (4th Edition) by David Flanagan (O’Reilly)");source.setFont(new Font("SansSerif", Font.PLAIN, 10));//source.setPosition(RectangleEdge.BOTTOM);//source.setHorizontalAlignment(HorizontalAlignment.RIGHT);chart.addSubtitle(source);chart.setBackgroundPaint(Color.white); CategoryPlot plot = (CategoryPlot) chart.getPlot();plot.setBackgroundPaint(Color.lightGray);plot.setRangeGridlinePaint(Color.white); // customise the range axis...NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); NumberAxis axis2 = new NumberAxis("Conversion");axis2.setRange(5, 500);plot.setRangeAxis(1, axis2);//plot.setRangeAxisLocation(1, AxisLocation.BOTTOM_OR_RIGHT); // customise the renderer...LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer();renderer.setShapesVisible(true);renderer.setDrawOutlines(true);renderer.setUseFillPaint(true);renderer.setFillPaint(Color.white); this.setVariableValue("Chart", new JCommonDrawableRenderer(chart));}/** End EVENT_AFTER_GROUP_INIT This line is generated by iReport. Don't modify or move please! *//** Begin EVENT_AFTER_PAGE_INIT This line is generated by iReport. Don't modify or move please! */public void afterPageInit() throws JRScriptletException{ super.afterPageInit();}/** End EVENT_AFTER_PAGE_INIT This line is generated by iReport. Don't modify or move please! *//** Begin EVENT_AFTER_REPORT_INIT This line is generated by iReport. Don't modify or move please! */public void afterReportInit() throws JRScriptletException{}/** End EVENT_AFTER_REPORT_INIT This line is generated by iReport. Don't modify or move please! *//** Begin EVENT_BEFORE_COLUMN_INIT This line is generated by iReport. Don't modify or move please! */public void beforeColumnInit() throws JRScriptletException{ }/** End EVENT_BEFORE_COLUMN_INIT This line is generated by iReport. Don't modify or move please! *//** Begin EVENT_BEFORE_DETAIL_EVAL This line is generated by iReport. Don't modify or move please! */public void beforeDetailEval() throws JRScriptletException{ }/** end EVENT_BEFORE_DETAIL_EVAL Please don't touch or move this comment*/ /** End EVENT_BEFORE_DETAIL_EVAL This line is generated by iReport. Don't modify or move please! *//** Begin EVENT_BEFORE_GROUP_INIT This line is generated by iReport. Don't modify or move please! */public void beforeGroupInit(String groupName) throws JRScriptletException{}/** End EVENT_BEFORE_GROUP_INIT This line is generated by iReport. Don't modify or move please! *//** Begin EVENT_BEFORE_PAGE_INIT This line is generated by iReport. Don't modify or move please! */public void beforePageInit() throws JRScriptletException{} /** End EVENT_BEFORE_PAGE_INIT This line is generated by iReport. Don't modify or move please! *//** Begin EVENT_BEFORE_REPORT_INIT This line is generated by iReport. Don't modify or move please! */public void beforeReportInit() throws JRScriptletException{ } /** End EVENT_BEFORE_REPORT_INIT This line is generated by iReport. Don't modify or move please! */ } Link to comment Share on other sites More sharing options...
bklawans Posted August 26, 2006 Share Posted August 26, 2006 Is the data you need for both axes in the dataset? If so its pretty easy. When you create the second axis and add it to the plot you need to set the dataset to use for the axis too. Try adding plot.setDataset(1, dataset);plot.mapDatasetToRangeAxis(1, 1); right after your call to plot.setRangeAxis. -Barry Link to comment Share on other sites More sharing options...
timmyd Posted August 29, 2006 Share Posted August 29, 2006 Thanks Barry. The dual-y axis is a requirement that I have too, so I look forward to the final product. Tim Link to comment Share on other sites More sharing options...
bklawans Posted August 29, 2006 Share Posted August 29, 2006 timmyd wrote:Thanks Barry.The dual-y axis is a requirement that I have too, so I look forward to the final product.Tim I've got all the development work wrapped up, and as soon as JR/iR 1.2.6 get through QA and released I'll check the code in. I decided to hold off putting it into 1.2.6 since Giulio won't have time to add support in iReport. I'll post a followup when its checked in and folks can grab the latest code to play with it, assuming they can live without iReport support for a little while. -Barry Link to comment Share on other sites More sharing options...
bklawans Posted September 6, 2006 Share Posted September 6, 2006 1.2.6 is out, so I just checked all the code into the main code tree, still on SourceForge. If you pull the latest source and build it, check out the new reports in the charts sample. I haven't integrated the multiple axis charts with the new chart hyperlink support yet, so you can't create 1.2.6 style chart hyperlinks and have them work in a multiple axis chart. -Barry Link to comment Share on other sites More sharing options...
evanand Posted March 30, 2007 Share Posted March 30, 2007 I am looking for dual axis chart from long time. Does any one have any idea on when it is going to be ready Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now