java 在java中使用jfree图表制作动态折线图
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/11469865/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Making dynamic line chart using jfree chart in java
提问by Coder Suman
how can i create dynamic line chart using jFree chart in java which is show data of 2 hours before and also provide a blank space where data show for 2 hours later from current time.For example suppose current time is 4pm ,so the chart display data from 2pm to 6pm.Here 2pm to 4pm the chart show a line and 4pm to 6pm provide a blank space which is fill time to time when the graph is moving that mean the tail of this graph is starting from middle and move right. similar like stock market chart.
我如何使用java中的jFree图表创建动态折线图,它显示2小时前的数据,并提供一个空白空间,其中数据显示从当前时间开始2小时。例如假设当前时间是下午4点,所以图表显示数据从下午 2 点到下午 6 点。这里的图表在下午 2 点到 4 点显示一条线,下午 4 点到 6 点提供一个空白空间,当图表移动时,它会不时地填充,这意味着该图表的尾部从中间开始向右移动。类似股市图表。
回答by dirtyhandsphp
Yes, you can do it. I was facing a similar problem a few days ago.
是的,你可以做到。几天前我遇到了类似的问题。
DynamicLineAndTimeSeriesChart.java
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);
}
}
Please also check here :
还请检查这里:
http://blog.odoobiz.com/2012/07/how-to-draw-dynamic-line-or-timeseries.html
http://blog.odoobiz.com/2012/07/how-to-draw-dynamic-line-or-timeseries.html