JFreeChart x axis scale

前端 未结 2 1325
北荒
北荒 2021-01-01 23:27

I have a JFree XY Line chart which always starts at x = 0. Then based on user defined settings from a properties file, the application increments based on that number (this

相关标签:
2条回答
  • 2021-01-01 23:53

    You should use NumberAxis, which contains a lot of methods to define the scale of your chart.

    Example :

    // Create an XY Line chart
    XYSeries series = new XYSeries("Random Data");
    series.add(1.0, 500.2);
    series.add(10.0, 694.1);
    XYSeriesCollection data = new XYSeriesCollection(series);
    JFreeChart chart = ChartFactory.createXYLineChart("XY Series Demo", "X", "Y", data,
                                                      PlotOrientation.VERTICAL, 
                                                      true, true, false);
    
    // Create an NumberAxis
    NumberAxis xAxis = new NumberAxis();
    xAxis.setTickUnit(new NumberTickUnit(2));
    
    // Assign it to the chart
    XYPlot plot = (XYPlot) chart.getPlot();
    plot.setDomainAxis(xAxis);
    
    0 讨论(0)
  • 2021-01-02 00:00

    Based on this example, here's an sscce that uses setTickUnit() to adjust the domain axis tick unit dynamically, starting from the value 5.

    image

    import java.awt.BorderLayout;
    import java.awt.EventQueue;
    import java.util.Random;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JSpinner;
    import javax.swing.SpinnerNumberModel;
    import javax.swing.event.ChangeEvent;
    import javax.swing.event.ChangeListener;
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartPanel;
    import org.jfree.chart.JFreeChart;
    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.data.xy.XYSeries;
    import org.jfree.data.xy.XYSeriesCollection;
    
    /** @see https://stackoverflow.com/a/14167983/230513 */
    public class SSCCE {
    
        private static final int COUNT = 100;
        private static final int UNITS = 5;
        private static final Random r = new Random();
    
        public static void main(String[] args) {
            XYSeries series = new XYSeries("Data");
            for (int i = 0; i < COUNT; i++) {
                series.add(i, r.nextGaussian());
            }
            XYSeriesCollection data = new XYSeriesCollection(series);
            final JFreeChart chart = ChartFactory.createXYLineChart("TickUnits",
                "X", "Y", data, PlotOrientation.VERTICAL, true, true, false);
            XYPlot plot = (XYPlot) chart.getPlot();
            final NumberAxis xAxis = (NumberAxis) plot.getDomainAxis();
            xAxis.setTickUnit(new NumberTickUnit(UNITS));
            EventQueue.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    JFrame f = new JFrame("TickUnitDemo");
                    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    f.add(new ChartPanel(chart));
                    final JSpinner spinner = new JSpinner(
                        new SpinnerNumberModel(UNITS, 1, COUNT, 1));
                    spinner.addChangeListener(new ChangeListener() {
    
                        @Override
                        public void stateChanged(ChangeEvent e) {
                            JSpinner s = (JSpinner) e.getSource();
                            Number n = (Number) s.getValue();
                            xAxis.setTickUnit(new NumberTickUnit(n.intValue()));
                        }
                    });
                    JPanel p = new JPanel();
                    p.add(new JLabel(chart.getTitle().getText()));
                    p.add(spinner);
                    f.add(p, BorderLayout.SOUTH);
                    f.pack();
                    f.setLocationRelativeTo(null);
                    f.setVisible(true);
                }
            });
    
        }
    }
    
    0 讨论(0)
提交回复
热议问题