繁体   English   中英

Jfreechart无法在X轴上设置时间

[英]Jfreechart unable to set time in X axes

我正在尝试制作一个图表,该图表从串行端口获取数据并在y轴上绘制它们,而我希望在x轴上显示当前时间。我认为我正确设置了代码,因为我现在设法将其作为XY图表运行时间序列图我唯一的问题是方法series.add(TIME,SERIALDATA); 我不知道如何初始化TIME,我知道我想要一个对象RegularTimePeriod,但我不知道该怎么做。

这是代码。.我知道仅缺少一些行,请帮助我找到它们...

void initialize(){

    frame = new JFrame();
    frame.setBounds(100, 100, 817, 525);


    final TimeSeries series = new TimeSeries("Charts");
    final SerialDataReceived serialdataprint = new SerialDataReceived();


    final TimeSeriesCollection data = new TimeSeriesCollection(series);
    final JFreeChart chart = ChartFactory.createXYLineChart(
            "Tmperature IN",
            "Time", 
            "C", 
            data,
            PlotOrientation.VERTICAL,
            true,
            true,
            false
        );




    final ChartPanel chartPanel = new ChartPanel(chart);
     chartPanel.setBounds(10, 11, 477, 224);
          chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
           chartPanel.setVisible(true);
           frame.getContentPane().setLayout(null);
         frame.getContentPane().add(chartPanel);
      chartPanel.setLayout(null);


     Thread outtempthread=new Thread() {  //THREAD THAT RUNS ALL THE TIME

        public void run() {

         try {
             while (true){
         Thread.sleep(2000);


     double intemp = serialdataprint.getintemp();  //THIS WHERE I TAKE MY SERIAL DATA
      series.add(I WANT TO  DISPLAY HERE LETS SAY 13:23:15, intemp);  //HERE IS MY PROBLEM



             }}
             catch (InterruptedException ie) {}
             }
             };

             outtempthread.start();

}

我只使用过以天为单位的TimeSeries ,所以我使用了org.jfree.data.time.Day类。

这是所有不同时间类的jfreechart javadoc: http : //www.jfree.org/jfreechart/api/javadoc/org/jfree/data/time/package-summary.html

尝试一些,看看什么是适合您的。

由于您似乎只需要一天的小时,分​​钟,因此您可以使用Second Class。

这是您以这种方式制作TimeSeries方法:

int todaysDay =...
int todaysMonth =...
int todaysYear =...

TimeSeries series = new TimeSeries(name, Second.class);

    //this should mark 'inTemp' as 13:23:15
    series.add(new Second(15,23,13,todaysDay, todaysMonth, todaysYear), 
               inTemp);

好!! 终于我找到了解决方案! 我不知道这是不是正确的方法,但是它能正常工作,现在每次我的串行端口更新在我的图表中都是实时的,这里是修复代码!

String timeStamp1 = new SimpleDateFormat("mm").format(Calendar.getInstance().getTime());
         int minute = Integer.parseInt(timeStamp1);


double intemp = serialdataprint.getintemp();    
     series.addOrUpdate(new Minute(minute,hour), intemp);

几个指针:

  1. ChartFactory.createXYLineChart()方法将创建一个折线图,其中X轴和Y轴均为数字。 尝试使用createTimeSeriesChart()获取一个在X轴上显示日期的图表(或创建一个新的DateAxis()实例并调用plot.setDomainAxis()来更改X轴);
  2. 如果需要它提供的结构,TimeSeriesCollection类是一个很好的数据集,可用于时间序列数据(它强制执行规则的时间段并防止重复)。 但是,请记住,它只是XYDataset接口的实现,其中返回的x值是“自1970年1月1日以来的毫秒数”(Java中“日期”的标准编码)。 您可以使用XYSeriesCollection(它也实现XYDataset接口)来简化代码,并在输入新数据时调用System.currentTimeInMillis()以获取当前的x值。图表上的日期轴将负责显示一个此数据的日期范围。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM