It seems like the scale of the last XYPlot added wins and all others are ignored.
Here is a simplied version of my code. Any help is much appreciated.
Code: Select all
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.plot.CombinedDomainXYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.DefaultTableXYDataset;
import javax.swing.*;
import java.awt.*;
/**
* User: Steve Peterson
* This class illustrates the limited functionality of the CombinedDomainXYPlot
* Date: Jun 4, 2007
* Time: 2:44:44 AM
*/
public class CombineDomainXYPlotDemo extends ApplicationFrame {
public CombineDomainXYPlotDemo(String title) {
super(title);
JPanel chartPanel = createDemoPanel();
chartPanel.setPreferredSize(new Dimension(500, 270));
setContentPane(chartPanel);
}
/**
*
* @return new JFreeChart
*/
private static JFreeChart createMultiChart()
{
XYSeries series;
DefaultTableXYDataset dataset;
XYLineAndShapeRenderer renderer;
XYPlot plot;
ValueAxis rangeAxis = new NumberAxis("Range");
ValueAxis domainAxis = new NumberAxis("Domain");
CombinedDomainXYPlot combined = new CombinedDomainXYPlot(domainAxis);
combined.setRangeAxis(rangeAxis);
for(int i=0; i < 2;i++)
{
series = getXYSeries(i);
dataset = new DefaultTableXYDataset();
dataset.addSeries(series);
renderer = new XYLineAndShapeRenderer(true, false);
plot = new XYPlot(dataset, domainAxis, rangeAxis, renderer);
combined.add(plot,4);
}
return new JFreeChart( "BUG; CombineDomainXYPlot doesn't scale with data", combined);
}
private static XYSeries getXYSeries(int label) {
XYSeries series = new XYSeries(Integer.valueOf(label).toString(), true, false);
series.add(10.0, 12353.3);
series.add(20.0, 13734.4);
series.add(30.0, 14525.3);
series.add(40.0, 13984.3);
series.add(50.0, 12999.4);
series.add(60.0, 14274.3);
series.add(70.0, 15943.5);
series.add(80.0, 14845.3);
series.add(90.0, 14645.4);
series.add(100.0, 16234.6);
series.add(110.0, 17232.3);
series.add(120.0, 14232.2);
series.add(130.0, 13102.2);
series.add(140.0, 14230.2);
series.add(150.0, 11235.2);
// 2nd Graph doesn't auto scale to this Y value
// Add a couple of points to illustrate
if(label == 0) // using 0 because CombinedDomainXYPlot uses last series first
{
series.add(160.0, 21235.2); // Notice X & Y value are larger than 1 series Range
series.add(170.0, 31235.2);
}
return series;
}
/**
* Creates a panel for the demo (used by SuperDemo.java).
*
* @return A panel.
*/
public static JPanel createDemoPanel() {
JFreeChart chart = createMultiChart();
return new ChartPanel(chart);
}
/**
* Starting point for the demonstration application.
*
* @param args ignored.
*/
public static void main(String[] args) {
CombineDomainXYPlotDemo demo = new CombineDomainXYPlotDemo("CombineDomainXYPlot Demo");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
}
