在Java中使用jfree图表制作动态折线图

我如何使用java中的jFree图表创建动态折线图,它显示之前2小时的数据,并且还提供一个空白区域,数据从当前时间开始显示2小时。例如,假设当前时间为4pm,那么图表将显示数据从下午2点到下午6点。图表从下午2点到下午4点显示一条线,从下午4点到下午6点提供空白,这是图表移动时的填充时间,表示该图表的尾部从中间开始并向右移动。类似股市图。

回答:

是的,您可以做到。几天前我也遇到了类似的问题。

DynamicLineAndTimeSeriesChart.java

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.Timer;

import javax.swing.JPanel;

import org.jfree.chart.ChartFactory;

import org.jfree.chart.ChartPanel;

import org.jfree.chart.JFreeChart;

import org.jfree.chart.axis.ValueAxis;

import org.jfree.chart.plot.XYPlot;

import org.jfree.data.time.Millisecond;

import org.jfree.data.time.TimeSeries;

import org.jfree.data.time.TimeSeriesCollection;

import org.jfree.data.xy.XYDataset;

import org.jfree.ui.ApplicationFrame;

import org.jfree.ui.RefineryUtilities;

/**

* An example to show how we can create a dynamic chart.

*/

public class DynamicLineAndTimeSeriesChart extends ApplicationFrame implements ActionListener {

/** The time series data. */

private TimeSeries series;

/** The most recent value added. */

private double lastValue = 100.0;

/** Timer to refresh graph after every 1/4th of a second */

private Timer timer = new Timer(250, this);

/**

* Constructs a new dynamic chart application.

*

* @param title the frame title.

*/

public DynamicLineAndTimeSeriesChart(final String title) {

super(title);

this.series = new TimeSeries("Random Data", Millisecond.class);

final TimeSeriesCollection dataset = new TimeSeriesCollection(this.series);

final JFreeChart chart = createChart(dataset);

timer.setInitialDelay(1000);

//Sets background color of chart

chart.setBackgroundPaint(Color.LIGHT_GRAY);

//Created JPanel to show graph on screen

final JPanel content = new JPanel(new BorderLayout());

//Created Chartpanel for chart area

final ChartPanel chartPanel = new ChartPanel(chart);

//Added chartpanel to main panel

content.add(chartPanel);

//Sets the size of whole window (JPanel)

chartPanel.setPreferredSize(new java.awt.Dimension(800, 500));

//Puts the whole content on a Frame

setContentPane(content);

timer.start();

}

/**

* Creates a sample chart.

*

* @param dataset the dataset.

*

* @return A sample chart.

*/

private JFreeChart createChart(final XYDataset dataset) {

final JFreeChart result = ChartFactory.createTimeSeriesChart(

"Dynamic Line And TimeSeries Chart",

"Time",

"Value",

dataset,

true,

true,

false

);

final XYPlot plot = result.getXYPlot();

plot.setBackgroundPaint(new Color(0xffffe0));

plot.setDomainGridlinesVisible(true);

plot.setDomainGridlinePaint(Color.lightGray);

plot.setRangeGridlinesVisible(true);

plot.setRangeGridlinePaint(Color.lightGray);

ValueAxis xaxis = plot.getDomainAxis();

xaxis.setAutoRange(true);

//Domain axis would show data of 60 seconds for a time

xaxis.setFixedAutoRange(60000.0); // 60 seconds

xaxis.setVerticalTickLabels(true);

ValueAxis yaxis = plot.getRangeAxis();

yaxis.setRange(0.0, 300.0);

return result;

}

/**

* Generates an random entry for a particular call made by time for every 1/4th of a second.

*

* @param e the action event.

*/

public void actionPerformed(final ActionEvent e) {

final double factor = 0.9 + 0.2*Math.random();

this.lastValue = this.lastValue * factor;

final Millisecond now = new Millisecond();

this.series.add(new Millisecond(), this.lastValue);

System.out.println("Current Time in Milliseconds = " + now.toString()+", Current Value : "+this.lastValue);

}

/**

* Starting point for the dynamic graph application.

*

* @param args ignored.

*/

public static void main(final String[] args) {

final DynamicLineAndTimeSeriesChart demo = new DynamicLineAndTimeSeriesChart("Dynamic Line And TimeSeries Chart");

demo.pack();

RefineryUtilities.centerFrameOnScreen(demo);

demo.setVisible(true);

}

}

也请在这里检查:

http://blog.odoobiz.com/2012/07/how-to-draw-dynamic-line-or-

timeseries.html

以上是 在Java中使用jfree图表制作动态折线图 的全部内容, 来源链接: utcz.com/qa/428278.html

回到顶部