Jfreechart无法在X轴上设置时间

时间:2014-06-18 20:14:12

标签: java jfreechart

我正在尝试制作一个从串口获取数据并在y轴上绘制它们的图表,我希望在x轴上显示当前时间。我认为我正确设置了我的代码,因为我设法将其作为XY运行现在在TimeSeries图表中我唯一的问题是方法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();

}

3 个答案:

答案 0 :(得分:0)

我只使用了TimeSeries天数,因此我使用了org.jfree.data.time.Day类。

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

尝试一下,看看哪些适合你。

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

以下是您如何制作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);

答案 1 :(得分:0)

行!最后我找到了解决方案!我不知道是否是正确的方法,但现在我的图表中有实时的每次我的串口更新是修复代码!

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

答案 2 :(得分:0)

有几点指示:

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