JFReeChart x轴刻度

我有一个JFree XY线图,总是从x = 0开始。然后根据属性文件中的用户定义设置,应用程序根据该数字递增(这表示以分钟为单位的时间)

例如,x = 0以启动用户定义的设置为5 – 因此比例变为0,5,10,15,20 ……或者用户设置为3,因此它变为0,3,6,9,12。 …..

很简单。

我遇到的问题是图表的开始方式。 如果我从0开始,则0位于图形的中间而不是左下角的-0.0000005,-0.000004,-0.000003 ….. 0.000000,0.000001,0.000002 …… 0.000005

我怎样才能在底部手动添加比例,即定义它应该是2的增量然后它维持它?

谢谢你的时间

您应该使用NumberAxis ,它包含许多方法来定义图表的比例。

示例:

 // 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); 

基于此示例 ,这是一个sscce ,它使用setTickUnit()动态调整域轴刻度单位,从值5

图片

 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); } }); } }