Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Setting Range for X,Y Axis-JfreeChart

Tags:

Any suggestions over how to set Range for X-Axis and Y-Axis.

My "X-Axis" Range is from "0.00 to 1.00" with difference of "0.05". I mean 0.00 0.05 0.10 0.15.....0.90 0.95 1.00

My "Y-Axis" Range is from "0.0 to 1.0" with difference of "0.1". I mean 0.0 0.1 0.2 0.3 0.4.........0.9 1.0

I tried doing this Way, but it's not reflecting on the Graph; I don't know how to apply it to ChartFactory.createScatterPlot().

final NumberAxis domainAxis = new NumberAxis("X-Axis"); domainAxis.setRange(0.00,1.00); domainAxis.setTickUnit(new NumberTickUnit(0.1)); final NumberAxis rangeAxis = new NumberAxis("Y-Axis"); rangeAxis.setRange(0.0,1.0); rangeAxis.setTickUnit(new NumberTickUnit(0.05));  public  JPanel createDemoPanel() {     XYDataset dataset1 = samplexydataset2();     JFreeChart jfreechart = ChartFactory.createScatterPlot("Scatter Plot Demo",         "X", "Y",dataset1, PlotOrientation.VERTICAL, true, true, false); } 

Any help regarding this would be great.

like image 686
Sam Avatar asked Aug 29 '11 14:08

Sam


2 Answers

I'm guessing your new NumberAxis instances aren't being used by the plot; it may be easier to use the existing ones from the factory.

enter image description here

import java.awt.BorderLayout; import java.awt.Color; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.util.*; import javax.swing.AbstractAction; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import org.jfree.chart.*; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.axis.NumberTickUnit; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.XYItemRenderer; import org.jfree.data.xy.XYDataset; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection;  /**  * @see http://stackoverflow.com/questions/7231824  * @see http://stackoverflow.com/questions/7205742  * @see http://stackoverflow.com/questions/7208657  * @see http://stackoverflow.com/questions/7071057  */ public class ScatterAdd extends JFrame {      private static final int N = 8;     private static final String title = "Scatter Add Demo";     private static final Random rand = new Random();     private XYSeries added = new XYSeries("Added");      public ScatterAdd(String s) {         super(s);         final ChartPanel chartPanel = createDemoPanel();         this.add(chartPanel, BorderLayout.CENTER);         JPanel control = new JPanel();         control.add(new JButton(new AbstractAction("Add") {              @Override             public void actionPerformed(ActionEvent e) {                 for (int i = 0; i < N; i++) {                     added.add(rand.nextDouble(), rand.nextDouble());                 }             }         }));         this.add(control, BorderLayout.SOUTH);     }      private ChartPanel createDemoPanel() {         JFreeChart jfreechart = ChartFactory.createScatterPlot(             title, "X", "Y", createSampleData(),             PlotOrientation.VERTICAL, true, true, false);         XYPlot xyPlot = (XYPlot) jfreechart.getPlot();         xyPlot.setDomainCrosshairVisible(true);         xyPlot.setRangeCrosshairVisible(true);         XYItemRenderer renderer = xyPlot.getRenderer();         renderer.setSeriesPaint(0, Color.blue);         NumberAxis domain = (NumberAxis) xyPlot.getDomainAxis();         domain.setRange(0.00, 1.00);         domain.setTickUnit(new NumberTickUnit(0.1));         domain.setVerticalTickLabels(true);         NumberAxis range = (NumberAxis) xyPlot.getRangeAxis();         range.setRange(0.0, 1.0);         range.setTickUnit(new NumberTickUnit(0.1));         return new ChartPanel(jfreechart);     }      private XYDataset createSampleData() {         XYSeriesCollection xySeriesCollection = new XYSeriesCollection();         XYSeries series = new XYSeries("Random");         for (int i = 0; i < N * N; i++) {             double x = rand.nextDouble();             double y = rand.nextDouble();             series.add(x, y);         }         xySeriesCollection.addSeries(series);         xySeriesCollection.addSeries(added);         return xySeriesCollection;     }      public static void main(String args[]) {         EventQueue.invokeLater(new Runnable() {              @Override             public void run() {                 ScatterAdd demo = new ScatterAdd(title);                 demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);                 demo.pack();                 demo.setLocationRelativeTo(null);                 demo.setVisible(true);             }         });     } } 
like image 169
trashgod Avatar answered Oct 06 '22 01:10

trashgod


Unless the code that you pasted is incomplete, it looks like your problem is that you didn't associate the NumberAxis objects that you created with your plot.

Instead of creating new NumberAxis objects manually, try getting the default ValueAxis objects that are associated with your plot, then modifying their properties:

XYPlot xyPlot = jfreechart.getXYPlot(); ValueAxis domainAxis = xyPlot.getDomainAxis(); ValueAxis rangeAxis = xyPlot.getRangeAxis();  domainAxis.setRange(0.0, 1.0); domainAxis.setTickUnit(new NumberTickUnit(0.1)); rangeAxis.setRange(0.0, 1.0); rangeAxis.setTickUnit(new NumberTickUnit(0.05)); 
like image 36
Mansoor Siddiqui Avatar answered Oct 05 '22 23:10

Mansoor Siddiqui