我正在尝试使用JfreeChart API创建折线图。 x轴接收数据长(毫秒),Y轴接收双倍。 当我使用动态模板时,我通过Add_Point方法从单独的线程传递数据,并通过此方法不断更新图表。数据不规则地出现,没有任何周期性,这可能使它更加棘手。
我找不到一种方法可以将long转换成易消化的Jfreechart格式而不用它的实例。看来我已经筋疲力尽了所有的选择,但我的猜测是,有很多人已经通过这个并且有一个现成的答案。
我想做的就是每分钟在X轴标签上反映正确的时间,数据点在相应的时间点正确间隔。通过正确的时间,我的意思是传递给方法的长值而不是当前的系统时间。
以下是代码:
import java.awt.BorderLayout;
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.FixedMillisecond;
import org.jfree.data.time.Millisecond;
import org.jfree.data.time.RegularTimePeriod;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.ApplicationFrame;
public class DynamicDataDemo extends ApplicationFrame {
/** The time series data. */
private static TimeSeries series;
public DynamicDataDemo(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);
final ChartPanel chartPanel = new ChartPanel(chart);
final JPanel content = new JPanel(new BorderLayout());
content.add(chartPanel);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(content);
}
private JFreeChart createChart(final XYDataset dataset) {
final JFreeChart result = ChartFactory.createTimeSeriesChart(
"Dynamic Data Demo",
"Time",
"Value",
dataset,
true,
true,
false
);
final XYPlot plot = result.getXYPlot();
ValueAxis axis = plot.getDomainAxis();
axis.setAutoRange(true);
axis.setFixedAutoRange(60000.0); // 60 seconds
axis = plot.getRangeAxis();
axis.setRange(9000.0, 11000.0);
return result;
}
public static void Add_Point(long x, double y){
series.add(new Millisecond(), y);
// series.add(new FixedMillisecond(x), y); }
}
答案 0 :(得分:1)