JFreeChart和时间序列



我正在创建一个JFreechart,我希望每5秒左右提供一次"实时"伪数据。该数据表示车辆相对于两端的某个位置(在100和0之间(。我希望这个位置数据显示为y轴表示当天的小时数,x轴表示其位置。目前,位置数据运行良好,每隔5秒添加一次,但x轴(时间(显示的单位是秒,而不是小时。

编辑:使用((DateAxis)(domain)).setTickUnit(new DateTickUnit(DateTickUnitType.DAY, 1));时,x轴没有范围或刻度,它只是空白

public class DTSCTest extends ApplicationFrame {
private static final String TITLE = "Dynamic Series";
private static final String START = "Start";
private static final String STOP = "Stop";
private static final int COUNT = 10;
private static final int FAST = 5000;
private static final Random random = new Random();
private double gateStart = ThreadLocalRandom.current().nextInt(0, 101);
private boolean returning = false;
private Timer timer;
public DTSCTest(final String title) {
super(title);
final DynamicTimeSeriesCollection dataset =
new DynamicTimeSeriesCollection(1, COUNT, new Second());
Date date = new Date();
dataset.setTimeBase(new Second(date));
float[] gateStartLoad = new float[1];
gateStartLoad[0] = (float)gateStart;
dataset.addSeries(gateStartLoad, 0, "Longwall Data");
JFreeChart chart = createChart(dataset);
this.add(new ChartPanel(chart), BorderLayout.CENTER);
JPanel btnPanel = new JPanel(new FlowLayout());
this.add(btnPanel, BorderLayout.SOUTH);

我在计时器(5000毫秒(上添加我的位置值

timer = new Timer(FAST, new ActionListener() {
float[] newData = new float[1];
@Override
public void actionPerformed(ActionEvent e) {
if(gateStart == 100){
returning = true;
}else if(gateStart == 0){
returning = false;
}
if(returning){
gateStart--;
}else{
gateStart++;
}
newData[0] = (float)gateStart;
dataset.advanceTime();
dataset.appendData(newData);
}
});
}

然后,我尝试设置刻度单位,使x轴显示一天中的小时数,而不是一天中每一秒的

private JFreeChart createChart(final XYDataset dataset) {
final JFreeChart result = ChartFactory.createTimeSeriesChart(
TITLE, "hh:mm:ss", "Shearer Position", dataset, true, true, false);
final XYPlot plot = result.getXYPlot();
ValueAxis domain = plot.getDomainAxis();
domain.setAutoRange(false);
((DateAxis)(domain)).setTickUnit(new DateTickUnit(DateTickUnitType.DAY, 1));
//        domain.setAutoRange(true);
ValueAxis range = plot.getRangeAxis();
range.setRange(0, 100);
return result;
}
public void start() {
timer.start();
}
public static void main(final String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
DTSCTest demo = new DTSCTest(TITLE);
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
demo.start();
}
});
}
}

似乎我自己设置刻度单位不会影响y轴。如何使其显示当天的小时数而不是秒数?

使用DateTickUnit构造函数,该构造函数允许指定DateFormat,并使用具有包括小时的适当格式字符串的DateFormat,例如";HH:mm:ss";。

最新更新